需要在不同的活动中显示 popup/Dialog

Need to show a popup/Dialog on different activities

我有一个使用三个活动的应用程序。我在第一个中创建了一个线程,用于检查与服务器的连接,当应用程序无法连接到服务器时,它会显示一个弹出窗口。

问题是,当我从 Activity1 转到 Activity2 并且失去连接时,我得到一个 WindowManager$BadTokenException。

我试过使用 PopupWindow 和 AlertDialog 但我遇到了同样的问题,我不能给他们当前的 Activity。

警报对话框:

            AlertDialog.Builder builder1 = new AlertDialog.Builder(getApplicationContext());
            builder1.setMessage("Se ha hecho el cierre diario, es necesario reiniciar la aplicación.");
            builder1.setCancelable(true);
            builder1.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int id) 
                {
                    java.lang.System.exit(0);
                }
            });

            AlertDialog alert11 = builder1.create();
            alert11.show();

弹出窗口:

        final Activity context = Activity_Start.this;

        final boolean Reset = reset;

        // Inflate the popup_layout.xml
        LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup_mensaje_error);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View popup_error = layoutInflater.inflate(R.layout.mensaje_error, viewGroup, false);

        // Creating the PopupWindow
        final PopupWindow popupW_error = new PopupWindow(context);
        popupW_error.setContentView(popup_error);

在这两种情况下,我都遇到了同样的错误,而且我几乎 100% 确定这是因为 getApplicationContext() 不足以获取应用程序所需的内容。

有人可以帮助我吗?谢谢!!

Android 文档建议使用 getApplicationContext();

但在实例化 AlertDialog.Builder 或 AlertDialog 或 Dialog 时使用当前的 activity 将无法正常工作...

尝试

AlertDialog.Builder builder1 = new AlertDialog.Builder(Activity_Start.this);

而不是

AlertDialog.Builder builder1 = new AlertDialog.Builder(getApplicationContext());

也用

final Context context = Activity_Start.this;

而不是

final Activity context = Activity_Start.this;

对话框与这个特定的 activity 关联,而不是整个应用程序。创建作用域仅为activity的对象时,一般使用Activity.this。在创建范围超出当前 activity.

的对象时使用应用程序上下文

希望对您有所帮助!