2016-11-06 1 views
0

Я реализовал форму в своем диалоговом окне, и когда нажата положительная кнопка, я создаю новый объект для базы данных ma. Я создал глобальную переменную для EditText, но все еще не работает. Где я хочу получить текстовое значение от них, я всегда получаю пустую строку.EditText в DialogFragment всегда возвращает пустую строку

здесь код:

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

Любые идеи, пожалуйста?

+0

нет, у меня нет каких-либо исключений – Aligator

ответ

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 при установке строители просмотра, имя и убывание все равно будет неуместным. Потому что вы полностью создаете новый вид внутри метода setView.

Используйте переменную вида следующим образом:

builder.setView(view, null)) 
+0

Извините, что нет проблем ... В приложении я же имена ... Это я редактируются только на веб-сайте стека , – Aligator

+0

Прочтите мои ответы на последние высказывания. Даже это опечатка, ваш код по-прежнему не прав. Вы создаете новое представление в методе setView. Используйте переменную вида, которую вы создали ранее. –

+0

О да! Я пропустил это извините :) это работает) Спасибо – Aligator