DialogFragment中的EditText始终返回空字符串

时间:2016-11-06 11:14:03

标签: java android android-edittext android-dialogfragment

我在对话框中实现了表单,当单击正面按钮时,我创建了一个新对象到数据库。我为EditText创建了全局变量,但仍无效。在我想要的地方从中获取文本值我总是得到空字符串。

这是代码:

EditText name, desc;

@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    view = inflater.inflate(R.layout.new_dialog, null);

    name = (EditText) view.findViewById(R.id.workout_name);
    desc = (EditText) view.findViewById(R.id.workout_description);


    builder.setView(inflater.inflate(R.layout.new_dialog, null)).setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            MyDbHelper helper = new MyDbHelper (getActivity());
            MyObj w = new MyObj ();

            w.setName(name.getText().toString(););
            w.setDescription(desc.getText().toString());
            w.setLevel(1);

            long id =  helper.createWorkout(w);
            Toast.makeText(getActivity(), id+"", Toast.LENGTH_LONG).show();

            callback.onPositiveButtonClick();
        }
    }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            callback.onNegativeButtonClick();

        }
    });

    return builder.create();
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在下面的代码中,您正在膨胀new_dialog布局,您的名称和desc EditTexts属于此布局。

view = inflater.inflate(R.layout.new_dialog,null);

name = (EditText) view.findViewById(R.id.workout_name);
desc = (EditText) view.findViewById(R.id.workout_description);

但是当您设置对话框的布局时,您正在设置new_workout_dialog。你的名字和desc不属于这种布局。

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

此外,即使您在设置构建器视图时使用了new_dialog,name和desc仍然无关紧要。因为您在setView方法中完全创建了一个新视图。

使用视图变量如下:

builder.setView(view, null))

答案 1 :(得分:0)

我偶然发现了同样的问题。您可以使用onClick提供的getDialog()在对话框中放大视图。

((EditText) getDialog().findViewById(R.id.your_editText_ID)).getText().toString()