Android 自定义警报对话框上的空指针

Android 自定义警报对话框上的空指针,android,android-alertdialog,android-dialogfragment,Android,Android Alertdialog,Android Dialogfragment,我正在尝试通过自定义dialogframent类创建alertdialogs public class Dialogs extends DialogFragment { @Override public Dialog onCreateDialog(Bundle saveInstanceState) { AlertDialog.Builder alert=new AlertDialog.Builder(getActivity()); //addit

我正在尝试通过自定义dialogframent类创建alertdialogs

public class Dialogs extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle saveInstanceState) {
        AlertDialog.Builder alert=new AlertDialog.Builder(getActivity());

        //additional custom layout here(skipped)

        alertDialog=alert.create();
        return alert.create();
    }

    public static Dialogs newInstance(String title, String fields, String buttons) {
        Dialogs d = new Dialogs();
        Bundle args = new Bundle();
        args.putString(TITLE,title);
        args.putString(FIELDS, fields);
        args.putString(BUTTONS,buttons);
        d.setArguments(args);
        return d;
    }

    public List<Button> getButtons() {
        return this.buttons;
    }

    public AlertDialog getDialog(){
        return alertDialog;
    }
得到

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AlertDialog.show()' on a null object reference
我有一种预感,就是这些参数是在d被创建之后才出现的。那么argumnets没有通过?谢谢你的帮助

编辑:这不是什么是空指针异常的问题。我很清楚这是什么。 我已经解决了这个问题 对于那些将来可能有类似问题的人。 我改变了在主活动中启动对话框的方式。 我好像错过了一笔零碎的交易

 final Dialogs my_dialog=Dialogs.newInstance("Add New Task", NEW_TASK, NEW_TASK_BUTTON);
        FragmentTransaction  ft = getFragmentManager().beginTransaction();
        my_dialog.show(ft, "dialog");

您将在对话框中设置一个对话框。这真的是你想要的吗?我不这么认为。扩展对话框并替代其方法。不要忘记传递上下文,这样您就能够解析资源(例如字符串、图像、颜色等)。。我为此做了一个小的lib,可以随意使用它,或者只是看一看以获得更好的理解。


(请注意,lib仅提供基本功能,可能存在一些bug)

您不能放置
getActivity()
。这行不通。您需要传递活动对象

以下是我的代码片段:

public class DialogRating extends DialogFragment implements View.OnClickListener {

static BaseActivity activity;
String outletId;
String rating;


public DialogRating() {
}

public static DialogRating newInstance(BaseActivity activity, String outletId, String rating) {
    DialogRating.activity = activity;

    DialogRating fragment = new DialogRating();
    Bundle args = new Bundle();
    args.putString(Const.EXTRA_ID, outletId);
    args.putString(Const.EXTRA_RATING, rating);
    fragment.setArguments(args);
    return fragment;
}}
public class DialogRating extends DialogFragment implements View.OnClickListener {

static BaseActivity activity;
String outletId;
String rating;


public DialogRating() {
}

public static DialogRating newInstance(BaseActivity activity, String outletId, String rating) {
    DialogRating.activity = activity;

    DialogRating fragment = new DialogRating();
    Bundle args = new Bundle();
    args.putString(Const.EXTRA_ID, outletId);
    args.putString(Const.EXTRA_RATING, rating);
    fragment.setArguments(args);
    return fragment;
}}