2012-08-30 18 views
6

Sto usando TextWatcher e non sono in grado di rilevare tasto di backspace nell'evento TextWatcher.afterTextChange. Voglio anche cancellare textView in alcune condizioni nell'evento textWatcher.Rileva backspace in TextWatcher

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    // I want to detect backspace key here 
} 
+0

Codice per il tuo 'TextWatcher' per favore? – Swayam

+0

public void afterTextChanged (modificabile s) { \t \t \t \t \t \t \t // TODO metodo generato automaticamente stub \t \t \t \t \t \t \t // Voglio rilevare tasto backspace qui \t \t \t \t \t \t \t \t \t \t \t \t} –

risposta

9

A KeyListener in grado di soddisfare entrambe le condizioni.

mEditText.setOnKeyListener(new OnKeyListener() {     
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(keyCode == KeyEvent.KEYCODE_DEL){ 
      //on backspace 
      } 
    return false   
     } 
}); 

Allo stesso modo all'interno del onKey(), si può mettere più istruzioni di controllo per verificare la condizione in cui si vorrebbe cancellare il textView.

EDIT: Come @RankoR stato così gentile da sottolineare, si prega di tenere a mente che onKeyListener() funziona solo per la tastiera hardware e non le tastiere molli.

+2

OnKeyListener funziona solo con tastiere HW. – arts777

+0

@RankoR: Sì, sono consapevole del fatto che onKeyListener non funziona per la tastiera virtuale. Ma se ripassi la domanda ancora una volta, vedresti che la domanda non è specifica per la tastiera virtuale. Ma, sì ... poi di nuovo, hai fatto un punto valido. Modificherà la mia risposta per includere il tuo punto. – Swayam

+0

@RankoR: modifica la risposta. Forse puoi riconsiderare il tuo * downvote * ora. : D – Swayam

10

Per rilevare un backspace in TextWatcher, è possibile controllare il conteggio variabile che viene passato alla funzione onTextChange (conteggio sarà 0 se è stato inserito un backspace), in questo modo:

@Override 
public void onTextChanged(CharSequence cs, int start, int before, int count) { 

    if (react) { 
    if (count == 0) { 
     //a backspace was entered 
    } 

    //clear edittext 
    if(/*condition*/) { 
     react = false; 
     setText(""); 
     react = true; 
    } 
    } 
} 

Il reagiscono boolean è necessario per la funzione setText() altrimenti diventa ricorsivo. Spero che questo ti aiuti!

+6

Non restituisce una chiamata quando non ci sarà alcun cambio di testo quando s.length() = 0, qualunque tasto venga premuto non ci sarà alcuna richiamata .. – DJphy

+1

Non è stata ricevuta alcuna richiamata in 'onTextChanged' quando si preme il pulsante Indietro e non c'è alcun carattere in 'EditText'. Non sei sicuro del motivo per cui questa risposta esce anche qui! – sud007

+0

se digitato uno è lo spazio bianco, quindi conta anche == 0 –