2015-02-08 76 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"作为创建活动的主题,如对话框