2012-03-19 16 views
25

Tengo un programa simple para mostrar un cuadro de diálogo, con una vista de texto editable y escuchar botones positivos/negativos, para realizar una acción personalizada en cada uno (leer ese texto de edición y guardar su contenido a una variable de actividad).Interfaz de diálogo Android obtener vistas de diálogo interno

El problema surge cuando no veo ninguna forma de recuperar mi diálogo actual desde la interfaz de diálogo (y luego, no puedo recuperar ninguna vista dentro del cuadro de diálogo).

Probablemente es una pregunta novato, pero después de algunas búsquedas en Google, no tengo una respuesta.

Mi código es el siguiente

LayoutInflater li = LayoutInflater.from(this); 
View myView = li.inflate(R.layout.my_layout, null); 

AlertDialog.Builder cDialog = new AlertDialog.Builder(this); 
cDialog.setView(myView); 
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    //here the code to retrieve dialog 
    } 
}); 
cDialog.create(); 

Cualquier pista sobre dónde puedo encontrar eso?

Respuesta

61

Puede recuperar las vistas desde la Dialog en el onClick() con:

EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view); 
+0

Hola, slukian. Intenté hacerlo, pero esa instancia pertenece a la clase DialogInterface, no al diálogo. DialogInterface no proporciona el método findViewById ... por lo que no es útil recuperar los contenidos del diálogo dado. – user1220817

+2

@ user1220817 Ese parámetro 'diálogo' es el diálogo que recibió el clic. Equípelo en 'AlertDialog' y luego llame a' findViewById() 'de la siguiente manera:' EditText edit = (EditText) (Diálogo AlertDialog) .findViewById (R.id.editText1); '. – Luksprog

+0

¡Qué bueno! muchas gracias, no se dio cuenta de que DialogInterface podría ser enviado para dialogar directamente. Una vez más, gracias :) – user1220817

13

De esta manera ejecuta perfecta en mi código:

public void onClick(DialogInterface dialog, int which) { 

    Dialog dialog2 =Dialog.class.cast(dialog); 
    EditText edit = (EditText) dialog2.findViewById(R.id.myedittext); 

} 

aplausos

4

Ya tiene referencia a la Ver que tiene el texto de edición. ¿Por qué no usarlo directamente? Solo asegúrese de que la vista sea definitiva para que pueda acceder a ella en la clase anónima OnClickListener.

LayoutInflater li = LayoutInflater.from(this); 
final View myView = li.inflate(R.layout.my_layout, null); 
// don't forget to mark myView as final 

AlertDialog.Builder cDialog = new AlertDialog.Builder(this); 
cDialog.setView(myView); 
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    //here the code to retrieve dialog 
    EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view); 
    } 
}); 
cDialog.create(); 
-1

Puede obtener el diálogo regresó del método show() alertBuidler.

AlertDialog.Builder adb = new AlertDialog.Builder(YourActivity.this); 
//...code to add methods setPositive an setNegative buttons 

Llame al método show() de adb y obtener Dialog de la siguiente manera:

final AlertDialog dialog = adb.show(); 

para que pueda llamar cualquier botón de su diálogo en cualquier punto del código en su actividad:

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick(); 
Cuestiones relacionadas