2012-07-03 3 views
0

У меня есть следующая проблема: мой босс хочет, чтобы я сделал наше приложение гораздо более отзывчивым, не ожидая времени между переключениями. Он использовался для «стандартного» приложения на основе ViewNavigator, но только с одним View, который был уничтожен и заново создан с различным контентом на основе пользовательского выбора вкладок, которые он создал сам. Просмотры переключился по умолчанию SlideViewTransition. Сейчас я схожу на полсекунды с чуть более легким подходом, как описано ниже, однако половина секунд все еще слишком много.Предварительно загружать динамически созданные виды в ActionScript для Flex Mobile App

Приложение представляет собой приложение с вкладками, в котором пользователь может самостоятельно создавать и редактировать новые виды, поэтому создавать/редактировать/удалять вкладки и соответствующие им вкладки. Моя текущая реализация основана на ButtonBar и Group, которая используется для отображения «просмотров». Содержимое группы создается на основе выбранной вкладки. Содержимое основано на XML-данных, которые хранят всю необходимую информацию для создания «представления». Естественно, удаление и создание компонента занимает немного времени (половина секунды, о которой я говорил), поэтому я следую другому решению.

О чем я думал, является использование ViewNavigator и создание всех сохраненных представлений при запуске приложения.

Очень так:

for each (var _view:XML in _allViewsConfig.children()) { 
    var compView:View = new View(); 
    compView.percentHeight = 100; 
    compView.percentWidth = 100; 
    compView.name = _view.label; 

    for each (var _groupElement:XML in _view.vgroup) { 
     var group:VGroup = new VGroup; 
     group.percentWidth = 100; 
     group.percentHeight = 100; 

     for each (var _windowElement:XML in _groupElement.window) { 
      var window:WindowContainer = new WindowContainer; 
      for each (var _componentElement:XML in _windowElement.component) {     
       var component:UIComponent = _componentManager.create([email protected], _componentElement); 
       window.addElement(component); 
      } 

      group.addElement(window); 
     } 
     compView.addElement(group); 
    } 
    views.addItem(compView); 

}

views является ArrayList, который используется для хранения созданных представлений.

Единственная проблема, с которой я столкнулся сейчас, это то, что я не могу использовать View s, хранящийся в этом ArrayList, в соответствующем ViewNavigator.

Я пробовал обычным способом, т.е. navigation.pushView(_viewCreator.views.getItemAt(0) as Class); Это, однако не работает, ошибок или что-либо, то ViewNavigator просто ничего не делать, так что я думаю, что View класс не может быть создан, как это ,

Так как я могу сделать эту работу? Также вы думаете, что это правильное решение проблемы, особенно учитывая всю динамическую природу приложения (основываясь на вкладках)? Естественно, слайд-переходы будут полностью отключены, поскольку они довольно медленны с нашими сложными компонентами.

Любая помощь, комментарии или мысли были бы высоко оценены!

EDIT: На второй мысли, просто используя Groups вместо ViewNavigator и View должны сделать это немного более легкий и решить вопрос взглядов не выдвинуто.

+0

Да, использование 'Group' работает очень хорошо и довольно быстро. Однако не тестировалось на iPad2/3. Вопрос остается, жизнеспособное решение проблемы? – AlBirdie

+0

Где именно ваше замедление? Создание самого представления или получение данных/изображений для представления? Создание представления должно быть довольно быстрым, достаточно быстрым, чтобы вы не заметили. Предварительно загружаете данные/изображения? –

+0

Создание представления было/было прекрасным, это просто процесс получения данных (из XML, который есть), а затем рисование подкомпонентов (которые довольно сложны), которые заняли около половины секунды. Предварительная загрузка, которую я сейчас делаю, работает довольно хорошо. – AlBirdie

ответ

0

Фактически ViewNavigator pushView() - это механизм, который создает экземпляр данного класса (параметр метода).

Для всех целей истории навигации ViewNavigator использует NavigationStack объекты для хранения соответствующих значений (которые вы также можете настроить).

У меня нет прямого ответа для вас, но я думаю, вам придется реализовать свой собственный механизм ViewNavigator (расширение ViewNavigator для использования существующих полезных методов и переопределения других).