2013-11-27 40 views
0

我有一個自定義警報。 我做了一個自定義的佈局,它擴展了Dialog,我有幾個函數定義alert的行爲。 我通過單擊按鈕來從活動中調用該自定義警報。handler.post在自定義警報中延遲崩潰我的應用程序

一切正常,直到我想添加handler.postDelayed到對話框。

下面是一些代碼從我的對話框類:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.bonus_dialog); 

    handler.postDelayed(tickOne, 900); 
    handler.postDelayed(tickTwo, 1800); 

} 

這裏是tickOne可運行:

Runnable tickOne = new Runnable() { 

    @Override 
    public void run() { 
     countdown.setText("00:04"); 

    } 
}; 

tickTwo方法是一樣的,只是設置其他文本。

當應用程序崩潰,這表明從我所說的對話,我跟蹤誤差回到這條線在活動的錯誤:

 dialog.show(); 

我想通了,如果我評論handler.postDelayed方法,我的對話框將按預期顯示並消失。

所以,我的問題是 - 爲什麼在自定義對話框中不支持postDelayed方法,我該如何解決這個問題?

+0

你可以顯示你的logcat嗎?還有,你在哪裏創建這個處理程序? – Rajeev

回答

1

您需要在UI線程上顯示對話框。做類似的事情:

final SomeActivity activity = this. 
Runnable tick1 = new Runnable() { 
    public void run(){ 
    countdown.setText("00:04"); 
    activity.runOnUIThread(new Runnable() { 
     public void run(){ 
     countdown.show(); // assuming the countdown is the dialog you want to show 
     } 
    }); 
    } 
} 
+0

看着你的答案,我想出了他的解決方案。 它不需要在UI線程上顯示對話框,就像你建議的 但是,我只需要使Handler ***最終***,現在它就像一個魅力! – SteBra

+0

很高興我能幫忙:) – meredrica