TextWatcher llamado incluso si se establece el texto antes de agregar el observador
En una actividad de android, primero recupero el texto en un EditText y agrego entonces un TextWatcher a él.
private static int WC = 0; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("TextWatcherTest", "onCreate:\t" +CLASS_NAME); setContentView(R.layout.main); EditText et = (EditText)findViewById(R.id.editText); Log.e("TextWatcherTest", "Set text xyz"); et.setText("xyz"); et.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) { Log.e("TextWatcherTest", "afterTextChanged:\t" +s.toString()); } }); }
Pero cuando ejecuto la actividad, el método afterTextChanged se llama aunque el Watcher se agregue después de establecer el texto. Así que la salida del registro es algo como
- Detectar retroceso en TextWatcher
- Cómo limitar el texto en números sólo de 0-59 en Editar texto en Android?
- Agregar automáticamente guión en el número de teléfono en Android
- Clickable compuesto drawable en EditText que hace estallar una vista en tecleo
- Los caracteres de cuenta con TextWatcher fallan en HTC longpress
OnCreate: LifecycleMain Establecer texto xyz // rotacion de pantalla OnCreate: LifecycleMain Establecer texto xyz AfterTextChanged: xyz 2
El contador en el TextWatcher muestra que el observador que se llama es el que se agregó después de que el texto se estableció en el EditText. Cualquier idea de por qué sucede y cómo puedo evitar eso?
- TextWatcher para más de un EditText
- Espaciado de letras en EditText para Android
- Textwatcher no funciona en KitKat para el número como inputType
- Android stackoverflow utilizando while loop
- ¿Cómo elimino texto en EditText con TextWatcher? Cada vez que detecta una cadena y formatea su
- Cómo manejar la tecla Intro usando TextWatcher en Android
- Cómo dar formato a la entrada de EditText al escribir con separadores de miles (,) en Android?
- TextWatcher.afterTextChanged tiene cadena incorrecta después de retroceso
La solución es mover su addTextChangedListener al método onPostCreate. Todo será resuelto.
Esto definitivamente debe estar sucediendo. Está configurando el texto cuando savedinstanceState no es nulo (significa que los estados de los objetos anteriores se guardan).
Creo que esto sucede porque usted agregó el TextWatcher a su EditText en el método onCreate, y la próxima vez que onCreate se llama (por ejemplo, después de un cambio de configuración), entonces encuentra que TextWatcher ya ha sido añadido a la EditText.
Si desea verificar esta situación, ponga esto antes de su condición:
if(savedInstanceState == null){ Log.e("savedInstance state is null", "no text"); et.setText("No text"); }
En este caso, si llama a setText en su EditText, entonces no se llamará afterTextChanged (Editable s).
- Android, ¿Cómo puedo saber si la animación ha terminado?
- Utilizar FragmentManager para acceder a métodos de fragmentos de una actividad