Исключение нулевого указателя Android для EditText и диалогов

#android

#Android

Вопрос:

я создал макет для своего диалога и увеличил макет в onCreateDialog

 /**
 * Object to hold the reference to ListName EditText from Alert_Dialog
 */
private EditText mListNameEditText;

protected Dialog onCreateDialog(int id) {
    switch(id) {            
    case DIALOG_TEXT_ENTRY:

        Log.w(TAG, "In onCreateDialog");

        LayoutInflater factory = LayoutInflater.from(this);
        final View alertDialogView = factory.inflate(R.layout.alert_dialog, null);
        mListNameEditText = (EditText) findViewById(R.id.listNameText);
        .../...
        .../...
        .../...
  

В onpreparredialog я пытаюсь получить текст, который я ввел внутри EditText, и это вызывает исключение нулевого указателя. Пожалуйста, помогите разобраться в проблеме

 @Override
protected void onPrepareDialog(int id, Dialog dialog) {
    switch(id) {            
    case DIALOG_TEXT_ENTRY:

        Log.w(TAG, "In onPrepareDialog");
        mListNameEditText = (EditText) findViewById(R.id.listNameText);

        if(mListNameEditText == null)
            Log.w(TAG, "ListName EditText is null"); // This text is printed !!

        mListNameEditText.setOnKeyListener(new OnKeyListener() { // Exception here because mListNameEditText is NULL
  

Ответ №1:

Изменить

 mListNameEditText = (EditText) findViewById(R.id.listNameText);
  

Для

 mListNameEditText = (EditText) dialog.findViewById(R.id.listNameText);
  

Строка, которая у вас есть, пытается найти EditText в основном макете (тот, который вы установили с помощью setContentView(R.layout.whatever); ). Изменив его на строку, которую я опубликовал, вы выполняете поиск в этом диалоговом окне для EditText

Кроме того, в вашем onCreateDialog вы делаете то же самое. Там также необходимо использовать dialog.findViewById(…)