我有一个黑莓应用程序,其中我想显示一个"请等待"模态屏幕(这是一个FullScreen推送作为模态屏幕),同时发送服务器请求,如果用户点击设备后退按钮,弹出模态屏幕和当前活动屏幕。这很好。
我的问题是:我在活动屏幕中使用了回调服务器请求。但是即使在弹出屏幕后也会执行回调。
调用popScreen()时究竟发生了什么?如果用户在服务器请求发生时按下后退按钮,我该如何删除所有回调并刷新屏幕?
先谢谢
答案 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
}
祝你好运