仅使用Context而不是Activity实例显示对话框

Abi*_*ash 1 android dialog

如果我使用Activity实例,但是当我使用Context或Application Context实例时,我可以显示对话框.

AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setTitle(title);
            builder.setMessage(msg);

            if (null != positiveLabel) {
                builder.setPositiveButton(positiveLabel, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        dialog.cancel();
                        if (null != listener) {
                            listener.onOk();
                        }
                    }
                });
            }

            if (null != negativeLable) {
                builder.setNegativeButton(negativeLable, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        dialog.cancel();
                        if (null != listener) {
                            listener.onCancel();
                        }
                    }
                });
            }

            builder.create().show();
Run Code Online (Sandbox Code Playgroud)

你能不能使用Activity实例给我一个显示对话框的解决方案

Shu*_*ayu 24

这是您必须始终记住的关于上下文的重要的事情之一.有两种类型的上下文,Activity contextsApplication contexts.您将在许多UI相关类中观察到,传递了一个Context.这不是应用程序上下文!在这种情况下,您必须始终传递活动上下文.除了a之外Toast,没有其他UI组件可以与Application上下文一起使用.

当您需要与应用程序相关的某些服务或组件(如Telephony Manager,位置管理器等)时,始终会传递应用程序上下文.

对于UI,您必须始终传递与UI相关的上下文,即Activity.


ome*_*med 6

问题是我最近也面临的问题,你不能创建一个没有和活动实例的对话框.getApplicationContext()调用也不起作用.我这样做的方法是调用一个方法,从一个活动创建对话框,并传递"this"即对该活动的引用作为参数.

如果要重用此代码,作为可重用组件或在多个位置创建对话框的机制,请创建基本活动类并在其中使用此方法,并根据需要在子类活动中使用它.

  • 它会工作,但在这种情况下,你为什么不做一个活动,只是让它看起来像一个对话框?您可以通过将此添加到清单文件"<activity android:theme ="@ android:style/Theme.Dialog"/>"来完成此操作. (2认同)