【问题标题】:Custom DialogFragment says my EditTexts are null自定义 DialogFragment 说我的 EditTexts 为空
【发布时间】:2023-03-12 14:05:02
【问题描述】:

我肯定在 onCreateDialog() 中做错了什么。侦听器工作正常,我可以传递我传入的主机片段字符串,但是,我收到错误消息,说我的 EditTexts 为空。另外,我对编码很陌生,所以请原谅我的混乱。

我应该从哪里获得对它们的引用?

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();


    builder.setTitle("Add Exercise");

    AlertDialog dialog = builder.create();
    final EditText name = (EditText) dialog.findViewById(R.id.ex_name);
    final EditText sets = (EditText) dialog.findViewById(R.id.ex_sets);
    final EditText reps = (EditText) dialog.findViewById(R.id.ex_reps);
    final EditText weight = (EditText) dialog.findViewById(R.id.ex_weight);

    builder.setView(inflater.inflate(R.layout.dialog_add_exercise, null))
    .setPositiveButton("Add", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // User clicked Add button
            //listener.onDialogPositiveClick(AddExerciseDialogFragment.this);
            listener.getName(name.getText().toString().trim());
            listener.getName(name.getText().toString().trim());
            listener.getSets(Integer.parseInt(sets.getText().toString().trim()));
            listener.getReps(Integer.parseInt(reps.getText().toString().trim()));
            listener.getWeight(Double.parseDouble(weight.getText().toString().trim()));
            dismiss();
        }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // User cancelled the dialog
            //listener.onDialogNegativeClick(AddExerciseDialogFragment.this);
            dismiss();
        }
    });

    //dialog.show();

    return builder.create();
}

【问题讨论】:

    标签: android null android-edittext dialog


    【解决方案1】:

    是的,您的 EditTexts 将始终为空。那是因为您在不包含它们的视图上使用 findViewById。 注意这一行:

    builder.setView(inflater.inflate(R.layout.dialog_add_exercise, null))

    在您使用 findViewById 之后,您正在膨胀。这就是问题所在。

    首先,获取您的视图根布局:

    View view = inflater.inflate(R.layout.dialog_add_exercise, null);
    然后,找到您的观点:
    EditText editText = view.findViewById(R.id.editText);

    最后,在你找到所有你想要的视图之后,在你的构建器上使用主视图根布局。

    builder.setView(view)...

    【讨论】:

    • 哇哦,没听懂。解决了我的问题,谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多