TextWatcher is called even if the text is set before adding an observer

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?

+5
source share
2

, addTextChangedListener onPostCreate. .

+7

. , savedinstanceState ( , ).

, - , TextWatcher EditText onCreate, , callCreate (, ), , TextWatcher EditText.

, :

if(savedInstanceState == null){
    Log.e("savedInstance state is null", "no text");
    et.setText("No text");
}

, setText EditText, afterTextChanged (Editable s) .

+1

All Articles