我的应用程序是基于标签的应用程序。例如,app有3个标签 - A,B& C.如果当前打开的选项卡为“A”,当用户再次尝试单击同一选项卡时,应用程序不应执行任何操作。
我尝试使用以下代码段
执行此操作final Screen currentActiveScreen = UiApplication.getUiApplication().getActiveScreen();
if (newScreen == currentActiveScreen)
{
return;
}
新屏幕是用户尝试导航到的屏幕。
但是这个代码没有触发,当我尝试调试时,我发现屏幕上也出现了一些随机数,因此代码没有进入if循环。
条件中的值如下所示并返回false。 AScreen @ 497293b7 == AScreen @ 2f25c01e
那么,我正在尝试做什么有什么不对吗?我们怎样才能获得屏幕名称。
提前致谢。
答案 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;
}
通过这种方式,您可以在不经常创建新屏幕的情况下处理三个屏幕。