Android: getText e setText non funzionano su EditText con OnKeyListener
-
27-10-2019 - |
Domanda
Sto lavorando su un'applicazione Android e ho una vista con 3 editText. Quello che sto cercando di ottenere è che su un tasto numerico che viene premuto nell'ultimo dovrebbe chiamare l'evento Okkey per quell'attività. Il problema è che per EditText su cui ho impostato OnKeyListener, né i metodi GetText né SetText funzionano. Permettimi di spiegare:
Supponiamo di inizializzare una stringa vuota
String string1 = "";
Nel mio metodo OnCreate, ho impostato l'onkeylistener su uno dei modifiche
@Override
public void onCreate(Bundle savedInstanceState) {
...
findViewById(R.id.EditText3).setOnKeyListener(this);
...
}
Ora, se scrivo il seguente codice nel metodo Okkey prevalente
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
string1 += ((EditText) findViewById(R.id.EditText1)).getText();
string1 += ((EditText) findViewById(R.id.EditText2)).getText();
string1 += ((EditText) findViewById(R.id.EditText3)).getText();
((EditText) findViewById(R.id.EditText1)).setText("");
((EditText) findViewById(R.id.EditText2)).setText("");
((EditText) findViewById(R.id.EditText3)).setText("");
}
return false;
}
Solo EDITText1 e EditText2 vengono cancellati e il testo in EDITText3 non viene concaterato in String1. Se sostituisco la condizione dell'istruzione IF con
if (keyCode == KeyEvent.KEYCODE_ENTER)
Quindi premendo il tasto ENTER (Imposta come successivo), funziona come previsto. Ho provato ad aggiungere il setText ("") anche nel metodo OnResume dell'attività, ma senza alcuna differenza nel risultato. Apprezzo il tempo che hai impiegato per leggere la mia domanda!
A cura di: aggiunto "return false;" Alla fine del metodo Onkey, l'ho avuto nel mio lavoro, ma mi mancava metterlo in questa domanda, mi è stato ricordato dalla risposta di Chris.
Soluzione
Oltre alla risposta di Chris, dovrebbe essere aggiunto un controllo per assicurarsi che event.getAction () sia uguale a keyevent.action_up; Onkey viene chiamato due volte, e se getAction () è Action_Down (per la prima volta il metodo viene chiamato), il personaggio non sarà ancora aggiunto al charsequence restituito da gettext ().
Altri suggerimenti
Quando l'impostazione di OnKeyListener il tuo editText3, sostituite cosa succede quando si colpisce una chiave con quello. Provare return false;
Alla fine dell'onkey. Ciò dovrebbe passare il valore alla posizione corretta.
http://developer.android.com/reference/android/view/view.onkeylistener.html
ritorna
Vero se l'ascoltatore ha consumato l'evento, falso altrimenti.