android - 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 和在第一个编辑文本中输入的值。请注意,这是在没有任何滚动的情况下发生的。任何帮助将非常感激。谢谢。
解决方案
在适配器中添加 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());
}
}
推荐阅读
- django - 在一行Django中查询中间模型
- python - 创建类后无法添加`__init_subclass__`
- discord.py - 我如何提及使用 discord.py 的人?
- cypress - 即使使用了 --spec 参数,cypress 也会运行所有测试文件
- javascript - 除非向导的每个选项卡都经过验证,否则阻止向导下一步按钮继续
- php - 如何在 database.with SELECT 语句中保留 NULL 数据?
- javascript - 有没有办法将 insertBefore() 与 getElementsByClassName 而不是 getElementById 一起使用?
- sql - 单独放置 WHERE 语句以使 UNION 函数工作
- sparql - 无法查询本地 Wikidata 转储
- javascript - 在 intellj 中按文件路径对 javascript 导入进行排序