Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] AlertDialog

Ordre d'affichage

Sujet résolu
    22 juin 2012 à 22:29:17

    Bonjour à tous.

    Je suis en train de faire une appli toute simple.
    Elle dispose d'un bouton, qui lors du clic, affiche une boite de dialogue avec 2 boutons : Ok et Annuler.
    Je suis les opérations grâce à un champ textView pour savoir ce que l'utilisateur fait comme opération.
    J'aurais besoin d'éclairissement sur le comportement du code ci-dessous.

    Précision :
    Le champ textView (pour suivre les opérations) est nommé "monLibelle"
    La méthode lorsDuClicSurBtn est appelée lors du clic sur le bouton de l'activité (grâce à android:onClick="lorsDuClicSurBtn")


    public void lorsDuClicSurBtn(View vue){    	
    	monLibelle.setText("Je demande de cliquer sur un bouton");
        	AlertDialog.Builder monDialogue = new AlertDialog.Builder(this); 
    		monDialogue.setTitle("mon titre");
    		monDialogue.setMessage("mon msg");
    		
    		//Bouton du dialogue
    		monDialogue.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
    				monLibelle.setText("J'ai appuyé sur ok");
    			}
    		});
    		monDialogue.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
    			
    			public void onClick(DialogInterface dialog, int which) {
    				monLibelle.setText("J'ai appuyé sur annuler");
    			}
    		});
            
    		monDialogue.show();
    		monLibelle.setText("J'ai fini mon dialogue");
    


    Mon interrogation est la suivante :

    Je m'attendais à (et je voudrais) obtenir :-° :
    textView affiche "Je demande de cliquer sur un bouton"
    puis la boîte de dialogue s'ouvre, j'appuie sur ok (par exemple)
    textView affiche "J'ai appuyé sur ok"
    Puis la boîte de dialogue se ferme
    textView affiche "J'ai fini mon dialogue"

    Et j'obtiens o_O :
    textView affiche "Je demande de cliquer sur un bouton"
    textView affiche "J'ai fini mon dialogue"
    puis la boîte de dialogue s'ouvre, j'appuie sur ok (par exemple)
    textView affiche "J'ai appuyé sur ok"
    Puis la boîte de dialogue se ferme

    Si quelqu'un a la gentillesse de m'éclairer, ce serait très sympa.
    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2012 à 10:03:25

      Bonjour,

      La solution serait de mettre la ligne monLibelle.setText("J'ai fini mon dialogue"); dans chacune des méthodes onClick() de ton AlertDialog. Seulement, tu aurais peut-être du mal à voir la transition de "J'ai appuyé sur ok" vers "J'ai fini mon dialogue".

      C'est pour cela que je trouve cette ligne inutile. Ou alors, affiche là dans un autre champ texte. Mais si tu souhaites la conserver, mets la dans les méthodes onClick().

      Maintenant, passons à l'explication du "pourquoi ça ne fait pas ce que je veux?". Je vais t'exposer le déroulement séquentiel du programme.

      Ligne 3, tu crées ton AlertDialog. Par la suite, tu lui donnes un titre, un message puis deux boutons sur lesquels tu crées tes propres listener afin d'afficher un texte dans ton champ texte.

      Mais le code du onClick(), comme son nom l'indique n'est exécuté que lors du clic et pas avant.

      Tu as donc créé et personnalisé ton AlertDialog et tu l'affiches tout de suite après via la méthode show(). Instruction suivante: monLibelle.setText("J'ai fini mon dialogue");.
      C'est-à-dire que pendant que la boite de dialogue se lance, tu es passé à l'instruction suivante. C'est pour cela que ton message de fin s'affiche directement et qu'il faut donc le mettre dans tes onClick() comme mentionné plus haut.
      • Partager sur Facebook
      • Partager sur Twitter
        23 juin 2012 à 10:31:31

        Salut,
        Merci pour ta réponse claire. Je comprends maintenant le déroulement des opérations.

        Est-il possible de mettre en attente l'activité jusqu'à ce que l'utilisateur aie fait son choix ?

        Quelque chose comme :
        monDialogue.show();
        -INSTRUCTION POUR ATTENDRE LA REPONSE DE L'UTILISATEUR-
        monLibelle.setText("J'ai fini mon dialogue");
        


        De sorte a ne pas mettre la suite des instructions la méthode onclick comme tu le proposes.
        • Partager sur Facebook
        • Partager sur Twitter
          23 juin 2012 à 11:10:33

          Bonjour,

          Normalement c'est impossible car les AlertDialog ne sont pas bloquantes sous Android.

          Néanmoins, jette un coup d’œil sur ceci: http://developmentality.wordpress.com/ [...] box-tutorial/. Il y a de grandes chances que ça réponde à ta question.
          • Partager sur Facebook
          • Partager sur Twitter

          [Android] AlertDialog

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown