Android Show AlertDialog与用户活动无关

时间:2017-07-19 08:19:43

标签: java android android-activity alertdialog display

我有三到四项活动

在第四项活动中,我将数据发送到服务器并完成活动,用户可以处于前三个行为中的任何一个。

无论用户在哪个活动中,我都会向用户显示一个Custom AlertDialog,询问如何处理从服务器获取的信息。

尝试1:

AlertDialog.Builder alertDialogVar = new AlertDialog.Builder(this);
alertDialogVar.create().show();

尝试2:

AlertDialog.Builder alertDialogVar = new AlertDialog.Builder(namActivity1.this);
alertDialogVar.create().show();

尝试3:

AlertDialog.Builder alertDialogVar = new AlertDialog.Builder(getApplicationContext());
alertDialogVar.create().show();

尝试4:

基于以下链接的建议我甚至尝试过广播,但同样的错误

Displaying a AlertDialog on screen irrespective of Activity Screen

我收到错误说在尝试显示时活动已关闭:

  

错误:E / AndroidRuntime:致命异常:主要                     过程:dijisuji.PicPac,PID:24381
                    android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.os.BinderProxy@3c152e1无效;你的活动在运行吗?
                        在android.view.ViewRootImpl.setView(ViewRootImpl.java:580)
                        在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
                        在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
                        在android.app.Dialog.show(Dialog.java:319)

如果活动用户在哪里,我该如何显示?

2 个答案:

答案 0 :(得分:1)

一种非常简单的方法是创建一个所有其他活动都会扩展的BaseActivity,在这种情况下,您可以简单地使用BaseActivity的上下文而不必担心用户是哪个活动,因为它总是包含实例目前的活动。

class Act1 extends BaseActivity{}

class Act2 extends BaseActivity{}

class Act3 extends BaseActivity{}

class BaseActivity extends AppCompatActivity{
      public void showDialog(){
         AlertDialog.Builder alertDialogVar = new AlertDialog.Builder(BaseActivity.this);
         alertDialogVar.create().show();
      }
}

现在任何活动都可以调用此BaseActivity的showDialog()方法。

答案 1 :(得分:0)

每次更改活动时,都会使用静态方法通知您的服务器通信类。只需使用通知的最后一个活动来显示您的对话框。