2012-10-02 43 views
5

Estaba haciendo una aplicación para actuar como un teclado remoto donde el usuario hará clic en un texto de edición y escribirá y los alfabetos correspondientes se escribirán en la computadora.Prevenir la 'tecla Enter' para activar TextWatcher

He detectado varios alfabetos y números con la ayuda de TextWatcher y los envié a mi servidor con éxito.

El problema se produce cuando el usuario presiona la tecla Intro. Esto también activa TextWatcher. y dado que estoy enviando los últimos cambios introducidos, aparece el error en el lado del servidor.

Como solución lo que hice es decir, establecer una onkeylistener así que detectará la tecla enter y llevar a cabo la acción y CONSUMO, pero por desgracia, en ese caso también el primer textwatcher se desencadena y luego onkeylistener.

Aquí está el código de mi onkeylistener

keyboard.setOnKeyListener(new OnKeyListener() {     
    public boolean onKey(View v, int keyCode, KeyEvent event) {     
    if(keyCode == KeyEvent.KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_UP){ 
        out.println("enter"); 
       return true; 
       } 
     return false; 
      } 
    }); 

Código de TextWatcher:

private TextWatcher watcher = new TextWatcher() { 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(count>0){ 
     out.println(":"+s.subSequence(start, start+count).toString()); 
     } 
    } 
      . 
      . 
      . 

El problema es que al presionar la tecla enter se dispara OnTextChanged de TextWatcher, así como onkeylistener. mientras que solo quiero que el oyente clave dispare. Quiero disparar Textwatcher solo en el caso de los alfabetos, números, algunos símbolos, etc.

También si puede sugerir un enfoque diferente para detectar y enviar caracteres (suave) será genial.

+0

También traté de poner si cond. dentro de TextWatcher para verificar si el cambio más reciente tiene un carácter no alfanumérico. si lo hace, no se apagará .println(). Pero eso tampoco funciona. aún detecta la tecla enter e ingresa if cond y ejecuta out.println(). – PrateekArora

+0

Ok, creo que lo resolví. en Textwatcher agregue esta instrucción if: if (s.toString(). substring (inicio) .contains ("\ n")) de esa manera si la última clave ingresada fue 'enter', entonces entraría en esto y luego usted puede realizar lo que quieras – PrateekArora

Respuesta

1

Ok, creo que lo he resuelto. en Textwatcher agregar esta sentencia if:

if(s.toString().substring(start).contains("\n")) 

de esa manera si se entró última tecla 'enter', entonces sería entrar en esto es y entonces u puede realizar lo quieres.

Cuestiones relacionadas