Restituire true
non è il problema.
Si sta fallendo perché è necessario impostare l'ascoltatore su View
, non solo su Activity
.
modificati chiarimenti:
Il valore restituito l'ascoltatore non è destinato a essere inteso come un segnale che l'evento o non verrà chiamato. E non poteva comunque, dal momento che la clausola return
viene chiamata solo dopo viene mostrato il tuo Toast
.
È un segnale al sistema che è necessario eseguire ulteriori azioni (restituire false
) o che il metodo gestisca l'evento completamente e correttamente (restituire true
). Ecco perché il documentation dice con queste parole:
Returns
True se l'ascoltatore ha consumato l'evento, altrimenti false.
C'è una differenza tra:
- Attuazione del
View.OnKeyListener
interface
nella classe Activity
.
che consente al Activity
per implementare le funzionalità fornite dall'interfaccia nella tua classe, vale a dire, a dichiarare al mondo che il vostro Activity
sa come gestire questo tipo di evento.
Si prega di prestare attenzione al fatto che ho detto "dichiarare".Solo perché hai dichiarato di sapere come gestire un'attività non significa che le persone ti daranno quell'attività, né che tu possa generare tali compiti da solo. Secondo me è una buona metafora per la parola chiave implements
. Qui il Activity
"chiede un compito".
Metafore a parte, tecnicamente, il Activity
sta definendo un modo per gestire quell'evento, ma non può generare quel tipo di evento da solo.
- impostando i
View
callback al vostro Activity
implementazione
Utilizzando che, una View
si lega ad un ascoltatore (che risulta essere il vostro Activity
), promettendo di notifica ogni volta che l'evento si verifica.
Si "contrae" con il Activity
per ricevere un input (l'utente preme il tasto INVIO mentre è attivo lo View
) e notifica lo Activity
. E poiché lo Activity
ha dichiarato in precedenza che è in grado di eseguirlo, ENTRAMBI le parti possono eseguire il contratto come concordato in precedenza (vedere l'articolo precedente).
Fuor di metafora di nuovo, tecnicamente, qui il Activity
viene registrata dal View
per essere notificato più tardi, quando il grilletto View
l'evento. Il Activity
dichiara come, ma lo conosce quando.
Conclusione:
Questa è solo una metafora per interface
s (almeno in questo caso). Può sembrare complicato, ma è chiarissimo quando si pensa a un accordo tra due parti. Se hai bisogno di una spiegazione migliore, tecnica, ti suggerisco di leggere lo interface
s.
Risposta al commento domanda:
Ciao Davide e tutti gli altri. Davvero non posso impostare un ascoltatore per l'intera attività?
Non in questo modo. È necessario eseguire l'override di dispatchKeyEvent
. Un esempio:
@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, e ovviamente deve essere quello focalizzato ... altrimenti come dovremmo differenziare comunque le Visualizzazioni in modalità non-touch ... Sono sicuro che prestate attenzione a questo , destra? destra? ;-) – davidcesarino
+1 per la risposta esatta –
Ciao David e tutti gli altri. Davvero non posso impostare un ascoltatore per l'intera attività? –