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

时间:2016-01-17 21:01:44

标签: android alertdialog android-dialogfragment

我正在尝试通过自定义对话框类

创建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;
    }

我通过

在我的主要活动中调用它
public void AddNewTask() {
    Dialogs my_dialog = Dialogs.newInstance("Add New Task",NEW_TASK,NEW_TASK_BUTTON);
    my_dialog.getDiag().show();
}

获得

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AlertDialog.show()' on a null object reference

我有一种预感,就是在创建d之后放置了参数。所以argumnets没有通过?任何帮助表示赞赏

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

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

2 个答案:

答案 0 :(得分:-1)

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

(请注意,lib只提供基本功能,可能还有一些错误)

答案 1 :(得分:-1)

你不能放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;
}}