【问题标题】:TextWatcher methods called multiple times多次调用 TextWatcher 方法
【发布时间】:2018-09-18 09:36:56
【问题描述】:

我在 Adapter 中有一个编辑文本,我已将 addTextChangedListener 附加到它,并且它的所有方法都被多次调用, 我的输出是这样的,如果我想把 Home 输出像 H Ho Hom Home

【问题讨论】:

  • 添加代码以获得帮助
  • 你应该在onCreateViewHolder()方法中添加你的textWatcher。
  • holder.etOther.addTextChangedListener(new TextWatcher() { String ans="";@Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { ans=arrayList.get( finalI1).getAnswer();}@Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Override public void afterTextChanged(Editable editable) { arrayList.get(finalI1).setAnswer(ans+ "" +editable.toString());}});
  • holder.etOther.addTextChangedListener(new TextWatcher() { String ans="";@Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { ans=arrayList.get( finalI1).getAnswer();}@Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Override public void afterTextChanged(Editable editable) { arrayList.get(finalI1).setAnswer(ans+ "" +editable.toString());}});

标签: android android-recyclerview textwatcher android-textwatcher addtextchangedlistener


【解决方案1】:

编辑在用户输入时使用计时器取消处理

您可以尝试添加一个计时器来处理您的文本,并在用户键入时取消此处理。

private Timer timer;

myButton.addTextChangedListener(new TextWatcher() {  
    @Override
    public void afterTextChanged(Editable arg0) {
        // user typed: start the timer
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // do your actual work here
            }
        }, 600); // 600ms delay before the timer executes the „run“ method from TimerTask
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // nothing to do here
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // user is typing: reset already started timer (if existing)
        if (timer != null) {
            timer.cancel();
        }
    }
});

希望对您有所帮助!

【讨论】:

  • 我已经实现了 afterTextChanged 方法
  • holder.etOther.addTextChangedListener(new TextWatcher() { String ans="";@Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { ans=arrayList.get( finalI1).getAnswer();}@Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Override public void afterTextChanged(Editable editable) { arrayList.get(finalI1).setAnswer(ans+ "" +editable.toString());}});
猜你喜欢
  • 2013-10-22
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2011-10-28
  • 2018-04-26
相关资源
最近更新 更多