0
votes

Désactiver l'écouteur de clics pour le groupe de vues invisible

J'ai un groupe de vues qui est View.INVISIBLE dans certaines circonstances. Dans cet état, je veux que le groupe de vues ou ses vues enfants ne répondent PAS aux événements de clic.

Selon l'implémentation par défaut de View.INVISIBLE dans Android, les vues enfants à l'intérieur du groupe de vues sont toujours cliquables même lorsque la visibilité du groupe de vues est invisible. Je sais que je peux définir la visibilité sur View.GONE mais je ne veux pas que tout le groupe de vues soit supprimé.

J'ai essayé de définir setClickable sur true sur le groupe de vues, mais cela n'a pas fonctionné et les vues enfants répondent toujours aux clics. Je ne veux pas parcourir toutes les vues dans les groupes de vues et les désactiver individuellement car c'est quelque chose que je dois faire fréquemment.

Existe-t-il une meilleure solution pour empêcher toutes les vues enfants du groupe de vues de recevoir des événements de clic?


6 commentaires

Essayez de définir un écouteur tactile sans opération dans le groupe de vues.


les vues enfants peuvent toujours recevoir des événements de clic.


Vous devez retourner true pour consommer l'événement.


vous voulez dire myViewGroup.setOnTouchListener { _, _ -> true } ?


Oui. Veuillez consulter les réponses sur stackoverflow.com/questions/5418510


Cela ne fonctionne pas pour le groupe de vues. Les autres réponses dans ce lien pointent vers la désactivation des clics de manière récursive, ce que je ne veux pas cz j'ai beaucoup de vues.


3 Réponses :


0
votes

Avez-vous essayé setEnabled(false) ?

Si cela ne fonctionne pas, vous pouvez désactiver tous les enfants de la vue comme suit:

LinearLayout layout = (LinearLayout) findViewById(R.id.my_layout);
for (int i = 0; i < layout.getChildCount(); i++) {
    View child = layout.getChildAt(i);
    child.setEnabled(false);
}


2 commentaires

Je viens de voir que vous ne vouliez pas parcourir toutes les vues, donc c'est mon problème.


Ah d'accord. Aucun problème. setEnabled(false) ne fonctionne cependant pas.



0
votes

Essayez une ancienne méthode.

viewgroup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(viewgroup.getVisibility() == View.INVISIBLE)
                return;
        }
    });


0 commentaires

0
votes

Peut-être que vous pouvez essayer 'setOnClickListener'.

viewgroup.setOnTouchListener(null)

Et vous souhaitez recevoir l'événement de clic du groupe de vues.

viewgroup.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true; // return true can intercept click event go down
        }
    });


0 commentaires