Hier ist mein Code:
%Vor%Ich weiß nicht, was passiert, aber wenn ich die EINGABETASTE auf meiner Tastatur drücke (ich verwende den Android-Emulator), ist das Ereignis nicht aktiviert .
Was vermisse ich?
Die Rückgabe von true
ist nicht das Problem.
Sie scheitern, weil Sie den Listener auf View
und nicht nur auf Activity
setzen müssen.
zur Klärung bearbeitet:
Der Rückgabewert des Listeners soll nicht als Signal verstanden werden, dass das Ereignis aufgerufen wird oder nicht. Und das könnte es auch nicht, da die return
-Klausel nur genannt wird, nachdem Ihr Toast
angezeigt wird.
Es ist ein Signal für das System, dass weitere Aktionen erforderlich sind (return false
) oder dass die Methode das Ereignis vollständig und ordnungsgemäß behandelt hat (return true
). Das ist der Grund, warum Dokumentation sagt in diesen Worten:
Gibt
zurückWahr, wenn der Listener verbraucht hat das Ereignis, andernfalls false.
Es gibt einen Unterschied zwischen:
View.OnKeyListener
interface
in Ihrer Activity
-Klasse. Damit kann Ihre Activity
die von der Schnittstelle in Ihrer Klasse bereitgestellte Funktionalität implementieren, dh deklarieren Sie für die Welt, in der Ihre Activity
mit dieser Art von Ereignis umzugehen weiß.
Bitte beachten Sie, dass ich " deklariere " gesagt habe. Nur weil du erklärst, dass du weißt, wie man mit einer Aufgabe umgeht, bedeutet das nicht, dass die Leute dir diese Aufgabe geben, noch bedeutet es, dass du solche Aufgaben selbst erzeugen kannst . Es ist eine gute Metapher für das Keyword implements
meiner Meinung nach. Hier fragt der Activity
"nach einer Aufgabe".
Abgesehen von den Metaphern, definiert Activity
eine Möglichkeit, dieses Ereignis zu behandeln, aber es kann diese Art von Ereignis nicht selbst erzeugen.
View
Callbacks auf Ihre Activity
Implementierung Wenn Sie dies verwenden, bindet sich View
an einen Listener (der zufälligerweise Ihr Activity
ist) und verspricht, ihn zu benachrichtigen, sobald das Ereignis eintritt.
Sie "kontrahiert" mit Ihrem Activity
, um eine Eingabe zu erhalten (der Benutzer drückt die EINGABETASTE, während der View
im Fokus ist) und benachrichtigt den Activity
. Und da der Activity
zuvor erklärt hat, dass er das ausführen kann, können BEIDE Parteien den Vertrag wie zuvor vereinbart ausführen (siehe vorheriger Punkt).
Metaphern beiseite, technisch gesehen, hier wird Activity
von View
registriert, um später benachrichtigt zu werden, wenn View
das Ereignis auslöst. % Co_de% deklariert wie , aber Activity
weiß wenn .
Fazit:
Dies ist nur eine Metapher für View
s (zumindest in diesem Fall). Es mag kompliziert aussehen, aber es ist glasklar, wenn Sie es als Zwei-Parteien-Abkommen betrachten. Wenn Sie eine bessere, technische Erklärung benötigen, empfehle ich, über interface
s zu lesen.
Beantworten Sie die neue Frage zum Kommentar:
Hallo David und alle anderen. Kann ich wirklich keinen Zuhörer auf die gesamte Aktivität einstellen?
Nicht auf diese Weise. Sie müssen interface
überschreiben. Ein Beispiel:
Versuchen Sie Folgendes:
%Vor%BEARBEITEN: David ist RICHTIG !!
Die Rückkehr ist nicht das Problem.
Sie scheitern, weil Sie den Listener auf eine Ansicht und nicht nur auf die Aktivität einstellen müssen.
Tags und Links android enter keylistener