我有三到四项活动
在第四个活动中,我将数据发送到服务器并完成活动,用户可以执行前三个行为中的任何一个。
无论用户处于哪个活动,我都会向用户显示一个自定义警报对话框,询问如何处理从服务器获取的信息。
尝试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)
无论活跃用户位于何处,如何使其显示?
一个非常简单的方法是创建一个 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() 方法。
每次更改活动时,都会使用静态方法通知服务器通信类您所在的活动。只需使用通知的最后一个活动来显示您的对话框。
一种方法是合并接口。您可以在所有活动中实现您的界面并显示您需要的专用错误消息。无论触发器来自哪里,在当前上下文中,该方法都会被调用,并且您可以显示错误对话框。
我遇到过类似的情况,我必须在后台 API 调用返回时调用错误对话框,我在所有活动中合并了接口并重写了该方法,无论我在哪个屏幕上,如果 API 失败,我都会调用我的接口方法并显示我的错误对话框。