onTextChanged在自定义EditText中无法正常工作

问题描述 投票:0回答:2

我需要自定义和编辑文本,当我输入文本时,将根据更改后的文本对其进行格式化。我已经在编辑文本中实现了文本观察器,下面是代码:

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也已附加在侦听器列表中,我没有添加它,也许正在调用它。删除侦听器后的多次调用打乱了我的逻辑。如果有人得到我所缺少的任何提示,请帮助。

android textwatcher
2个回答
2
投票

如下添加EditText的点击侦听器,并根据您的要求将其添加到所有这些方法中:-

onTextChangedbeforeTextChangedafterTextChanged将想要的操作添加到这些方法中。

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
 }
});

希望这会对您有所帮助。


0
投票

init()方法中,您必须将侦听器添加到CustomEditText

public void init() {
    this.addTextChangedListener(textChangeListener);
}

并且您应该在onTextChanged()方法中删除以下代码

CustomEditText.this.removeTextChangedListener(textChangeListener);
CustomEditText.this.addTextChangedListener(textChangeListener);

[我建议您在19:00s看一下this tutorial

© www.soinside.com 2019 - 2024. All rights reserved.