2011-10-03 12 views
6

Tenemos dos objetos AlertDialogDiferenciar los diálogos individuales con DialogInterface.OnClickListener

AlertDialog dialog1, dialog2; 

ambos cuadros de diálogo se crean a través de AlertDialog.Builder.
¿Cómo podemos reconocer qué diálogo es fuente de evento en DialogInterface.OnClickListener?

con solo cuadro de diálogo que podemos hacer esto:

AlertDialogInstance.setOnClickListener(myListener); 

//myListener 
public void onClick(DialogInterface arg0, int arg1) { 
     switch (arg1) { 
      case AlertDialog.BUTTON_NEGATIVE: 
       // do something 
       break; 
      case AlertDialog.BUTTON_POSITIVE: 
       // do something 
       break; 
      case AlertDialog.BUTTON_NEUTRAL: 
       // do something 
       break; 
     } 
    } 

cómo modificar este switch lógica para manejar múltiples diálogos?
(O si hay un sistema mejor para manejar los diálogos, que no sean devoluciones de botones en línea, ¿qué es?)

Respuesta

5

Le recomendaré que ponga el parámetro necesario en el oyente personalizado.

private class CustomOnClickListener implements OnClickListener { 
    private int id; 

    public CustomOnClickListener(int id) { 
     this.id = id; 
    } 

    public void onClick(DialogInterface dialog, int which) { 
      //check id and which 
     } 

} 

Entonces, cuando se agrega a onClickListeners diálogos, que acaba de proporcionar una identificación para el oyente.

3
private AlertDialog dialog1; 
private AlertDialog dialog1; 

@Override 
protected void onCreate(final Bundle savedInstanceState) 
{ 
     super.onCreate(savedInstanceState); 
     dialog1 = new AlertDialog.Builder(this).setTitle("dialog1").create(); 
     dialog1.setButton(AlertDialog.BUTTON_POSITIVE, "Yes", this); 

     dialog2 = new AlertDialog.Builder(this).setTitle("dialog2").create(); 
     dialog2.setButton(AlertDialog.BUTTON_NEGATIVE, "NO", this); 
    } 
@Override 
public void onClick(final DialogInterface dialog, final int which) 
{ 
    if (dialog == dialog1) 
    { 
     if (which == AlertDialog.BUTTON_POSITIVE) 
     { 
      // 
     } 
     else if (which == AlertDialog.BUTTON_NEGATIVE) 
     { 
      // 
     } 
    } 
    else if (dialog == dialog2) 
    { 
     if (which == AlertDialog.BUTTON_POSITIVE) 
     { 
      // 
     } 
     else if (which == AlertDialog.BUTTON_NEGATIVE) 
     { 
      // 
     } 
    } 
} 
+0

Comparar objetos es peor que comparar números enteros. – QuickNick

+0

Esta es la peor idea. Además, si usa DialogFragments, creará allí AlertDialogs, y no desea que su Activity (donde su onClick() es) los mantenga como campos. – pjv

0

Si sus diálogos tienen un contenido diferenciable, es obvio que puede decir el diálogo directamente por su contenido:

if(which==AlertDialog.BUTTON_NEGATIVE)return; 
AlertDialog theDialog = (AlertDialog)dialog; 
if(theDialog.findViewById(R.id.phoneinput)!=null) ...;//handle the phone 
if(theDialog.findViewById(R.id.emailinput)!=null) ...;//handle the email 

Por supuesto, la solución no es universal, pero muy útil en algunos casos.

Cuestiones relacionadas