【问题标题】:Showing an AlertDialog once the activity has closed活动关闭后显示 AlertDialog
【发布时间】:2015-02-08 01:25:20
【问题描述】:

我习惯于将this 传递给任何采用上下文的方法。如果我在内部类中,我通过OuterClassName.this。这可能是不好的做法,但我从来没有找到我应该做什么的明确答案。

我有一个使用 Volley 加载一些 JSON 数据的活动,如果出现错误,onError 回调会显示一个对话框(使用 OuterClassName.this 作为上下文构建)。

但是,如果用户在发生错误时离开了该活动(按下后退按钮),则应用会崩溃:

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@422a88e8 is not valid; is your activity running?

当然,我的活动没有运行。但我仍然想显示对话框。我怎样才能做到这一点?

【问题讨论】:

    标签: java android callback android-alertdialog android-context


    【解决方案1】:

    根据设计,您的活动完成后不应显示任何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
    }
    

    【讨论】:

    • 谢谢,我将使用第一个代码sn -p。我的用户不想知道他们甚至没有查看的活动无论如何都无法加载,所以这是有道理的。
    • 顺便说一句,如果我只写if (! isFinishing),而不是if (! OuterClassName.this.isFinishing()),它也可以工作
    【解决方案2】:
    1. 传递 OuterClass.this 对内部类有效
    2. 当 Activity 被杀死时,关联到相同的视图将不会活着。

    如果您仍然想在崩溃结束后显示一些对话框,我会说创建一个活动作为对话框并从应用程序上下文启动该活动。所以即使你的主要活动已经死了,这个活动也会在一些后台进程之后开始。 您可以使用parent="android:Theme.Dialog" 作为主题,将活动创建为对话框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多