Android 显示 AlertDialog,无论用户活动如何

问题描述 投票:0回答:3

我有三到四项活动

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

无论用户处于哪个活动,我都会向用户显示一个自定义警报对话框,询问如何处理从服务器获取的信息。

尝试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:

根据下面链接的建议,我什至尝试过广播,但同样的错误

无论活动屏幕如何,都在屏幕上显示警报对话框

我在尝试显示时收到错误消息,提示活动已关闭:

错误:E/AndroidRuntime:致命异常:main
进程: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)

无论活跃用户位于何处,如何使其显示?

java android android-activity android-alertdialog display
3个回答
2
投票

一个非常简单的方法是创建一个 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();
      }
}

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


0
投票

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


0
投票

一种方法是合并接口。您可以在所有活动中实现您的界面并显示您需要的专用错误消息。无论触发器来自哪里,在当前上下文中,该方法都会被调用,并且您可以显示错误对话框。

我遇到过类似的情况,我必须在后台 API 调用返回时调用错误对话框,我在所有活动中合并了接口并重写了该方法,无论我在哪个屏幕上,如果 API 失败,我都会调用我的接口方法并显示我的错误对话框。

© www.soinside.com 2019 - 2024. All rights reserved.