2011-07-08 15 views
25

Tengo un problema con un cuadro de diálogo personalizado.
Mi cuadro de diálogo consiste en un TextView, EditText y un botón "Aceptar". Después de hacer clic en Aceptar, debería obtener el texto del campo EditText y asignarlo a la variable String "nombre" definida en la Actividad.
Todo parece funcionar, no hay errores, etc., sin embargo, "texto" siempre es una cadena vacía.
He leído algunos temas sobre estos problemas, sin embargo, no estoy seguro de qué ajustes debo hacer aquí.
Soy bastante nuevo en la programación de Android, así que estaría agradecido si sb pudiera explicarme el problema. Gracias por adelantado.Android - Diálogo personalizado - No se puede obtener el texto de EditText

 final Dialog dialog = new Dialog(MyActivity.this); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setTitle("Title"); 

    final View layout = View.inflate(this, R.layout.custom_dialog, null); 
    Button button = (Button) dialog.findViewById(R.id.dialog_ok); 
    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

       EditText edit=(EditText)layout.findViewById(R.id.dialog_edit); 
       String text=edit.getText().toString(); 

       name=text; 

       dialog.dismiss(); 
     } 
    }); 


    dialog.show(); 

} 

Respuesta

25

Usted está inflando un diseño en el que no se necesita. Arreglé tu código como ves. Eliminé tu línea donde se infla y cambié la línea donde tratas de encontrar la vista Editar texto.

final Dialog dialog = new Dialog(MyActivity.this); 
dialog.setContentView(R.layout.custom_dialog); 
dialog.setTitle("Title"); 

Button button = (Button) dialog.findViewById(R.id.dialog_ok); 
button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 

      EditText edit=(EditText)dialog.findViewById(R.id.dialog_edit); 
      String text=edit.getText().toString(); 

      dialog.dismiss(); 
      name=text; 

    } 
}); 


dialog.show(); 
+0

Funciona perfectamente, gracias. Errores de principiante;) – ThunderSS

47

Si desea inflar un archivo XML en el cuadro de diálogo para la creación de la versión personalizada que puede utilizar el siguiente código que recibe dos entradas de usuario

LayoutInflater linf = LayoutInflater.from(this);    
final View inflator = linf.inflate(R.layout.twoinputs, null); 
AlertDialog.Builder alert = new AlertDialog.Builder(this); 

alert.setTitle("Tilte"); 
alert.setMessage("Message"); 
alert.setView(inflator); 

final EditText et1 = (EditText) inflator.findViewById(R.id.editText1); 
final EditText et2 = (EditText) inflator.findViewById(R.id.editText2); 

alert.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      String s1=et1.getText().toString(); 
      String s2=et2.getText().toString(); 
      //do operations using s1 and s2 here... 
    } 
}); 

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
      dialog.cancel(); 
    } 
}); 

alert.show(); 
+2

muy limpio código de java !! – BlaShadow

+0

funcionó perfecto. Gracias –

+0

Awesome code! ¡Gracias! ¡Perdí una hora tratando de descubrir cómo usar el Fragmento de Diálogo y ningún tutorial es lo suficientemente claro como para encajar en lo que quiero! –

2

Un alternativa a matsjoe y a krishna (ambos funcionan):

builder.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() { 
    //@Override 
    public void onClick(DialogInterface dialog, int id) { 
     // sign in the user ... 

     Dialog dialogObj =Dialog.class.cast(dialog); 
     EditText etUsr=(EditText) dialogObj.findViewById(R.id.username_id_value); 
     userStr = etUsr.getText().toString();  
    } 
    } 
); 

Kf

Cuestiones relacionadas