Доступ ко всем представлениям в ViewNavigatorApplication (мобильное приложение Flex) - PullRequest
0 голосов
/ 14 сентября 2011


Моя цель
Я хотел бы сделать приложение для PlayBook (с использованием Flex), интерфейс которого похож на веб-браузер PlayBook. Под аналогичным я подразумеваю, что хочу реализовать меню, которое отображается, когда пользователь проводит вниз с верхней панели планшета. Мне нравится эта функция, потому что я могу рисовать на ней, размещать тонны других объектов и обрабатывать все виды событий без использования экранного пространства, когда это не нужно. Кроме того, в PlayBook нет кнопки «Меню», как в некоторых телефонах.
В зависимости от конфигураций, выбранных в первом представлении, ряд других представлений будет помещен в представление стека. Когда пользователь получит доступ к выпадающему меню, я хотел бы показать в виде миниатюры снимок моего основного (представление конфигурации) и остальных представлений, которые находятся в стеке представлений. Это в основном покажет пользователю, что происходит в другом представлении, и позволит ему выбрать, на что переключаться.

Достигнуто до сих пор
Меню доступно из любого представления, но код для обработчика событий находится в моем основном файле MXML (project.MXML), я обнаружил, что это единственный способ иметь одно меню для всех представлений. Мне удалось вывести меню из любого вида и отобразить миниатюру текущего вида.

Моя проблема
Как получить доступ ко всем просмотрам. Я пробовал весь день, и все мои испытания дают мне доступ к активному представлению и моему объекту меню. Вот некоторый код, чтобы показать, что происходит:

// This is in my default view MXML

navigator.pushView(MainView);
navigator.pushView(SecondView);
navigator.pushView(ThirdView);
navigator.pushView(FourthView);

.......

// And this is where I try to gain access to my Views (in the Project.MXML)

var totalViews:int = navigator.length;//Length is 5 (4 Views plus menu which is wright)
var obj:Object;

for(var i:int = 0; i < totalViews; ++i)
{
    obj = navigator.getElementAt(i);// Tried child here, it's not working either
    var currentThumbnail:Preview = new Preview();
    var bmData:BitmapData        = new BitmapData( obj.stage.width, obj.stage.height );

    bmData.draw(obj.stage);
    currentThumbnail.setSize( m_previewH, m_previewW );
    currentThumbnail.setBitmap( bmData );
    currentThumbnail.setLayoutBoundsPosition(i * m_previewW + PREVIEW_GAP * i, 10);
    slideMenu.addChild( currentThumbnail );

    trace(i.toString() + " " + obj.toString());
}


Как я упоминал выше, цикл for успешно выполнит работу для текущего представления, а затем завершится сбоем. Кто-нибудь знает, как выполнить цикл по всем представлениям?
Это мое первое приложение с flex, поэтому, если есть какие-либо альтернативы моему подходу, я буду рад их попробовать. Хотя я хотел бы придерживаться одного ViewNavigator, а не навигатора с вкладками и нескольких представлений вместо состояний, я не возражаю против предложений с этой стороны.
ТИА.

1 Ответ

1 голос
/ 14 сентября 2011

Я почти уверен, что по причинам потребления памяти Flex не будет хранить в памяти более одного экземпляра одновременно.Таким образом, цикл по количеству просмотров и попытка доступа к экземпляру этого представления вызовут проблемы;потому что представление по существу создается каждый раз, когда оно отображается и уничтожается каждый раз, когда оно скрыто.

Чтобы делать то, что вы хотите, я думаю, вам придется создавать снимки вида самостоятельно.Возможно, как в растровых изображениях памяти, которые будут существовать, даже если представление не на экране.Или, возможно, вы захотите временно сохранить их на диск для памяти.Или, что еще лучше, вы можете предоставить «предварительно отрендеренные» изображения.

В любом случае, затем сохраните список изображений, относящихся к видам, и отобразите их в меню стиля «Полка дисплея».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...