我有三到四项活动
在第四项活动中,我将数据发送到服务器并完成活动,用户可以处于前三个行为中的任何一个。
无论用户在哪个活动中,我都会向用户显示一个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)
如果活动用户在哪里,我该如何显示?
答案 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)
每次更改活动时,都会使用静态方法通知您的服务器通信类。只需使用通知的最后一个活动来显示您的对话框。