2013-06-05 38 views
3

在我的應用程序中,我創建了一個按鈕單擊對話框,並啓動對話框創建處理程序,現在我想刪除對話框關閉後的處理程序的回調和活動,所以我創建了oncreate方法的活動,持續檢查標誌,當對話框關閉時標誌設置爲true,並且標誌變爲真時處理程序的回調應該被刪除,但處理程序的回調不會被刪除。如何檢查處理程序是否有回調

final Handler handler_Alerts = new Handler(); 
    Runnable r_Alerts = new Runnable() { 
    public void run() { 
     if(Flag){ 
      handler1.removeCallbacks(rhandler1); 
      } 
    Toast.makeText(getApplicationContext(), "In Handler", Toast.LENGTH_SHORT).show(); 
    handler_Alerts.postDelayed(this, 1000); 
        } 
     }; 

    handler_Alerts.postDelayed(r_Alerts, 1000); 
+0

想要刪除回調如果它沒有回調?你如何刪除不存在的東西? –

+0

「」「現在我想刪除這個處理程序的回調,如果它 沒有任何回調。」「」「 如何。你想刪除一些不存在的東西嗎? – pskink

+0

對不起這句話,但有沒有像回調handler.hasmessage()這樣的任何方法,以便我可以在刪除回調之前檢查該處理程序有回調,我必須刪除該回調 – ashokk

回答

1

沒有辦法檢查它是否有可運行的。您可以撥打

handler_Alerts.remove(r_Alerts); 

刪除的處理程序隊列中r_Alerts的任何實例或

handler_Alerts.remove(null); 

如果你願意,你可以發送一個空的消息刪除所有可運行在隊列

2

當你第一次把回調放入,然後在處理程序中檢查該消息。這個空的消息可能表示存在回調。稍後刪除該消息可以類似地使用,以查看回調是否仍然存在。沒有這樣的相關情況,但我認爲我至少會嘗試並分享一種可能性。

... 
Map.handler.sendEmptyMessage(CALLBACK_PRESENT_INTEGER); 
... 
if(Map.handler.hasMessages(CALLBACK_PRESENT_INTEGER) 
... 
Map.handler.removeMessage(CALLBACK_PRESENT_INTEGER); 

... 這可能是不理想的,但如果你從哪裏使用您的回調點訪問您的處理器可能是一個潛在的解決方案。不知道是否有直接的方法來找出答案。

for detail...

+7

這看起來像一個未歸屬逐字複製這個答案:http://stackoverflow.com/a/15816840/3063884 – CJBS

相關問題