Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Quitar TextChangedListener y volver a agregarlo

Así que he estado tratando de implementar el TextWatcher para Android y se encontró con algunos problemas con el TextChangedListener que se llama varias veces o entrar en un bucle infinito como quiero convertir el texto en el widget EditText en una cadena de formato de moneda.

Lo que hice para evitar esto fue crear mi propio TextWatcher personalizado y luego en el evento afterTextChanged hizo algo como lo siguiente

public class CurrencyTextWatcher implements TextWatcher { private EditText et; public CurrencyTextWatcher(EditText editText) { et = editText; } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void afterTextChanged(Editable s) { et.removeTextChangedListener(this); et.setText(myCurrencyString); et.addTextChangedListener(this); } } 

Así que mi pregunta es, ¿hay una mejor manera de hacer esto? Quiero tener el Widget EditText para mantener donde van las ediciones y la cadena formate resultante.

También hay realmente cualquier otro problema que viene sobre la eliminación y, a continuación, añadir un TextChangedListener como este?

Gracias por adelantado

  • Android stackoverflow utilizando while loop
  • Eventos de TextWatcher se están llamando dos veces
  • Cómo dar formato a la entrada de EditText al escribir con separadores de miles (,) en Android?
  • TextWatcher llamado incluso si se establece el texto antes de agregar el observador
  • Clickable compuesto drawable en EditText que hace estallar una vista en tecleo
  • No se puede insertar en Editable
  • Validación de EditText con TextWatcher
  • Android Manejo de muchos campos de EditText en un ListView
  • 2 Solutions collect form web for “Quitar TextChangedListener y volver a agregarlo”

    Cada vez que se actualice (por ejemplo, llamando al texto establecido) su editText se llamará el afterTextChanged, así que creo que debe abstenerse de llamar a setText cada vez que esté en afterTextChanged y sólo lo llaman cuando algo está cambiando realmente.

    Algo así

     if ( !myCurrencyString.equals(et.getText())) { et.setText(myCurrencyString); } 

    ¿Qué hay de seguir.

     private void resetAddTagField() { if (edtView != null && textWatcherListener != null) { edtView.removeTextChangedListener(textWatcherListener); edtView.setText(DEFAULT_TEXT); edtView.addTextChangedListener(textWatcherListener); } } 

    Lo que aprendo: No subestime el poder de TextWatcher : D: D

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.