Écouter de la touche ENTRÉE dans Android
Voici mon code:
public class CaptureENTER extends Activity implements OnKeyListener{
/* on create and other stuff in here*/
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(LiVoiceActivity.this,
"YOU CLICKED ENTER KEY",
Toast.LENGTH_LONG).show();
}
return false;
}
Je ne sais pas ce qui se passe, mais quand j'appuie sur la touche ENTRÉE de mon clavier (je suis à l'aide de l'émulateur Android), l'événement n'est pas activé.
Ce qui me manque?
OriginalL'auteur Carlos Pereira | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
Retour
true
n'est pas la question.Vous êtes échouent parce que vous devez définir l'auditeur à un
View
, et pas seulement lesActivity
.édité pour plus de précisions:
La valeur de retour de l'auditeur n'est pas destiné à être comprise comme un signal que l'événement sera ou ne sera pas appelé. Et il ne pouvait de toute façon, depuis le
return
clause est appelée uniquement après votreToast
est indiqué.C'est un signal pour le système que d'autres mesures sont nécessaires (retour
false
) ou que la méthode géré l'événement entièrement et correctement (retourtrue
). C'est pourquoi la la documentation dit dans ces mots:Il y a une différence entre:
View.OnKeyListener
interface
dans votreActivity
classe.Qui permet à votre
Activity
pour mettre en œuvre les fonctionnalités offertes par l'interface de votre classe, c'est à dire, à déclarer au monde que votreActivity
sait comment gérer ce genre d'événement.S'il vous plaît prêter attention au fait que j'ai dit "déclarer". Juste parce que vous avez déclaré que vous savez comment traiter une tâche ne signifie pas que les gens vont donner cette tâche à vous, cela ne signifie pas que vous pouvez générer de telles tâches par vous-même. C'est une bonne métaphore pour la
implements
mot-clé, à mon avis. Ici leActivity
"demande pour une tâche".Métaphores de côté, techniquement, le
Activity
est de définir une façon de gérer cet événement, mais il ne peut pas générer ce genre d'événement en lui-même.View
des rappels à votreActivity
mise en œuvreL'aide de qui, un
View
se lie à un auditeur (qui se trouve être votreActivity
), promettant de le notifier à chaque fois que l'événement se produit."Contrats" avec votre
Activity
pour recevoir une entrée (l'utilisateur appuie sur la touche ENTRÉE lorsque leView
est dans le focus) et informe leActivity
. Et depuis leActivity
précédemment déclaré qu'il est capable d'effectuer, les DEUX parties peuvent exécuter le contrat comme convenu précédemment (voir point précédent).Métaphores de côté encore une fois, techniquement, ici le
Activity
est enregistré par leView
être informé plus tard, lorsque leView
déclencher l'événement. LeActivity
déclare comment, mais leView
sait quand.Conclusion:
C'est juste une métaphore pour
interface
s (au moins dans ce cas). Il peut sembler compliqué, mais c'est limpide quand vous pensez à elle comme un accord entre les parties. Si vous avez besoin d'un mieux, technique, explication, je suggère la lecture surinterface
s.De répondre à la nouvelle question:
Pas de cette façon. Vous avez besoin de remplacer
dispatchKeyEvent
. Un exemple:+1 pour la Réponse exacte
Bonjour David et tous les autres. Vraiment je ne peux pas définir un écouteur pour l'ensemble de l'Activité?
J'ai mis à jour ma réponse avec la réponse à cette nouvelle question. En bref: vous pouvez, mais pas dans le sens que vous essayez.
OriginalL'auteur davidcesarino
Essayez ceci:
EDIT:
David est CORRECT!!
De retourner true n'est pas la question.
Vous êtes échouent parce que vous devez définir l'auditeur à Vue, non seulement l'Activité.
OriginalL'auteur Yaqub Ahmad