OnTouch fonctionne, mais OnClickListener ne fonctionne pas?
J'ai créé un widget/contrôle que je peux réutiliser que j'ai créé en étendant RelativeLayout
. Puis, dans un de mes Activités, j'ai créé un tas de ces widgets dans une boucle. Cependant, j'ai rencontré un problème lorsque j'ai voulu avoir chaque widget répondre à un clic.
J'ai trouvé que la mise OnTouchListener
travaux:
this.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1) {
//Triggers debug message
}
});
mais OnClickListener
n'est pas le cas:
this.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//Doesn't trigger debug message
}
});
Pourquoi est-ce?
source d'informationauteur tpow
Vous devez vous connecter pour publier un commentaire.
Voici quelques points à vérifier pour vous assurer que vos points de vue sont cliquables:
Selon le comportement exact que vous espérez obtenir, vous aurez besoin de définir un ou plusieurs de ces. Puisque vous êtes l'obtention de onTouch événements, ma conjecture est que vous devez setClickable. Mais il faudrait que je vois la création de la vue de code pour être sûr.
Vous devriez assurez-vous que le TouchListener n'est pas "consommer" l'événement tactile. Si vous retournez vrai du
onTouch()
méthode, Android va considérer qu'il a consommé et ne pas le transmettre à d'autres différents gestionnaires (que je suis en supposant que comprendra le ClickListener).Que vous devez faire:
Sont à vous de retourner le booléen onTouch valeur correctement?
De la documentation:
MODIFIER
Trouvé la solution dans ce question et juste essayé moi-même.
Vous avez besoin pour utiliser cette
return super.onTouchEvent(event);
dans votre onTouchEvent code. Après l'ajout de cette la OnClickListener commencé à travailler.Pour effectuer ce retour de faux dans votre
onTouch()
comme ceci:Vous pouvez mettre en Œuvre un onClickListener via onTouchListener:
Si vous remplacez la onMotionEvent() méthode pour quelque raison et vous avez besoin de retourner vrai/faux dans ce cas, vous pouvez déclencher manuellement l'OnClickListener() rappel par l'appel de cette.performClick() à l'intérieur de l'substituée onMotionEvent() juste avant de retourner true/false.
Quand vous en avez besoin à la fois onClick et onTouch événements sur le même point de vue, l'utilisation d'un GestureDetector.