Cómo cambiar TextView texto en DataChange sin llamada atrás TextWatcher Listener

TextView textView=new TextView(context); textView.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { s.append("A"); } }); 

Si añadimos un TextWatcher a un TextView , y quiero anexar una letra a este TextView , cada vez que el usuario escribe una letra en él, pero esto mantiene volver a llamar al Listener TextWatcher , por lo que a StackOverFlow error , Agregar un texto sin volver a llamar al Listener TextWatcher ?

La documentación de afterTextChanged dice:

Este método se llama para notificarle que, en algún lugar dentro de s, el texto ha sido cambiado. Es legítimo realizar cambios adicionales en s desde esta devolución de llamada, pero tenga cuidado de no meterse en un bucle infinito, ya que cualquier cambio que realice hará que este método se vuelva a llamar de forma recursiva . (No se le dice dónde ocurrió el cambio porque otros métodos afterTextChanged () ya han hecho otros cambios e invalidado los desplazamientos.) Pero si necesita saber aquí, puede usar setSpan(Object, int, int, int) en onTextChanged(CharSequence, int, int, int) para marcar su lugar y luego buscar desde aquí, donde terminó el span.

Así pues, con cada s.append("A") usted call afterTextChanged() otra vez y así sucesivamente.

Es fácil:

 @Override public void afterTextChanged(Editable s) { editText.removeTextChangedListener(this); //Any modifications at this point will not be detected by TextWatcher, //so no more StackOverflowError s.append("A"); editText.addTextChangedListener(this); } 

Otra forma de evitar stackoverflow:

 TextView textView=new TextView(context); textView.addTextChangedListener(new TextWatcher() { boolean editing=false; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count,int after) { } @Override public void afterTextChanged(Editable s) { if (!editing){ editing=true; s.append("A"); editing=false; } } }); 
  • Detectar retroceso en TextWatcher
  • Cómo actualizar el mismo EditText con TextWatcher?
  • Validación de EditText con TextWatcher
  • Cómo aplicar el evento de cambio de texto en EditText
  • Reemplazar el carácter dentro de TextWatcher en android
  • Textwatcher no funciona en KitKat para el número como inputType
  • Espaciado de letras en EditText para Android
  • Permitir sólo 1 carácter en EditText y siempre sobrescribir cuando el usuario de entrada
  • Android Manejo de muchos campos de EditText en un ListView
  • ¿Cómo eliminar inmediatamente el espacio de un edittext si un usuario presiona el espacio?
  • Necesita ayuda para que un TextWatcher de Android funcione con datos de código de barras compuesto entrantes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.