如何删除Blackberry java中弹出屏幕的所有回调

时间:2014-03-19 10:00:23

标签: blackberry java-me screen

我有一个黑莓应用程序,其中我想显示一个"请等待"模态屏幕(这是一个FullScreen推送作为模态屏幕),同时发送服务器请求,如果用户点击设备后退按钮,弹出模态屏幕和当前活动屏幕。这很好。

我的问题是:我在活动屏幕中使用了回调服务器请求。但是即使在弹出屏幕后也会执行回调。

调用popScreen()时究竟发生了什么?如果用户在服务器请求发生时按下后退按钮,我该如何删除所有回调并刷新屏幕?

先谢谢

1 个答案:

答案 0 :(得分:1)

当然,这个问题有几种解决方案。我想服务器请求是异步发送的。

  • 我想到的最简单的方法是有一个标志和回调时 触发检查用户是否取消了操作(按下 后退按钮)。

  • 另一个解决方案,也许不是那么好检查是否 加载屏幕仍在显示堆栈中。

  • 我认为合适的解决方案是拥有一堆 取消了http操作,因此您可以随时停止请求。然后 如果已经发送了对服务器的请求,则在调用之前 回调你可以检查操作是否已被取消。 否则,您只需避免将请求发送到服务器。

当您调用popScreen时,将从堆栈中移除位于显示堆栈顶部的屏幕(前景中的屏幕),并刷新屏幕(触发绘制事件)以反映更改。确保在UiThread上执行Screen.pop():

UiApplication.getUiApplication().invokeLater(runnable)

在您的方案中,如何处理回调?它是您传递请求的委托还是您注册的听众?

当我提到委托时,我指的是以下内容:

Server.sendRequest(request, objectWithCallbacks)

将相应地调用objectWithCallbacks(并且只有objectWithCallbacks)的回调。另一方面,听众会是这样的:

Server.addListener(objectWithCallbacks, request)
Server.sendRequest(request);
通过这种方式,所有对象都可以听到" eventName"将相应地触发他们的回调。

据我所知,您的回调将始终执行,但在回调本身,您可以检查当前是否显示屏幕。

if( this.isDisplayed() ) {
    // Do the magic
}else{
    // Do nothing
}

祝你好运