检索当前活动的屏幕名称Blackberry

时间:2014-06-09 07:21:34

标签: blackberry navigation screen

我的应用程序是基于标签的应用程序。例如,app有3个标签 - A,B& C.如果当前打开的选项卡为“A”,当用户再次尝试单击同一选项卡时,应用程序不应执行任何操作。

我尝试使用以下代码段

执行此操作
final Screen currentActiveScreen = UiApplication.getUiApplication().getActiveScreen();

        if (newScreen == currentActiveScreen)
        {
            return;
        }

新屏幕是用户尝试导航到的屏幕。

但是这个代码没有触发,当我尝试调试时,我发现屏幕上也出现了一些随机数,因此代码没有进入if循环。

条件中的值如下所示并返回false。 AScreen @ 497293b7 == AScreen @ 2f25c01e

那么,我正在尝试做什么有什么不对吗?我们怎样才能获得屏幕名称。

提前致谢。

2 个答案:

答案 0 :(得分:0)

此处没有太多内容,您可能需要添加更多详细信息。

您看到的那些数字是对象的哈希码。如果newScreen引用屏幕的新实例,==将不会评估为true。 有两种选择可以想到, 或者覆盖自定义屏幕的equals方法;  或者使A,B和C成为不同的类(它们很可能已经是),然后使用instanceof

例如

ScreenA newScreen = new ScreenA();
if (currentActiveScreen instanceof ScreenA) return;

答案 1 :(得分:0)

BlackBerry Java中没有屏幕名称。凯文是对的 - 你不能直接比较屏幕(由于他的答复中解释的原因)。您需要定义自己的识别机制,以便在创建之前检查您要导航到的屏幕的类型

如果您有3个选项卡,则可以预先创建3个屏幕(每个选项卡一个),将它们存储在对象的三个成员中,然后在用户按下某个内容时删除并添加所需的屏幕。在此之前,您确实可以将您尝试调出的屏幕与当前屏幕进行比较。

这样的事情:

Screen tabA = new MyScreenForTabA();
Screen tabB = new MyScreenForTabB();
Screen tabC = new MyScreenForTabC();
//...
// Somewhere else in the code
//...
    Screen nextScreen;
    switch (chosenTabLetter) { // Just throwing an idea
        case 'A':
            nextScreen = tabA;
            break;
        case 'B':
            nextScreen = tabB;
            break;
        case 'C':
            nextScreen = tabC;
            break;
    }
    if (nextScreen == currentScreen) {
        return;
    }

通过这种方式,您可以在不经常创建新屏幕的情况下处理三个屏幕。