【发布时间】:2019-11-22 06:47:09
【问题描述】:
我需要自定义一个编辑文本,当我输入文本时,我会在文本更改时对其进行格式化。我已经在编辑文本中实现了文本观察器,下面是代码:
public class CustomEditText extends androidx.appcompat.widget.AppCompatEditText {
public CustomEditText(Context context) {
super(context);
init();
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
TextWatcher textChangeListener = new TextWatcher() {
boolean isIgnoreChange = false;
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int position, int noToAdd, int
noToDelete) {
CustomEditText.this.removeTextChangedListener(textChangeListener);
CustomEditText.this.setText("personal"); // with some logic
CustomEditText.this.addTextChangedListener(textChangeListener);
}
@Override
public void afterTextChanged(Editable editable) {
}
};
private void init() {
this.addTextChangedListener(textChangeListener);
}
}
我已经将 EditText 包装在布局中的 TextInputLayout 中。
问题: 当我 removeTextChangedListener 并调用 setText 方法时,仍然 onTextChanged 又调用了一次。我已经附上了onTextChanged的android源代码并调试了代码,我知道TextInputLayout也附在侦听器列表中,我没有添加它,也许那是调用。删除侦听器后的多次调用扰乱了我的逻辑。如果有人得到任何提示,我错过了请帮助。
【问题讨论】:
-
覆盖 TextWatcher 方法,然后将 textwatcher 添加到其中。或实现 Textwatcher 并简单地使用 addTextChangedListener(this)
标签: android textwatcher