2010-09-18 9 views
15

Soy nuevo en el desarrollo de Android y parece que no puedo encontrar una buena guía sobre cómo usar un oyente onKeyUp.Desarrollo de Android: cómo usar onKeyUp?

En mi aplicación, tengo un gran EditText, cuando alguien presiona y suelta una tecla en ese EditText Quiero llamar a una función que realizará expresiones regulares en ese EditText.

No sé cómo usaría el onKeyUp. ¿Podría alguien por favor mostrarme cómo?

Respuesta

22

La forma correcta es usar la clase TextWatcher.

EditText tv_filter = (EditText) findViewById(R.id.filter); 

TextWatcher fieldValidatorTextWatcher = new TextWatcher() { 
     @Override 
     public void afterTextChanged(Editable s) { 
     } 

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

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (filterLongEnough()) { 
       populateList(); 
      } 
     } 

     private boolean filterLongEnough() { 
      return tv_filter.getText().toString().trim().length() > 2; 
     } 
    }; 
    tv_filter.addTextChangedListener(fieldValidatorTextWatcher); 
+0

Gracias, ya había encontrado la clase TextWatcher hace siglos. Debe haberse olvidado de marcar una respuesta correcta, ¡perdón por perder el tiempo! – AlexPriceAP

0

Sólo para un EditText. su logro por setOnClickListener() sí mismo. No es necesario para el onKeyUp(). Porque eso se realizará mediante un clic/evento táctil. ¿derecho? Solo haz esto.

edittext_object.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    //do what you need 
    } 
} 
+0

probablemente quería hacer algo durante onkeyup, –

0

Escribir esta fuera de mi cabeza, pero debe ser una de las siguientes líneas:

text.setKeyListener(new KeyListener() { 
    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 


     if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent 


     return super.onKeyUp(keyCode, event); 
    } 
}); 
10

CORRECCIÓN:

Durante un tiempo, he usado un genérico onKeyListener. Pronto descubrí que mi código se llamaba dos veces. Una vez con la tecla presionada y una vez con la tecla arriba. Ahora uso el siguiente oyente y solo llamo al código una vez. "if (event.getAction() == KeyEvent.ACTION_UP)" es la clave.

OnKeyListener keyListener = new OnKeyListener() { 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_UP) { 
      //do something here 
     } 
     return false; 
    } 
}; 

me encontré con que onKeyUp() es llamado automáticamente para cada control en la actividad. Si esto es lo que quiere, añadirlo a la actividad al igual que se agrega el Ejemplo onCreate()

:

public boolean onKeyUp(int keyCode, KeyEvent event) { 
    //do something here 
    return false; 
}; 

Sé que esto es una cuestión de edad, pero tal vez esto ayude a otros con el mismo problema.

1

Usted puede considerar usando el siguiente código:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     ... 
     case KeyEvent.KEYCODE_J: 
      if (event.isShiftPressed()) { 
       fireLaser(); 
      } else { 
       fireMachineGun(); 
      } 
      return true; 
     case KeyEvent.KEYCODE_K: 
      if (event.isShiftPressed()) { 
       fireSeekingMissle(); 
      } else { 
       fireMissile(); 
      } 
      return true; 
     default: 
      return super.onKeyUp(keyCode, event); 
    } } 

Aquí Al final hemos llamado el método super.onkeyUp. Que maneja el evento cuando el usuario no presiona la tecla válida.

Para obtener más información, puede considerar el siguiente link.

Cuestiones relacionadas