2011-10-03 10 views
6

Mamy dwa AlertDialog obiektówrozróżnić pojedyncze Komunikacja z DialogInterface.OnClickListener

AlertDialog dialog1, dialog2; 

oba dialogi są tworzone poprzez AlertDialog.Builder.
Jak rozpoznać, które okno dialogowe jest źródłem zdarzenia w DialogInterface.OnClickListener?

z pojedynczym oknie możemy to zrobić:

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; 
     } 
    } 

jak zmodyfikować ten switch logiki do obsługi wielu okien dialogowych?
(A może jest lepszy system do obsługi okien dialogowych, inny niż wywołania zwrotne w przyciskach, co to jest?)

Odpowiedz

5

Polecam umieścić potrzebny parametr w niestandardowym słuchniku.

Następnie, po dodaniu obiektu onClickListeners do okien dialogowych, wystarczy podać identyfikator słuchaczowi.

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

Porównywanie obiektów jest gorsze niż porównywanie liczb całkowitych. – QuickNick

+0

To jest najgorszy pomysł. Poza tym, jeśli użyjesz DialogFragmentów, utworzysz tam AlertDialogs, a Ty nie chcesz, aby twoja Aktywność (gdzie jest twoja onClick() jest trzymana jako pola. – pjv

0

Jeśli dialogi mają różniczkowalnej treści, można oczywiście powiedzieć okno bezpośrednio za jego treść:

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 

Oczywiście rozwiązanie to nie jest uniwersalny, ale bardzo przydatny w niektórych przypadkach.