我正在使用EditText。当我使用setText()时。 TextWatcher事件正在调用。 我不需要打电话吗?有谁可以帮助我?
txt_qty.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
感谢。
答案 0 :(得分:6)
您可以取消注册观察者,然后重新注册。
要取消注册观察者,请使用以下代码:
txt_qty.removeTextChangedListener(yourTextWatcher);
重新注册它使用此代码:
txt_qty.addTextChangedListener(yourTextWatcher);
或者,您可以设置一个标记,以便您的观察者知道您何时自己更改了文本(因此应该忽略它)。
在您的活动中定义一个标志是: boolean isSetInitialText = false;
当您在调用set text之前调用txt_qty.settext(yourText)
make isSetInitialText = true
时,
然后将您的观察者更新为:
txt_qty.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (isSetInitialText){
isSetInitialText = false;
} else{
// perform your operation
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (isSetInitialText){
isSetInitialText = false;
} else{
// perform your operation
}
}
@Override
public void afterTextChanged(Editable s) {
if (isSetInitialText){
isSetInitialText = false;
} else{
// perform your operation
}
}
});