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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top