2014-03-19 46 views
0

我有一個黑莓應用程序,我希望在發送服務器請求時顯示「請稍候」模式屏幕(這是全屏推送作爲模態屏幕),如果用戶點擊設備後退按鈕,彈出模態屏幕和當前活動屏幕。這工作正常。如何刪除黑莓java中的彈出屏幕的所有回調java

我的問題是:我在活動屏幕中使用了服務器請求的回調,但即使在彈出屏幕後仍執行回調。

調用popScreen()時發生了什麼?如果用戶在服務器請求發生時按下按鈕,如何刪除所有回調並刷新屏幕?

在此先感謝

+1

回調停止你已經開始 – preetam

+0

當你調用popscreen,它將從堆棧中刪除屏幕上的所有線程。 – Signare

+0

@Asha Soman你想用你從服務器獲得的值更新你的屏幕? – Signare

回答

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 
} 

好運

+0

我不明白你的意思是委託和監聽器。我在問你,爲什麼這個回調爲一個彈出的屏幕執行? –

+0

也許我誤解了這個問題。我可以獲得關於服務器請求如何完成的更多信息以及您引用的回調嗎?也許一些代碼... – aichamorro

+0

我的回調是一個由我自己創建的接口,並在通信完成時觸發它的方法。 –