J'ai un objet où le texte passe et affiche des messages d'état. Lorsque les messages changent, je veux que l'événement de clic de l'objet change pour vous amener à l'activité à laquelle le message se rapporte.
Donc, j'en ai un TextView mTitleView
et j'assigne l'événement comme ça.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
Comment supprimer cet événement de clic? Il y a certains messages d'état qui n'ont pas de zone actionnable, je voudrais donc désactiver l'événement de clic. J'aimerais également pouvoir parcourir ces événements de clic et les éliminer correctement, mais je ne suis pas sûr de la meilleure pratique.
a better design
vous sous-entendez des implications en termes de performances ou que vous dites simplement que c'est un peu désagréable?Notez que si une vue n'est pas cliquable (une TextView par exemple), la définition
setOnClickListener(null)
signifie que la vue est cliquable. À utilisermMyView.setClickable(false)
si vous ne souhaitez pas que votre vue soit cliquable. Par exemple, si vous utilisez un dessin xml pour l'arrière-plan, qui affiche différentes couleurs pour différents états, si votre vue est toujours cliquable, les utilisateurs peuvent cliquer dessus et la couleur d'arrière-plan différente s'affichera, ce qui peut sembler étrange.la source
Peut
setOnClickListener(null)
- être ?la source
Le réglage
setOnClickListener(null)
est une bonne idée pour supprimer l'écouteur de clics lors de l'exécution.Et aussi quelqu'un a commenté qu'appeler
View.hasOnClickListeners()
après cela reviendratrue
, NON mon ami.Voici l'implémentation des
hasOnClickListeners()
prises deandroid.view.View
classeDieu merci. Il vérifie
null
.Donc, tout est en sécurité. Prendre plaisir :-)
la source
Les réponses ci-dessus semblent instables et peu fiables. J'ai essayé de le faire avec une ImageView dans une mise en page relative simple et cela n'a pas désactivé l'événement onClick.
Ce qui a fonctionné pour moi, c'est d'utiliser setEnabled.
Vous pouvez ensuite vérifier si la vue est activée avec:
Une autre option consiste à utiliser setContentDescription (String string) et String getContentDescription () pour déterminer l'état d'une vue.
la source
En résumé, cela a fonctionné pour moi
la source
la source
Réinitialiser simplement l'élément comme ci-dessous ferait l'affaire. Il supprimerait onclick, onlonglick, onitemclick, onitemlongclick basé sur l'élément
mTitleView = findViewById (R.id.mTitleView);
la source