2015-02-08 81 views
0

我習慣於將this傳遞給採用Context的任何方法。如果我在內部課堂,我通過​​OuterClassName.this。這可能是不好的做法,但我從來沒有找到明確的答案,我應該做的。活動結束後顯示AlertDialog

我有一個使用Volley加載一些JSON數據的活動,如果出現錯誤,onError回調會顯示一個對話框(使用OuterClassName.this作爲上下文構造)。

但是,如果用戶離開該活動由發生錯誤,應用程序崩潰的時間(按下後退按鈕):

android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 

當然,我的活動運行。但我仍然想要顯示對話框。我怎樣才能做到這一點?

回答

4

通過設計,您的活動完成後不應顯示任何Dialog。所以,在你的情況下,停止彈出對話窗口並避免BadTokenException,你可以嘗試這樣的事:

if(!YourActivity.this.isFinishing()){ 
    //show dialog on error 
} 

不過,如果你還是堅持上彈出的對話框中,你可以做的是:

if(!YourActivity.this.isFinishing()){ 
    //show dialog on error 
} 
else{ 
    //launch a new activity which should take care of error msg dialog 
} 
+0

謝謝,我將使用第一個代碼片段。我的用戶不想知道他們甚至沒有查看的活動無法加載,所以它是有道理的。 – stackunderflow 2015-02-08 03:18:19

+0

順便說一句,如果我只是寫'if(!isFinishing)',而不是'if(!OuterClassName.this.isFinishing())' – stackunderflow 2015-02-08 03:29:16

0
  1. 傳遞OuterClass.this是從內部類有效
  2. 活動時被殺害realted到同一不會認爲是活的。

如果你還想在崩潰結束後顯示一些對話框,我會說創建一個活動作爲對話框並從應用程序上下文開始該活動。所以即使你的主要活動已經死了,這個活動也會在一些後臺進程之後開始。 您可以使用parent="android:Theme.Dialog"作爲創建活動的主題,如對話框