显示后调用onCreateDialog?

时间:2014-12-31 15:40:49

标签: android android-layout android-fragments android-alertdialog

我正在尝试实施自定义DialogFragment。但是当我试图展示它时,我得到了NullPointerException。另外,正如我所注意到的,onCreateDialog从未被隐含地称为。{ 这有什么问题。我已阅读官方手册,并按照其中的所有步骤进行DialogFragment
这是我自定义Dialog Fragment的代码

 public class UserInputDialogFragment extends DialogFragment {
    InputDialogListener mListener;
    private EditText mTextEdit;

    public UserInputDialogFragment() {
        super();
    }

    // Use this instance of the interface to deliver action events

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        View mainView = inflater.inflate(R.layout.dialog_input, null);
        builder.setView(mainView);
        mTextEdit = (EditText) mainView.findViewById(R.id.user_input);
        if (mTextEdit==null) {
            Log.e("ERROR","Text edit is null");
        }
        // Add action buttons
        builder.setPositiveButton(R.string.ok_btn, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                mListener.onDialogPositiveClick(UserInputDialogFragment.this,mTextEdit.getText().toString());
            }
        });
        builder.setNegativeButton(R.string.cancel_bnt, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                mListener.onDialogNegativeClick(UserInputDialogFragment.this,mTextEdit.getText().toString());
                UserInputDialogFragment.this.getDialog().cancel();
            }
        });

        return builder.create();
    }

    public interface InputDialogListener {
        public void onDialogPositiveClick(DialogFragment dialog, String userInput);

        public void onDialogNegativeClick(DialogFragment dialog, String userInput);
    }


    public void showAndAddHint(FragmentManager manager,String tag,String hint) {
        this.onCreateDialog(null);
        mTextEdit.setHint(hint);
        this.show(manager,tag);

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        // Verify that the host activity implements the callback interface
        try {
            // Instantiate the NoticeDialogListener so we can send events to the host
            mListener = (InputDialogListener) activity;
        } catch (ClassCastException e) {
            // The activity doesn't implement the interface, throw exception
            throw new ClassCastException(activity.toString()
                    + " must implement InputDialogListener");
        }
    }
}

我试图用这种方式显示对话框。

 UserInputDialogFragment userInputDialogFragment = new UserInputDialogFragment();
                    userInputDialogFragment.showAndAddHint(getFragmentManager(),"Please enter phone number",task.phoneNumber);

此处NullPointerException mTextEditnull

public void showAndAddHint(FragmentManager manager,String tag,String hint) {
    this.onCreateDialog(null);
    mTextEdit.setHint(hint);
    this.show(manager,tag);

}

1 个答案:

答案 0 :(得分:2)

showAndAddHint方法无法正常工作。你应该做的是:

1 - 设置成员变量mHint = hint;

2 - 完全按照您现在的方式致电show()

3 - 在创建对话框中读取成员变量mHint,并使用它来设置编辑文本提示。

请勿明确调用onCreateDialog,因为show方法会在需要时为您执行此操作。