java - ArrayList set(position,object) 方法 RecyclerView 中的 IndexOutOfBound 异常
问题描述
我在Recyclerview
适配器中使用arraylist,并且在按下此按钮后我正在使用增量按钮我已经更新了相同位置的数量,但我正面临着IndexOutOfException
帮助我解决这个问题
@Override
public void onBindViewHolder(@NonNull final ItemViewHolder holder, final int position) {
final ItemsModel model=itemsModelList.get(position);
confirmItemModel=new ArrayList<ConfirmItemModel>();
holder.text_name.setText(model.getName());
holder.text_count.setText(model.getCount());
holder.btn_inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int qty=Integer.valueOf((String) holder.txt_qty.getText());
if(qty==0){
qty++;
holder.txt_qty.setText(String.valueOf(qty));
confirmItemModel.add(new ConfirmItemModel(model.getName(),model.getCount(),String.valueOf(qty)));
}else if(qty>0){
qty++;
holder.txt_qty.setText(String.valueOf(qty));
confirmItemModel.set(position,new ConfirmItemModel(model.getName(),model.getCount(),String.valueOf(qty)));
}
}
});
解决方案
解决方案:
调用set
意味着用新的替换element
已经添加的。position
element
更多信息:ArrayList - 设置方法
但是, inRecyclerView
会onBindHolder()
抛出错误,因为onBindViewHolder
填充了新数据并且不替换任何位置。
因此,您不能调用set
.onBindViewHolder()
例如,如果用户输入qty = 5
并且arraylist
只有 3 个元素,那么显然它不会替换位置 5,因为它还没有填充。
如果您想增加任何物品的数量,请确保position
不为空。
希望能帮助到你。
推荐阅读
- spring - 如何一起使用 spring-cloud-starter-config 和 spring-boot-devtools?
- c# - 需要帮助为新的 Azure queueClient 版本设置 QueueMessageEncoding.Base64
- c# - .Net 5 Api:将结果返回给调用者,然后运行一些代码
- python - 使用 API 从 Morningstar 抓取数据
- javascript - 添加/删除事件监听器,同时保持“this”的实例上下文
- django-rest-framework - 错误 401:invalid_client 未找到 OAuth 客户端
- ios - iOS:BGProcessingTaskRequest 因 CPU 使用率高而被杀死
- swift - 如何更改导航栏和后退按钮颜色 iOS 15
- java - 如何使用 Jackson 创建不可变 DTO 但没有注释?
- javascript - 在 Ckeditor 中,如果我输入文本或退格输入复选框将取消选中并且值将更改