java - Android RecyclerView 和 onBindViewHolder
问题描述
我在每个项目上都有一个 TextView 并添加holder.item_edit_text.addTextChangedListener
了onBindViewHolder
一个长列表和一个在片段级别计算总数的界面,但奇怪的是,当用户在一个视图上键入时,onBindViewHolder
会在多个项目上调用。IE 如果用户输入 5,我会得到 5 的倍数,具体取决于回收率(列表中的项目数),例如 15 或 25
RECYCLERVIEW onBindViewHolder
holder.item_edit_text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence amount, int start, int before, int count) {
calculateTotal.onAmountAdded(current, amount.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
@Override
public int getItemCount() {
if (Accounts != null) {
return Accounts.size();
}
return 0;
}
问题是我如何确保onBindViewHolder
每次在 recyclerview 中调用一个项目
片段
@Override
public void onAmountAdded(Account account, String amount) {
private Map<Account, String> orderItems = new HashMap<>();
if (amount.length() < 9) {
orderItems.put(account, amount);
int newTotal = 0;
Iterator iterator = orderItems.entrySet().iterator();
while (iterator.hasNext()) {
try {
Map.Entry mentry = (Map.Entry) iterator.next();
newTotal += Integer.parseInt(mentry.getValue().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
text_total.setText(ValidationUtil.formatNumber(String.valueOf(newTotal)));
return;
}
}
解决方案
我想没有足够的信息。
而不是在 viewBinder 上添加 TextWatcher
将其添加到您的 ViewHolder 类中
class ViewHolder extends RecyclerView.ViewHolder {
private TextView item_edit_text;
ViewHolder(View itemView) {
super(itemView);
item_edit_text = itemView.findViewById(R.id.item_edit_text);
item_edit_text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence amount, int start, int before, int count) {
//not sure why this current variable is for
//if its current Account
Accounts current = Accounts.get(getLayoutPosition());
calculateTotal.onAmountAdded(current, amount.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
推荐阅读
- c# - 发送电子邮件时 D365 插件错误 0x80040265
- python - 为什么我在 python 中得到一个无效的语法错误?
- nginx - Nginx Tracing 无法进入上游服务
- spring-boot - Spring中的事务性kafka和数据库
- google-pay - Google Pay + Sberbank 集成错误 10
- python - 从任何地方激活 Python venv
- javascript - 如何识别点(xy)在svg组几何元素内
- ios - @import geolocator_apple:找不到模块“geolocator_apple”
- laravel - 向 Laravel web.php 路由发送 POST 请求
- prestashop - 如何处理带有 div 元素的 CLS 分数?(网络生命体征)