6 votes

Comment empêcher le bouton à l'intérieur d'un élément de liste de surligner

Donc j'ai un élément de liste personnalisé avec des boutons pour un ListView. Lorsqu'on appuie dessus, le bouton affiche une image alternative pour montrer un retour à l'utilisateur. Cependant, lorsque je clique sur la ligne, tous les boutons affichent l'état pressé comme si je les avais tous cliqués.

Comment puis-je faire en sorte que le bouton affiche son état d'origine au lieu de l'état pressé ?

layout/Élément de liste :

drawable/response_btn.xml:

J'ai essayé de supprimer state_focused et state_pressed, state_focused. Il semble que le bouton prenne l'état pressé de son parent.

4voto

AlexGuti Points 121

J'ai découvert que définir android:clickable="true" sur la vue parent empêchera l'état des vues enfants d'être modifié.

Voir cette réponse.

1voto

Cela fait travailler mon application plus intensément, mais cela résout le problème :

...
mImageIcon.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.setBackgroundResource(R.drawable.my-background);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                /*
                 * Vous pouvez utiliser un autre arrière-plan au lieu de 0.
                 */
                v.setBackgroundResource(0);
                break;
            }

            return false;
        }// onTouch()
    });

1voto

Je rencontre également ce problème, j'ai fait des recherches sur Google et j'ai passé environ 3 heures dessus ! Maintenant, j'ai trouvé la solution. Il suffit d'ajouter un OnClickListener à la vue enfant. Et même ne RIEN FAIRE dans la méthode OnClick. Ça fonctionne sur l'émulateur 2.3 et sur mon Nexus 5.

0voto

Tomer Mor Points 3581

À mon avis, vous devez désactiver l'état du parent en tant que android:duplicateParentState="false"

ajoutez ceci à votre Button

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X