2012-08-30 14 views
6

estoy usando TextWatcher y yo soy incapaz de detectar Retroceso clave en TextWatcher.afterTextChange evento. También quiero borrar textView en alguna condición en el evento textWatcher.retroceso en TextWatcher

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

Código para su 'TextWatcher' por favor? – Swayam

+0

public void afterTextChanged (editable s) { \t \t \t \t \t \t \t // método generada automáticamente TODO stub \t \t \t \t \t \t \t // Quiero detectar tecla de retroceso aquí \t \t \t \t \t \t \t \t \t \t \t \t} –

Respuesta

9

A KeyListener puede cumplir con ambas condiciones.

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

Del mismo modo dentro de la onKey(), puede poner múltiples sentencias de verificación para comprobar la condición, cuando se quiere borrar la textView.

EDIT: Como@RankoR tuvo la amabilidad de señalar, por favor tener en cuenta que onKeyListener() sólo funciona para los teclados de hardware y no los teclados virtuales.

+2

OnKeyListener funciona solo para teclados HW. – arts777

+0

@RankoR: Sí, soy consciente del hecho de que onKeyListener no funciona para el teclado virtual. Pero si volvió a hacer la pregunta, verá que la pregunta no es específica para el teclado suave. Pero, sí ... y luego, has hecho un punto bastante válido. Editaré mi respuesta para incluir tu punto. – Swayam

+0

@RankoR: Editado la respuesta. Tal vez puedas reconsiderar tu * downvote * ahora. : D – Swayam

10

para detectar un retroceso en TextWatcher, se puede comprobar la variable de recuento que se pasa a la función onTextChange (cuenta será 0 si se ha introducido un retroceso), así:

@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; 
    } 
    } 
} 

El reaccionan boolean es necesario para la función setText(); de lo contrario, se vuelve recursivo. ¡Espero que esto ayude!

+6

No devuelve una llamada cuando no habrá cambio de texto cuando s.length() = 0, cualquiera que sea la tecla presionada, no habrá devolución de llamada .. – DJphy

+1

No hay devolución de llamada recibida en 'onTextChanged' cuando se presiona el botón Atrás y no hay ningún carácter en 'EditText'. ¡No estoy seguro de por qué esta respuesta sale incluso aquí! – sud007

+0

si está tipeado, uno es un espacio en blanco y también cuenta == 0 –