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

时间:2011-09-13 20:59:14

标签: flex


我的目标
我想为PlayBook(使用Flex)创建一个具有与PlayBook Web浏览器类似的UI的应用程序。类似的我的意思是我想实现一个菜单,当用户从平板电脑的顶部挡板向下滑动时会显示该菜单。我喜欢这个功能,因为我可以在它上面绘制,放置大量其他对象并处理所有类型的事件,而不需要使用屏幕空间。此外,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而不是选项卡式导航器和多个视图而不是状态,但我不介意那边的建议。
TIA。

1 个答案:

答案 0 :(得分:1)

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

要做你想做的事,我想你将不得不自己创建视图快照。也许在内存位图中即使视图不在屏幕上也会存在。或者,您可能希望将它们临时保存到磁盘以用于内存目的。甚至更好,你可以提供“预渲染”的图像。

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