Android: TextWatcher

Si has desarrollado muchas webs estarás acostumbrado a utilizar eventos relativos al comportamiento del usuario con los campos del formulario, ya sea el evento onclick, el evento onchange, etc.

En Android el evento onchange no existe, puedes crear un campo tipo TextView o un campo tipo EditText que entre sus propiedades no lo encontrarás. Si que existe el evento click para ejecutar un método, pero no el evento onchange.

¿Por qué no existe? Por que para detectar esos cambios existe el objeto TextWatcher. Una vez enlazas un campo de texto con este objeto tienes disponibles tres eventos que son lanzados cuando se cumplen sus circunstancias:

  • afterTextChanged: Se lanza después de que haya cambiado el texto de un campo, es decir, conforme escribimos o borramos texto.
  • beforeTextChanged: Se lanza cuando se recibe el nuevo carácter insertado pero aún no se ha mostrado en pantalla.
  • onTextChanged: Se lanza cuando se ha terminado de cambiar el texto.
Os pongo un ejemplo con java:

TextView textView = findbyid(R.id.textView);

textView.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        // TODO Auto-generated method stub
    }

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

        // TODO Auto-generated method stub
    }

    @Override
    public void afterTextChanged(Editable s) {

        // TODO Auto-generated method stub
    }
});

Su uso en Kotlin es muy similar:

edit_text.addTextChangedListener(object: TextWatcher{
        override fun afterTextChanged(p0: Editable?) {
            // Do something after text changed
        }

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            // Do something before text changed on EditText
        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            // Do something on text changed in EditText
            // Display the EditText change text on TextView real time
            text_view.text = edit_text.text
        }
    })

Espero que os sea de utilidad ^_^.

Comentarios