Domanda

Ho 3 elementi EditText e voglio saltare da un campo all'altro se ci sono 4 caratteri nell'input.

Io uso un textWatcher per questo:

getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void afterTextChanged(Editable input) {
        if(input.length() == 4){
            getEditView(R.id.edit_code2).requestFocus();
        }
    }
});
.

L'inputtype per l'editext è "Textcapcharacter"

Quando si esegue un longpress su una chiave per ottenere un numero, come la holding r per ottenere un 4, la maggior parte dei dispositivi non aggiungerà la lettera, fino a quando l'utente non si arresta con il pulsante, e si accende Aftertextchanged dopo la selezione della lettera 4.Su una tastiera HTC (in questo caso il desiderio HTC su 2.3.5) non è il caso.Anche se l'utente sta ancora tenendo premuto il pulsante, il R viene aggiunto all'editText e Aftertextchanged viene licenziato e il codice fa il suo lavoro e mette la messa a fuoco sul campo successivo.

Come può essere prevenuto questo comportamento indesiderato?Guardare OnKeyDown / UP non aiuterà, perché non registra le normali tasti.

È stato utile?

Soluzione

Purtroppo è un bug nella tastiera HTC senza alcun modo di fissarlo.Essendo un evento nell'IME, è impossibile intercettare il tocco o gli eventi chiave, quindi probabilmente starai meglio a far saltare l'utente al prossimo ingresso invece di farlo per loro.

Se è così importante per te, puoi implementare il tuo tipo di tastiera lì, con solo i tasti di cui hai bisogno.

Altri suggerimenti

       getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
  if(input.length() >3){
        getEditView(R.id.edit_code2).requestFocus();
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void afterTextChanged(Editable input) {

    }
}
.

});

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