IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Problème de listener sur AlertDialog


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut Problème de listener sur AlertDialog
    Hello,

    J'ai un petit souci en utilisant un AlertDialog. J'ai un moyen de contourner le problème mais j'aimerais comprendre le pourquoi du comment.

    Je n'ai pas mon projet sous la main mais basiquement, j'essaye d'utiliser un AlertDialog.Builder avec la méthode setSingleChoiceItems() et un adapter perso. Les items en question sont des boutons, et il m'est impossible de récupérer le click dans le listener entré en paramètre de la fonction.

    Si j'utilise des layout standard (android.R.layout.simple_list_item_1), je récupère le click. Mais si j'utilise un layout perso contenant un élément clickable, impossible de récupérer le click dans le Dialog. Je le reçois bien dans le listener du bouton.

    Il n'est pas possible de mettre des composants clickables dans l'adapter fourni au AlertDialog.Builder ? Est ce un sorte de priorité de callback (le bouton prend le click 'avant' le dialog) ?

    Je sens bien que je fais pas forcément les choses exactement comme il faudrait mais, je ne comprend pas pourquoi ce cas la en particulier ne fonctionne pas (ni avec un bouton, ni avec un CheckedTextView par exemple)

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Je n'ai pas compris ce qui t'empêche de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage("MyMessage");
     
    LayoutInflater inflater = LayoutInflater.from(context);
    View footerView = inflater.inflate(R.layout.my_custom_alert, null);
     
    Button mybutton = (Button) footerView.findViewById (R.id.mybutton);
    mybutton.setOnClickListener (new OnClickListener () {
    	@override
    	public void click (View v)
    	{
    		// TODO : événement au clic sur le bouton
    	}
    });
    AlertDialog alertDialog = builder.create();
     
    alertDialog.show();
    En effet, ce code prend en compte une alerte customisée qui contient un bouton. Ensuite, on récupère le bouton et on définit son événement onClick.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Pour un seul bouton pas de problème, ça fonctionne, mais quand je feed une liste d'item (setSingleChoiceItems()) avec un adapter, je n'arrive pas à écouter le click sur le listener du set d'items. Je posterai du code pour illustrer un peu plus mes propos.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    En simplifiant un peu le code, ça revient à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    dialog.setTitle("Choisir Categorie");
    
    String[] listeStrings = {"Item1", "Item2", "Item3"};
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, XXX, listeStrings);
    
    dialog.setSingleChoiceItems(myAdapter,0,new DialogInterface.OnClickListener() {
    	@Override public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
             }
        });
    	
    dialog.create();
    dialog.show();
    *à noter : j'utilise un ArrayAdapter pour simplifier le code, mais en pratique j'ai une classe dérivée de baseAdapter qui fait le job.

    Si XXX est un simple_list_item_1 ou meme un TextView custom, je rentre dans le listener.
    Si XXX est un bouton, ou un élément clickable, ça ne rentre pas.

    Pourquoi ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Je me permet de relancer car je n'ai toujours pas trouvé de réponse à ce problème.

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Xavi_bgsec Voir le message
    Si XXX est un bouton, ou un élément clickable, ça ne rentre pas.

    Pourquoi ?
    Parce que l'élément clickable capture le click, et ne transmet donc pas l'information à la ListView...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Dans ce cas, est ce qu'il y a un moyen de récuperer l'objet Dialog dans le contexte du bouton(c-a-d sans le récupérer globalement) ?

    Ou alors l'utilisation de setSingleChoiceItem doit toujours se baser sur des éléments non clickables (ce qui semble logique puisque la listview gère les clicks elle même).

    Enfin bref, problème résolu mais je suis pas complètement convaincu

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Personnellement, je n'utilise que très rarement les Dialog, surtout quand il s'agit d'élément clickables.

    Si on avait le XML des items que tu essayes d'insérer cela aiderait...

    Par exemple, une ListView de "checkbox" marche très bien, "l'état" check était associé correctement à l'élément, la ListView réagira bien au onItemSelected().
    Par contre, une ListView de layout comportant un checkbox nécessite que le checkbox "remonte" au layout son état "checked", hors un layout n'a pas de tel état (enfin, ne le déclare pas par l'interface "Checkable")=> nécessiter d'implémenter un layout spécial "CheckableLayout" par exemple.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2015, 18h59
  2. [Débutant]Problème Listener sur combobox
    Par Houssem dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 09/04/2007, 14h06
  3. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  4. Problème avec RDTSC sur K6-III
    Par le mage tophinus dans le forum x86 32-bits / 64-bits
    Réponses: 17
    Dernier message: 30/09/2003, 09h43
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo