Apache flex 访问ViewNavigatorApplication(Flex移动应用程序)中的所有视图

Apache flex 访问ViewNavigatorApplication(Flex移动应用程序)中的所有视图,apache-flex,Apache Flex,我的目标 我想为PlayBook制作一个应用程序(使用Flex),它的UI类似于PlayBook web浏览器。我的意思是,我想实现一个菜单,当用户从平板电脑的顶部挡板向下滑动时显示。我喜欢这个功能,因为我可以在它上面画画,放置大量的其他对象,并且在不需要的时候不用占用屏幕空间就可以处理所有类型的事件。此外,PlayBook没有像某些手机那样的“菜单”按钮。 根据从第一个视图中选择的配置,许多其他视图将被推送到堆栈视图上。当用户访问下拉菜单时,我希望以缩略图快照的形式显示我的主视图(配置视图


我的目标
我想为PlayBook制作一个应用程序(使用Flex),它的UI类似于PlayBook web浏览器。我的意思是,我想实现一个菜单,当用户从平板电脑的顶部挡板向下滑动时显示。我喜欢这个功能,因为我可以在它上面画画,放置大量的其他对象,并且在不需要的时候不用占用屏幕空间就可以处理所有类型的事件。此外,PlayBook没有像某些手机那样的“菜单”按钮。
根据从第一个视图中选择的配置,许多其他视图将被推送到堆栈视图上。当用户访问下拉菜单时,我希望以缩略图快照的形式显示我的主视图(配置视图)和视图堆栈上的其余视图。这将基本上向用户显示在不同视图中发生的事情,并让用户选择切换哪个视图。

迄今为止取得的成绩
菜单可以从任何视图访问,但事件处理程序的代码在我的主MXML文件(project.MXML)中,我发现这是为所有视图提供一个菜单的唯一方法。 我设法从任何视图中下拉菜单,并显示当前视图的缩略图。

我的问题
如何访问所有视图。我已经尝试了一整天,所有的尝试都让我可以访问活动视图和菜单对象。下面是一些代码来显示正在发生的事情:

// 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());
}
//这就是我尝试访问视图的地方(在Project.MXML中)
var totalViews:int=navigator.length//长度为5(4个视图加上wright菜单)
var-obj:对象;
对于(变量i:int=0;i

正如我前面提到的,这个for循环将成功地完成当前视图的工作,然后它将崩溃。有人知道如何循环所有视图吗?
这是我使用flex的第一个应用程序,所以如果有任何替代方法,我很乐意尝试。虽然我想坚持使用单视图导航器,而不是选项卡式导航器和多视图,而不是状态,但我不介意从这方面提出建议。

TIA。

我非常确定,由于内存消耗的原因,Flex一次不会在内存中保留多个视图实例。因此,在视图数量上循环并尝试访问该视图的实例将导致问题;因为视图基本上是在每次显示时创建的,而在每次隐藏时销毁

要完成您想做的事情,我认为您必须自己创建视图快照。可能是内存中的位图,即使视图不在屏幕上也会存在。或者,您可能希望将它们临时保存到磁盘以供内存使用。或者更好,您可以提供“预渲染”图像


无论如何,保留与视图相关的图像列表,并将其显示在“显示架”样式菜单中。

我以前考虑过你的建议。我发布这个问题的原因是:当我在代码中放置一个断点并展开navigator变量时,我可以看到我的所有视图(不记得现在在哪个节点),所以我认为如果它们在那里,我可以访问它们;你可以访问它们,这是有道理的。没有自己运行代码和测试;我不能肯定到底发生了什么。@unexplored:我也有类似的问题。我选择的解决方案不适用于这里,但是。
// 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());
}