首页 > 解决方案 > Edittext textwatcher 触发列表视图中的所有编辑文本

问题描述

我有一个列表视图,其中包含每个位置的编辑文本。我为每个edittext分配了一个textwatcher,如下所示:

holder.prodQuantity.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        if(isDialog) {
            recallMap.put(productId, s.toString());
        }
    }

这里的问题是,每当我向第一个编辑文本添加值时,都会为列表视图的所有项目触发文本观察器。 recallMap应该只包含所选行的 id 和在该行的编辑文本中输入的值,但在这种情况下,recalMap具有所有 id 和在第一个编辑文本中输入的值。请注意,这是在没有任何滚动的情况下发生的。任何帮助将非常感激。谢谢。

标签: androidandroid-listviewhashmapandroid-edittextandroid-textwatcher

解决方案


在适配器中添加 textChangedListner 之前,首先将已添加的 textChangedListener 删除到该 EditText。喜欢

 holder.prodQuantity.removeTextChangedListener(textWatcher);
 // obviously you also need to maintain TextWatchers ArrayList associated with each EditText.
// Or instead of maintaining a separate ArrayList for TextWatcher, you can implement in your Data Model Class.

然后你的代码如下

  holder.prodQuantity.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void afterTextChanged(Editable s) {
    if(isDialog) {
        recallMap.put(productId, s.toString());
    }
}

推荐阅读