en una actividad de android, primero recupero el texto en un EditText y agrego luego un TextWatcher a él.Llamada a TextWatcher incluso si el texto se establece antes de agregar el observador
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 corro la actividad, el método se llama afterTextChanged incluso si el propio vigilante se añade después de ajustar el texto. por lo que la salida del registro es algo así como
onCreate: LifecycleMain Set text xyz // screen rotation onCreate: LifecycleMain Set text xyz afterTextChanged: xyz 2
el mostrador de la TextWatcher muestra que el observador que se llama es la que se ha añadido a continuación del texto se encuentra en el EditarTexto. ¿Alguna idea de por qué sucede eso y cómo puedo evitar eso?
realmente no. de hecho, es cierto que funciona la primera vez que se crea la actividad, pero EditText es cada vez una nueva instancia sin ningún vigilante conectado. Simplifiqué el código y agregué un contador al observador: – SimonSays
¿Has definido editText et como estático? si es así, esta podría ser la razón. y como mencionas que funciona f9 por primera vez, entonces el problema es definitivamente que la nueva instancia de ediText no se está creando cada vez que –
lo siento, actualizó mi comentario antes de que lo terminase. Actualicé el código de arriba ahora. Lo simplifiqué y agregué un contador para TextWatcher. lo que puede ver es que el problema no aparece la primera vez que se crea la actividad, sino la segunda vez. PERO, se llama a la segunda instancia de TextWatcher, no a la primera. también EditText siempre es una nueva instancia sin ningún vigilante conectado. y no; EditText no está definido estático. – SimonSays