Je crée une boîte de dialogue comme suit: Comment identifier quelle boîte de dialogue a déclenché la méthode OnClick? Je ne peux pas déclarer les méthodes d'interface comme en ligne lors de la création de la boîte de dialogue car je souhaite accéder à des variables dans ma classe. Toutes les autres interfaces transmettent une sorte d'identité à ses méthodes pour identifier quel objet appelé la méthode, mais je ne peux rien dire avec 'Dialoginterface Dialog'. P> P>
6 Réponses :
Peut-être que vous pouvez extraire l'auditeur OnClick en classe séparée, puis transmettre l'ID de dialogue? L'interface est android.content.dialoginterface.onClickListener P>
Cela reviendrait à la même chose que de la stocker dans une variable privée dans la classe actuelle, car une seule boîte de dialogue peut être affichée à la fois et l'ONCLICK déclenchera avant que l'utilisateur puisse faire n'importe quoi pour démarrer une autre boîte de dialogue et modifier la valeur. C'est ce que je fais maintenant, mais c'est impur. J'ai le même problème avec plusieurs DatePickerDialog sur la même activité. Il ne semble pas y avoir un moyen simple d'identifier lequel a tiré l'événement Ondatateet.
Je ne connais pas d'une meilleure façon, si vous souhaitez identifier la boîte de dialogue, vous devez stocker l'identifiant quelque part, maintenant les dialogues ne contiennent pas de "tag" ou d'une pièce d'identité, vous devez donc la mise en œuvre de l'ONCLICK dans une classe qui reçoit un Variable Identification de la boîte de dialogue, élargissez la classe de dialogue elle-même et ajoutez un identifiant, ou enregistrez une variable dans le fragment d'appel ou l'activité et les obtenir en utilisant GetContext. Une autre solution (pas sûr si cela fonctionne) est d'utiliser la boîte de dialogue et d'ajouter une balise à ce sujet, vous pouvez obtenir la balise et identifier la boîte de dialogue utilisée.
Ceci fonctionne pour moi
} }) .setNegativeButton("Cancel", null) .setMessage(R.string.ImportDatabaseMessage) .create(); }
Vous ne pouvez pas accéder aux variables de classe si vous le déclarez comme ceci.
Ce code est placé dans le métode OndiAlogCreate avec une instruction de commutation, puis vous venez d'appeler showdialog (dialog_import_database);
@Matt Gibson Vous ne pouvez pas accéder aux variables de classe de la méthode Inline OnClick.
@Kurian Quelle erreur obtenez-vous lorsque vous essayez? Pouvez-vous poster votre code exact de votre tentative? Je suis peut-être confondu par votre terminologie, mais, par exemple, ce code est actuellement dans mon application de travail: Builder.setneutralbutton ("C", Nouveau Dialoginterface.onclickListener () {@Override Public Void Onclick (dialogue Dialoginterface, INT qui) {mselectedRun = getnextrunnumber (); showrunclock ();} code> où MSelectedRun est membre de ma classe d'activité.
@Mattgibson Je ne peux pas accéder à MselectedRun à moins que ce ne soit une variable statique.
@Kurian quelle erreur obtenez-vous? (Dans mon code, MSelectedRun est un membre normal et non statique - Déclaration est Private Int MSelectedrun Code>. Et honnêtement, cela devrait fonctionner très bien. Si vous ne pouvez pas le faire fonctionner, je ne peux pas le faire fonctionner, je vais Essayez de poster un exemple complet plus tard, mais je suis au travail pour le moment ...)
@Mattgibson Je n'ai plus installé le SDK, mais je ne pouvais accéder que des membres de la classe d'activité statiques et finaux d'une classe intérieure anonyme.
est difficile deux identifiant directement quelle boîte de dialogue a
On a montré à la place quel bouton a été enfoncé, donc si vous remplissez les dialogues avec des boutons différents, vous pouvez faire le tour.
Quelque chose comme ceci:
Cette question est assez ancienne et a été sans réponse jusqu'à présent, j'ai donc trouvé une solution pour ce problème exact que j'ai également à l'encontre.
À l'intérieur de cette activité, je suis lancé, il y a la possibilité, en fonction des actions de l'utilisateur, de tirer 2 Dialogment Custom Custom> DialogmentFRAGEMENT CODE> S. Appelons-les donc l'un de ces faisant essentiellement une vérification nulle sur Dialogmentfragment code>
A code> ou
B code>. Nous les créons avec le constructeur standard, puis
.Show (fragmentmanager,
a_tag code> ou
b_tag code> pour identifier facilement les plus tard. p>
Dialogmentfragment code> est affiché, vous souhaitez décider de ce qu'il faut faire dans votre
OnClick (dialogue Dialoginterface, intClicked) code> et Voici comment je l'ai fait: p>
FINDFRAGMYBYTAG (...) code> ... p> p>
J'ai rencontré le même problème. Et maintenant, j'ai trouvé la solution suivante.
C'est une ancienne question et j'ai toujours rencontré le même problème XO. Comme un moyen de contourner, j'ai utilisé le "hashcode" de l'objet de dialogue. Selon le type de boîte de dialogue, vous pouvez lancer "Interface de dialogue" sur votre type spécifique et comparer le "HASHCode" de la boîte de dialogue "Premier" et "Deuxième" VS "HASCode" de l'objet "Dilaoginterface" de la fonction de rappel. p>
"Public Void Onclick (boîte de dialogue Dialoginterface, INT quelbutton) {}" p>
Signature de la fonction. P>
Je ne peux pas croire qu'il n'y a pas de meilleure solution à cela. Je reviens ici, si j'aime quelque chose ...