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

问题描述:

我有一个黑莓应用程序,我希望在发送服务器请求时显示“请稍候”模式屏幕(这是全屏推送作为模态屏幕),如果用户点击设备后退按钮,弹出模态屏幕和当前活动屏幕。这工作正常。如何删除黑莓java中的弹出屏幕的所有回调java

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

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

在此先感谢

+1

回调停止你已经开始 – preetam

+0

当你调用popscreen,它将从堆栈中删除屏幕上的所有线程。 – Signare

+0

@Asha Soman你想用你从服务器获得的值更新你的屏幕? – Signare

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

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

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

  • 我认为将是一个合适的解决方案是有一堆 取消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 
} 

好运

+0

我不明白你的意思是委托和监听器。我在问你,为什么这个回调为一个弹出的屏幕执行? –

+0

也许我误解了这个问题。我可以获得关于服务器请求如何完成的更多信息以及您引用的回调吗?也许一些代码... – aichamorro

+0

我的回调是一个由我自己创建的接口,并在通信完成时触发它的方法。 –