in android activity, I first restore the text in EditText and add a TextWatcher to it.
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());
}
});
}
but when I run the action, the afterTextChanged method is called, even if Watcher itself is added after setting the text. so the log output looks something like this:
onCreate: LifecycleMain
Set text xyz
// screen rotation
onCreate: LifecycleMain
Set text xyz
afterTextChanged: xyz 2
the counter in TextWatcher shows that the caller that is called is the one that was added AFTER the text was set to EditText. any ideas why this is happening and how can i prevent this?
source
share