为了确定我的BlackBerry应用程序中接下来要显示的屏幕,我正在使用下面的代码。但是,出于某些奇怪的原因,run()
中的代码在通过屏幕点击选择菜单项时执行两次,而在使用手机的键盘时只执行一次。
任何可能导致此问题的想法?
protected boolean navigationClick(int status, int time)
{
switch (mainMenu.getSelectedIndex())
{
case 0:
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
UiApplication.getUiApplication().pushScreen(new PollListScreen());
}
});
break;
case 1:
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
UiApplication.getUiApplication().pushScreen(new UpdateProfileScreen());
}
});
break;
// Etc.
default:
break;
}
return true;
}
答案 0 :(得分:1)
我无法确切地看到哪里你已经放置了你正在展示的代码,但我认为这里不会出现太多问题。
如果多次调用run()
,那么我认为多次调用navigationClick()
。
navigationClick()
可以根据点击的来源(例如,触摸与拨轮)进行不同的调用。但是,您应该可以通过检查status
参数对此进行排序。这样的事情可能适合你:
protected boolean navigationClick(int status, int time)
{
if (status != 0) // <-- NOTICE THIS CHECK!!!
{
switch (mainMenu.getSelectedIndex())
{
case 0:
// your code cut out here for clarity
}
}
return true;
}
如果您使用invokeAndWait()
,则可能会阻止UI线程,这可能会导致第二次调用navigationClick()
时出现问题。不过,这将使用两个错误来制作正确的。通常应该首选invokeLater()
。