2010-02-22 5 views
7

Je crée une boîte de dialogue comme suit:Identifiez AlertDialog déclenché onClick (dialogue DialogInterface, int qui)

@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 == ???){ 
    ... 
    } 
} 

Comment identifier ce qui a déclenché la méthode de dialogue onClick? Je ne peux pas déclarer les méthodes d'interface comme étant en ligne lors de la création de la boîte de dialogue car je veux accéder aux variables de ma classe. Chaque autre interface passe une sorte d'identifiant à ses méthodes pour identifier l'objet appelé la méthode, mais je ne peux rien faire avec 'DialogInterface dialog'.

+1

Je ne peux pas croire qu'il n'y a pas de meilleure solution à cela. Je reviens ici, si j'aime quelque chose ... – AudioDroid

Répondre

1

Peut-être pouvez-vous extraire l'écouteur onclick en tant que classe séparée, puis passer l'identifiant de la boîte de dialogue? L'interface est android.content.DialogInterface.OnClickListener

+0

Cela équivaudrait à le stocker dans une variable privée de la classe en cours, puisqu'une seule boîte de dialogue peut être affichée à la fois, et onClick tirera avant que l'utilisateur puisse faire n'importe quoi pour démarrer un autre dialogue et changer la valeur. C'est ce que je fais maintenant, mais c'est sale. J'ai le même problème avec plusieurs DatePickerDialog sur la même activité. Il ne semble pas y avoir de moyen simple d'identifier lequel a déclenché l'événement onDateSet. – Monstieur

+0

Je ne connais pas de meilleure façon, si vous voulez identifier la boîte de dialogue, vous devez stocker l'ID quelque part, maintenant les boîtes de dialogue ne contiennent pas de "tag" ou d'id, donc vous devez soit implémenter l'onclick dans une classe qui reçoit une variable identifiant la boîte de dialogue, soit étendez la classe de dialogue elle-même et ajoutez un identifiant, soit enregistrez-la dans une variable du fragment ou de l'activité appelant et obtenez-la en utilisant getContext. une autre façon (pas sûr si cela fonctionne) est d'utiliser dialogFragment et d'y ajouter une balise, vous pouvez ainsi obtenir la balise et identifier la boîte de dialogue utilisée. –

0

cela fonctionne pour moi

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"); 

à cause ce que jamais vous voulez en raison lorsque le bouton positif est cliqué ici

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

Vous ne pouvez pas accéder aux variables de classe si vous le déclarez comme ceci. – Monstieur

+0

ce code est placé dans le metode ondialogcreate avec une instruction switch puis vous appelez simplement showdialog (Dialog_import_database); –

+0

@Kurian Etes-vous sûr? As-tu essayé? :) –

0

est difficile d'identifier deux directement La boîte de dialogue a été affichée à la place et non sur quel bouton a été enfoncé, donc si vous remplissez les boîtes de dialogue avec différents boutons, vous pouvez faire l'affaire. Quelque chose comme ceci:

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){ 
... 
} 
Questions connexes