Java 焦点丢失时移除ExtChangedListener
我在方法内部的EditText中调用onFocusChange方法,当该字段具有焦点时,我使用先前声明的TextWatcher调用addTextChangedListener到同一字段。 当字段失去焦点时,我移除TextWatcher。 但它看起来不起作用,因为在第二个字段中,我最终需要将文本设置为第一个字段,最后调用我之前删除的TextWatcherJava 焦点丢失时移除ExtChangedListener,java,android,Java,Android,我在方法内部的EditText中调用onFocusChange方法,当该字段具有焦点时,我使用先前声明的TextWatcher调用addTextChangedListener到同一字段。 当字段失去焦点时,我移除TextWatcher。 但它看起来不起作用,因为在第二个字段中,我最终需要将文本设置为第一个字段,最后调用我之前删除的TextWatcher et1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
et1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
final TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Do things
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Do things
}
@Override
public void afterTextChanged(Editable s) {
// Do things
}
};
if (hasFocus) {
et1.addTextChangedListener(watcher);
} else {
et1.removeTextChangedListener(watcher);
}
}
然后在这里开始第二个字段的代码(使用类似的逻辑)
这是Android Studio的一个bug,或者我错过了什么?首先,我建议您不要在
onFocusChange
方法中创建textWatcher
,因为在调用onFocusChange
时不断创建它并不重要,
然后我想问你为什么要删除
textWatchers
,因为如果你的EditText
没有焦点,它是一样的,textWatcher
将不起作用你为什么不简单地想添加textChangedListener
,而不跟踪焦点的变化?我看不出有任何理由去寻找onfocuschangelister
et2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
final TextWatcher watcherEt2 = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Do things
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Do things
et1.setText("from things"); //here the removed TextWatcher is runned
}
@Override
public void afterTextChanged(Editable s) {
// Do things
}
};
if (hasFocus) {
et2.addTextChangedListener(watcherEt2);
} else {
et2.removeTextChangedListener(watcherEt2);
}
}