2010-02-22 6 views
7

ich einen Dialog bin wie folgt zu erstellen:Identifizieren Sie, welche Alertdialog onClick ausgelöst (DialogInterface Dialog, int die)

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DIALOG_1: 
    return new AlertDialog.Builder(this) 
    .setTitle(R.string.s_dlg1) 
    .setPositiveButton(android.R.string.ok, this) 
    .create(); 

    case DIALOG_2: 
    ... 
    ... 
    } 

    return null; 
} 

@Override 
public void onClick(DialogInterface dialog, int whichButton) { 
    if (dialog == ???) { 
    ... 
    } 
    else if (dialog == ???){ 
    ... 
    } 
} 

Wie erkenne ich, welche Dialog die onClick Methode ausgelöst? Ich kann die Interface-Methoden beim Erstellen des Dialogs nicht als Inline deklarieren, da ich auf Variablen in meiner Klasse zugreifen möchte. Jede andere Schnittstelle übergibt eine Art von ID an ihre Methoden, um zu bestimmen, welches Objekt die Methode genannt wird, aber ich kann scheinbar nichts mit 'DialogInterface Dialog' machen.

+1

Ich kann nicht glauben, dass es keine bessere Lösung dafür gibt. Ich komme hierher zurück, wenn ich etwas anbete ... – AudioDroid

Antwort

1

Vielleicht können Sie den Onclick-Listener als separate Klasse extrahieren und dann die Dialog-ID übergeben? Die Schnittstelle ist android.content.DialogInterface.OnClickListener

+0

Das wäre dasselbe wie das Speichern in einer privaten Variablen in der aktuellen Klasse, da nur ein Dialog gleichzeitig angezeigt werden kann und das onClick vor dem Benutzer ausgelöst wird alles tun, um einen weiteren Dialog zu starten und den Wert zu ändern. Das mache ich jetzt, aber es ist unrein. Ich habe das gleiche Problem mit mehreren DatePickerDialog für die gleiche Aktivität. Es scheint keinen direkten Weg zu geben, um festzustellen, welcher das onDateSet-Ereignis ausgelöst hat. – Monstieur

+0

Ich kenne keinen besseren Weg, wenn Sie den Dialog identifizieren möchten, müssen Sie die ID irgendwo speichern, jetzt enthalten Dialoge kein "Tag" oder eine ID, also müssen Sie entweder - den Onclick in einer Klasse implementieren, die empfängt Eine Variable, die den Dialog identifiziert, erweitert entweder die Dialogklasse selbst und fügt eine ID hinzu oder speichert sie in einer Variablen im aufrufenden Fragment oder in der aufrufenden Aktivität und ruft sie mit getContext ab. Ein anderer Weg (nicht sicher, ob es funktioniert) besteht darin, dialogFragment zu verwenden und ein Tag hinzuzufügen, um das Tag zu erhalten und den verwendeten Dialog zu identifizieren. –

0

dies ist für mich arbeiten

case Dialog_import_database: 
      return new AlertDialog.Builder(Main.this) 
      .setTitle(R.string.ImportDatabaseDialogTitle) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        Log.i("Main","positive Button In dialog Box"); 

wegen was auch immer Sie wollen durch, wenn positive Schaltfläche geklickt wird hier

   } 
      }) 
      .setNegativeButton("Cancel", null) 
      .setMessage(R.string.ImportDatabaseMessage) 
      .create(); 
     } 
+0

Sie können nicht auf Klassenvariablen zugreifen, wenn Sie dies so deklarieren. – Monstieur

+0

Dieser Code wird in den ondialogcreate-Metode mit einer switch-Anweisung platziert, dann rufen Sie einfach showdialog (Dialog_import_database) auf; –

+0

@Kurian Sind Sie sicher? Hast du es versucht? :) –

0

hart ist zwei identifizieren direkt welcher Dialog hat angezeigt worden statt, welche Taste gedrückt wurde, also wenn Sie die Dialoge mit verschiedenen Knöpfen bevölkern, können Sie den Trick tun. Etwas wie dieses:

new AlertDialog.Builder(this) 
.setTitle(R.string.s_dlg1) 
.setPositiveButton(android.R.string.ok, this) 
.create(); 

new AlertDialog.Builder(this) 
.setTitle(R.string.s_dlg2) 
.setNegativeButton(android.R.string.ok, this) 
.create(); 

@Override 
public void onClick(DialogInterface dialog, int whichButton) { 
if (whichbutton == DialogInterface.BUTTON_POSITIVE) { 
... 
} 
else if (whichButton == DialogInterface.BUTTON_NEGATIVE){ 
... 
} 
Verwandte Themen