我需要自定义编辑文本,当我输入文本时,我将根据更改后的文本对其进行格式化。我已经在编辑文本中实现了文本观察器,下面是代码:
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中。
问题:当我删除TextChangedListener并调用setText方法时,仍然onTextChanged又调用了一次。我已经附加了onTextChanged的android源代码并调试了代码,我知道TextInputLayout也已附加在侦听器列表中,我没有添加它,也许正在调用它。删除侦听器后的多次调用打乱了我的逻辑。如果有人得到任何提示,我想念的请帮助。
最佳答案
如下添加EditText的点击侦听器,并根据您的要求将其添加到所有这些方法中:-
onTextChanged,beforeTextChanged,afterTextChanged将所需的操作添加到这些方法中。
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
希望这会帮助你。
关于android - onTextChanged在自定义EditText中无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58988903/