De vuelta true
no es el problema.
Está fallando porque debe configurar el oyente en View
, no solo en Activity
.
editado de aclaración:
El valor de retorno del oyente no está destinado a ser entendido como una señal de que el evento o no se llama. Y de todos modos no podía, ya que la cláusula return
solo se llama después de se muestra su Toast
.
Es una señal para el sistema de que se necesita más acción (return false
) o que el método manejó el evento completamente y correctamente (return true
). Es por eso que el documentation dice con estas palabras:
devoluciones
True si el oyente tiene consumió caso, falso en caso contrario.
Hay una diferencia entre:
- Implementación del
View.OnKeyListener
interface
en su clase Activity
.
que permite a su Activity
para implementar la funcionalidad proporcionada por la interfaz en su clase, es decir, a declaran al mundo que su Activity
sabe cómo manejar ese tipo de evento.
Preste atención al hecho de que dije "declare".El hecho de que usted declaró que ya sabe cómo manejar una tarea no significa que la gente va a dar a esa tarea a usted, ni tampoco significa que se puede generar este tipo de tareas por sí mismo. Es una buena metáfora para la palabra clave implements
en mi opinión. Aquí el Activity
"pide una tarea".
Metáforas a un lado, técnicamente, el Activity
está definiendo una forma de manejar ese evento, pero no puede generar ese tipo de evento por sí mismo.
- establecer las
View
devoluciones de llamada a su aplicación Activity
Usando eso, un View
se une a un oyente (que pasa a ser su Activity
), prometiendo notificará cada vez que el evento ocurre.
Se "contrae" con su Activity
para recibir una entrada (el usuario presiona la tecla ENTER mientras el View
está en foco) y notifica al Activity
. Y puesto que el Activity
declarado anteriormente que es capaz de realizar que, AMBAS partes pueden ejecutar el contrato según lo acordado previamente (ver punto anterior).
Metáforas aparte de nuevo, técnicamente, aquí la Activity
es registrada por el View
para ser notificado después, cuando el gatillo View
el evento. El Activity
declara cómo, pero el View
sabe cuando .
Conclusión:
Esto es sólo una metáfora de interface
s (al menos en este caso). Puede parecer complicado, pero es muy claro cuando lo piensas como un acuerdo de dos partes. Si necesita una mejor técnica, la explicación, le sugiero leer sobre interface
s.
respuesta a la pregunta nueva comentario:
Hola David y todos los demás. ¿Realmente no puedo configurar un oyente para toda la actividad?
no de esa manera. Debe anular dispatchKeyEvent
. Un ejemplo:
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
Toast.makeText(UITestsActivity.this,
"YOU CLICKED ENTER KEY",
Toast.LENGTH_LONG).show();
return true;
}
return super.dispatchKeyEvent(e);
};
Ah, y por supuesto debe ser el enfocado ... de lo contrario, ¿cómo diferenciaríamos las Vistas en modo no táctil? Estoy seguro de que está prestando atención a eso , ¿derecho? ¿derecho? ;-) – davidcesarino
1 para la respuesta exacta –
Hola David y todos los demás. ¿Realmente no puedo configurar un oyente para toda la actividad? –