【问题标题】:Go back to previous version of the screen返回上一版本的屏幕
【发布时间】:2013-03-29 17:11:51
【问题描述】:

我正在开发一个有多个屏幕的 BlackBerry 应用程序。我能够轻松地在每个屏幕上来回导航。但是,我正在尝试“返回”到屏幕的先前版本。例如,有两个屏幕 A(主屏幕)和 B(第二屏幕)。我按如下方式从 A 导航到 B:

UiApplication.getUiApplication().pushScreen(new MsgScreen());

我从 B 导航回 A:

public boolean onClose() {
         UiApplication.getUiApplication().popScreen(this);
            return true;
        }

每当我从 A 导航到 B 时,都会创建一个 B 的新实例。但是,屏幕 B 有一个按钮,可以将LabelFields 添加到VerticalFieldManager。每当我从 A 导航到 B 时,添加的字段都不会被查看,因为它不是构造函数的一部分。因此,我想查看屏幕的最后一个或“以前”版本,而不是每次都获取新创建的屏幕。请帮忙。

【问题讨论】:

    标签: blackberry navigation screen


    【解决方案1】:

    我认为您在这里有几个不同的选择(至少):

    将屏幕 B 保存在内存中

    在这里,当您从 A 类中创建 B 的 new 实例时,您会将其保存在(A 类的)成员变量中。然后,每当您需要从 A 回到 B 时,您将使用成员变量,如果有的话:

    A类:

     private MsgScreen _bScreen;
    
     private MsgScreen getBScreen() {
         // don't actually create the screen until we need it,
         //   but don't create more than one instance
         if (_bScreen == null) {
             _bScreen = new MsgScreen();
         }
         return _bScreen;
     }
    
     public void showB() {
         UiApplication.getUiApplication().pushScreen(getBScreen());
     }
    

    注意:see here for a more sophisticated way to implement this technique 在许多 Screen 类中,使用可重用的基类

    存储 B 的状态并在(重新)显示时加载它

    另一种选择是让MsgScreen (B) 被销毁,并且每次都重新创建,就像你原来的那样。但是,请确保在关闭 MsgScreen 时,不要使用原始设计,而是使用 PersistentStore 之类的东西来保存其状态。也就是说,如果用户可以在B屏上添加标签,那么保存所有标签的内容。也许您将String[](或Vector)保存到您的PersistentStore。然后,在MsgScreen的构造函数中,或者在(MsgScreen.java)中:

    protected void onUiEngineAttached(boolean attached) {
        if (attached) {
            // load the String[] from the persistent store, 
            //  and create new LabelFields
        } else {
            // save the String[] to the persistent store
        }
    }
    

    您可以从持久存储中重新加载字符串数组,并创建新的LabelFields,就像以前一样。

    或者,您可以选择在用户创建 LabelField 内容时将其保存到商店,而不是在屏幕关闭时保存。这取决于你。

    您还可以考虑这些标签的内容是什么,以及如果用户离开您的应用并且没有返回(在重新启动之前)会发生什么。标签的字符串丢失可以吗?

    此外,如果您对许多 Screens 执行相同的操作(或者如果 Screens 很复杂,并且有许多子 Fields),则第一个替代方案可能会占用大量内存。如果你只对MsgScreen 有这个问题,那么这可能不是什么大问题,最简单的解决方案就是我建议的第一个。但是,如果您的应用中有很多屏幕(A、B、C、D、E、F 等),那么您可能不想全部保存,因为它们实际上并没有显示出来。

    这类问题应该可以帮助您确定何时或是否应该保存 UI 的状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2023-03-22
      • 2018-10-06
      相关资源
      最近更新 更多