Java,从多个类调用AlertDialog

时间:2016-03-17 13:58:39

标签: java android android-alertdialog

我想在多个类中使用相同的AlertDialog。这是我用来显示AlertDialog的函数:

public void incorrectFields()
    {
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mActivity);
        String emptyFields = "Empty Field(s)";
        String emptyFieldsMessage = "Please ensure all fields are contain data";

        dialogBuilder.setTitle(emptyFields);
        dialogBuilder.setMessage(emptyFieldsMessage);
        dialogBuilder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialogBuilder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // continue with delete
            }
        });

        dialogBuilder.create();
        dialogBuilder.show();
    }

当我在它初始化的同一个类中调用它时,它工作。但是当我从另一个类调用它时,我得到错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

如何成功调用AlertDialog?请记住,我不能扩展包含AlertDialog代码的类,因为我已经扩展了另一个类。

3 个答案:

答案 0 :(得分:1)

您应该通过参数获取上下文:

public void incorrectFields(Context context)

{
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    String emptyFields = "Empty Field(s)";
    String emptyFieldsMessage = "Please ensure all fields are contain data";

    dialogBuilder.setTitle(emptyFields);
    dialogBuilder.setMessage(emptyFieldsMessage);
    dialogBuilder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    dialogBuilder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // continue with delete
        }
    });

    dialogBuilder.create();
    dialogBuilder.show();
}

然后,您可以从您调用的任何活动中获取上下文。 ;)

答案 1 :(得分:1)

更改方法声明如下

public static void incorrectFields(Context context)

将方法中的行更改为

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);

另外我建议将方法移动到某个util类

在活动中调用方法

SomeUtilClass.incorrectFields(this)

片段中的调用方法

SomeUtilClass.incorrectFields(getContext())

答案 2 :(得分:0)

这是我经常在实践中做的事情。可能不是最好的方式,但我还没有发现它做了一些荒唐可笑的事情。如果我这样做,我会更新这个。 :)

static

即使您在某些活动中有以前的功能,并且您发现自己经常使用它们,请将它们更改为WeakReference,然后将活动作为static utility class(非常重要)传递到任何地方你需要从中调用它们,然后访问它们。

或者,您可以创建包含这些方法的{{1}},然后调用它们。