Hören Sie die ENTER-Taste in Android

7

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?

    
Carlos Pereira 28.06.2012, 03:34
quelle

2 Antworten

16

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ück      

Wahr, wenn der Listener verbraucht hat das Ereignis, andernfalls false.

Es gibt einen Unterschied zwischen:

  • Implementieren der 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.

  • Setzen Sie die 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:

%Vor%     
davidcesarino 28.06.2012 03:55
quelle
10

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.

    
Yaqub Ahmad 28.06.2012 03:45
quelle

Tags und Links