ArrayList set(position,object)方法RecyclerView中的IndexOutOfBound异常

时间:2018-10-19 17:01:52

标签: java android

我在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)));

            }

        }
    });

1 个答案:

答案 0 :(得分:1)

解决方案:

调用set意味着用新的element替换position中已经添加的element

更多信息:ArrayList - Set Method

但是,在RecyclerView的{​​{1}}中会抛出错误,因为onBindHolder()会填充新数据并且不会替换任何位置。

因此,您无法在onBindViewHolder中呼叫set

例如,如果用户输入onBindViewHolder()并且qty = 5仅包含3个元素,则显然它不会替换位置5,因为它尚未被填充。

如果您想增加任何物品的数量,请确保arraylist不为空。

希望有帮助。