我在onItemSelect
中有一些代码修改了EditText
,但在此之前我删除了TextWatcher
。无论如何,在我修改EditText
后立即调用afterTextChanged
方法。我的方法是这样的:
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
switch (adapterView.getId()) {
case R.id.someId:
// Remove the listener
// make changes to the EditText
// add the listener
break;
}
}
我如何真正删除听众?如果我不删除它,那就是自己多次调用它。
答案 0 :(得分:2)
解决方案是通知您TextWatcher
您将以编程方式修改文本。在编辑文本(而不是删除侦听器)之前设置此标志(称之为enabled
)并在完成修改时重置它。在TextWatcher
中,检查是否设置了此标志,如果是,则忽略任何更改。
class MyTextWatcher extends TextWatcher {
boolean mIsEnabled = true;
public void setEnabled(boolean enabled) {
mIsEnabled = enabled;
}
@Override
protected afterTextChanged(Editable s) {
if (!enabled) return;
...
}
...
}