【问题标题】:onTextChanged is not working properly in custom EditTextonTextChanged 在自定义 EditText 中无法正常工作
【发布时间】: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


【解决方案1】:

像下面这样添加 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
 }
});

希望这会对你有所帮助。

【讨论】:

  • 我不认为在这里我们需要使用 ed.addTextChangedListener 它已经是 editText 我们需要的只是 addTextChangedListener(this)。
  • 如果有帮助,请批准我的回答。
【解决方案2】:

在init()方法中,你必须将监听器添加到CustomEditText:

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

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

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

我建议你在 19:00 看一下this tutorial

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多