activity 关闭后显示 AlertDialog
Showing an AlertDialog once the activity has closed
我习惯于将 this
传递给任何采用上下文的方法。如果我在内部 class 内,我会通过 OuterClassName.this
。这可能是不好的做法,但我从来没有找到我应该做什么的明确答案。
我有一个 activity,它使用 Volley 加载一些 JSON 数据,如果出现错误,onError 回调会显示一个对话框(使用 OuterClassName.this
作为上下文构建)。
但是,如果用户在发生错误时离开 activity(按下后退按钮),应用程序会崩溃:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@422a88e8 is not valid; is your activity running?
当然,我的 activity 不是 运行。但我仍然想显示对话框。我怎样才能做到这一点?
- 传递 OuterClass.this 从内部有效 class
- 当 Activity 被杀死时,与之相关的视图将不存在。
如果您仍想在崩溃结束后显示一些对话框,我会说创建一个 activity 作为对话框并从应用程序上下文启动该 activity。所以即使你的 main activity 已经死了,这个 activity 也会在一些后台进程之后启动。
您可以使用 parent="android:Theme.Dialog"
作为主题来创建 activity as dialog
根据设计,您不应在 activity 完成后显示任何 Dialog
。所以,在你的情况下,要停止弹出对话框 window 并避免 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
}
我习惯于将 this
传递给任何采用上下文的方法。如果我在内部 class 内,我会通过 OuterClassName.this
。这可能是不好的做法,但我从来没有找到我应该做什么的明确答案。
我有一个 activity,它使用 Volley 加载一些 JSON 数据,如果出现错误,onError 回调会显示一个对话框(使用 OuterClassName.this
作为上下文构建)。
但是,如果用户在发生错误时离开 activity(按下后退按钮),应用程序会崩溃:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@422a88e8 is not valid; is your activity running?
当然,我的 activity 不是 运行。但我仍然想显示对话框。我怎样才能做到这一点?
- 传递 OuterClass.this 从内部有效 class
- 当 Activity 被杀死时,与之相关的视图将不存在。
如果您仍想在崩溃结束后显示一些对话框,我会说创建一个 activity 作为对话框并从应用程序上下文启动该 activity。所以即使你的 main activity 已经死了,这个 activity 也会在一些后台进程之后启动。
您可以使用 parent="android:Theme.Dialog"
作为主题来创建 activity as dialog
根据设计,您不应在 activity 完成后显示任何 Dialog
。所以,在你的情况下,要停止弹出对话框 window 并避免 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
}