我习惯将this
传递给任何采用Context的方法。如果我在内部班级,我会通过OuterClassName.this
。这可能是不好的做法,但我从来没有找到我应该做的明确答案。
我有一个使用Volley加载一些JSON数据的活动,如果有错误,onError回调会显示一个Dialog(用OuterClassName.this
构造为Context)。
但是,如果用户在发生错误时已离开该活动(按下后退按钮),则应用程序崩溃:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@422a88e8 is not valid; is your activity running?
当然,我的活动并非正在运行。但我还是想显示对话框。我怎样才能做到这一点?
答案 0 :(得分: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
}
答案 1 :(得分:0)
如果您仍想在崩溃结束后显示一些对话框,我会说创建一个活动作为对话框并从应用程序上下文启动该活动。因此,即使您的主要活动已经死亡,此活动也会在一些后台流程后启动。
您可以使用parent="android:Theme.Dialog"
作为主题来创建活动作为对话框