Findviewbyid devuelve null en un diálogo

Tengo un diálogo personalizado y cuando intento conseguir el valor de un EditText devuelve null.

Esta línea devuelve null

EditText et = (EditText)findViewById(R.id.username_edit); 

Aquí está el código en su totalidad.

 protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_TEXT_ENTRY: LayoutInflater factory = LayoutInflater.from(this); final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null); return new AlertDialog.Builder(TicTacToe.this) //.setIconAttribute(android.R.attr.alertDialogIcon) .setTitle(getTitleText()) .setView(textEntryView) .setPositiveButton("JOIN GAME", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { try { EditText et = (EditText)findViewById(R.id.username_edit); playerName = et.getText().toString(); } catch (Exception e) { } } }) .create(); } return null; } 

Prueba esto:

 EditText et = (EditText)textEntryView.findViewById(R.id.username_edit); 

Usted tiene que decir en qué vista para encontrar el id. De lo contrario, tratará de encontrar el identificador en la vista desde la disposición xml inflada por setContentView (normalmente declarado en onCreate )

En mi caso: Primero tengo que llamar al

Dialog.show (),

Y sólo después de que yo era capaz de utilizar

Dialog.findviewById (R.id.myID).

Si me faltó para llamar al show (), que tengo un nulo de nuevo con findViewByID.

Me enfrenté a un problema similar. En mi caso, tuve un diálogo con diseño personalizado y en este diseño tenía un radioButton. Para resolver eso, utilicé el código de seguimiento:

 View dialogLayout = factory.inflate(R.layout.dialog_layout, null); AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setView(dialogLayout); RadioButton radiobt = (RadioButton) dialogLayout.findViewById(R.id.radioBt); 

Yo estaba teniendo el mismo problema, que se presentó en el siguiente fragmento de código:

 final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.addbank_dialog); dialog.show(); Button btnSaveBank = (Button)dialog.findViewById(R.id.btnSaveBank); final EditText etBankName = (EditText)dialog.findViewById(R.id.etBankName); btnSaveBank.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try{ String bank = etBankName.getText().toString(); SharedCommonData.dbOps.saveBankInDB(bank); } catch(Exception e){ e.printStackTrace(); } Toast.makeText(SharedCommonData.context, "Bank Saved", Toast.LENGTH_SHORT); refreshBanks(); dialog.dismiss(); } }); 

etBankName devolvía valor nulo, pero luego usé dialog.findviewbyid(R.id.etBankName) y funcionó.

  • Interfaces de actividad de Android para fragmentos: try / catch bloques vs. instancia de cheques
  • Ahorro de grandes arreglos cortos android
  • Android Linkify - números de teléfono que se pueden hacer clic
  • Android java cambiar imagen dibujable
  • Excepción de tiempo de ejecución extra cuando se ejecuta una aplicación de Android en algunos dispositivos
  • Arrastrar y soltar iconos a la pantalla de inicio
  • ¿Cómo sé si mi mensaje de GCM es lo suficientemente pequeño (<4kb) para enviar? (Cómo obtener el tamaño de la cadena?)
  • El servidor no admite la suite de cifrado predeterminada de Android 5.0
  • ¿Cómo puedo dividir la lógica de HttpUrlConnection en varios métodos?
  • Cómo burlar getApplicationContext
  • Falso error positivo de permiso de pelusa incluso después de pedir permiso en tiempo de ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.