在一个 android 活动中,我首先恢复 EditText 中的文本,然后向其中添加一个 TextWatcher。
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());
}
});
}
但是当我运行活动时,即使在设置文本后添加了 Watcher 本身,也会调用 afterTextChanged 方法。所以日志输出类似于
onCreate: LifecycleMain 设置文本 xyz // 屏幕旋转 onCreate: LifecycleMain 设置文本 xyz afterTextChanged: xyz 2
TextWatcher 中的计数器显示被调用的观察者是在 EditText 中设置文本之后添加的观察者。任何想法为什么会发生这种情况以及我如何防止这种情况发生?