简体   繁体   中英

EditText in DialogFragment always return empty string

I have implemented form in my dialog, and when positive button is clicked I create new object to ma database. I've created global variable for EditText's but still not work. Where I want get text value from them I always get empty string.

here is code:

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();
}

Any ideas please?

In below code, you are inflating new_dialog layout and your name and desc EditTexts belong to this layout.

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

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

But when you are setting the layout of the dialog you are setting new_workout_dialog . your name and desc do not belong to this layout.

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

Furthermore, even if you used new_dialog while setting the builders view, name and desc would still be irrelevant. Because you are completely creating a new view inside setView method.

Use the view variable as following:

builder.setView(view, null))

I stumbled upon the same issue. You can get the views inflated in the dialog using getDialog() provided by the onClick.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM