从pushGlobalScreen()创建的全局屏幕不能与popScreen()(Blackberry)一起使用

时间:2014-02-26 00:07:15

标签: java blackberry java-me

我正在使用pushGlobalScreen()从应用程序的背景创建一个全局屏幕,但是一旦创建它就无法删除全局屏幕。

这是我的听众代码:

UiApplication.getUiApplication().requestForeground();
UiApplication.getUiApplication().pushGlobalScreen(new QuestionGScreen(), 1, UiApplication.GLOBAL_QUEUE);

QuestionGScreen有一些简单的按钮然后使用相同的代码创建另一个全局屏幕(减去requestForeground)如果按下是,如果没有按下那么我有

UiApplication.getUiApplication().requestBackground();
UiApplication.getUiApplication().popScreen();

我知道没有参数的popScreen()被折旧,但使用popScreen() UiApplication.getUiApplication().getActiveScreen()给了我一个非法的争论例外。

还有其他一些方法可以删除全局屏幕,还是我在弹出全局屏幕时出错?

谢谢,Quinn

1 个答案:

答案 0 :(得分:0)

全局屏幕不是由BlackBerry作为应用程序的一部分管理的,如PopupupScreen或普通屏幕。因此,当您按下“全局”屏幕时,无法在“应用程序显示”堆栈中找到它,也不会在将应用程序置于后台时进行“后台”操作。

如果您希望在推送全局屏幕后与全局屏幕进行交互,则必须自己保留对屏幕的引用。

请记住,在与对话框屏幕交互时(例如,如果您正在处理按钮按下),您将不会在自己的应用程序上下文中执行,因为屏幕未在您自己的上下文中运行。因此,为了与您的应用程序进行交互,我建议您尝试使用Global Events。你会在这里找到一篇关于这些文章的好文章:

Global Events article

就个人而言,我会避免使用全局屏幕,除非你真的需要引起用户的注意,无论他们目前在做什么 - 想象你的用户是在一些重要的电子邮件中间,他或她真的需要看到你的屏幕?尝试其他形式的通知。

你能用正常的弹出屏幕实现你想要的吗?请注意,全局屏幕并不特殊,全局屏幕的推送方式也不同。

<强>更新

您发表了此评论:“当电话屏幕关闭时,屏幕会消失”

我必须道歉,这引发我回顾你所说的原帖(我错过了)“这是我的听众的代码”。

这里的问题是,实际上,您的侦听器代码正在电话应用程序的上下文中运行。现在,当电话结束时,电话应用程序将自动进入后台。我想,这就是为什么你的弹出式屏幕正在消失。当然,全球性的还没有,因为它们不属于电话应用程序。

侦听器中接受的练习是尽可能少地处理它们,而是使用全局事件将上下文切换到您自己的应用程序(请参阅前面的链接)。你的应用程序将在后台运行,将收到全局事件,将显示弹出屏幕,但是要查看弹出屏幕,你将不得不requestForeground(),这将隐藏手机屏幕。没什么大不了的,因为那个屏幕无论如何都会隐藏起来......