首页 > 解决方案 > java.lang.IndexOutOfBoundsException: Index: 30, Size: 30 in onBindViewHolder() on Android

问题描述

 @Override
 public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
    Log.d("position", "" + position);
    holder.tv_arsId.setText(arrivalInfoArrayList.get(position).getArsId());
    holder.tv_stNm.setText(arrivalInfoArrayList.get(position).getStNm());
 }

到达信息数组列表大小为 30,位置日志打印 0 - 30。

我知道发生此错误是因为 index 以 0 开头,而 size 以 1 开头。

我试过这些。

1)

if (position > 0) {
    holder.tv_arsId.setText(arrivalInfoArrayList.get(position - 1).getArsId());
    holder.tv_stNm.setText(arrivalInfoArrayList.get(position - 1).getStNm());
}

2)

for ( int i = 0; i < arrivalInfoArrayList.size(); i++) {
    holder.tv_arsId.setText(arrivalInfoArrayList.get(position).getArsId());
    holder.tv_stNm.setText(arrivalInfoArrayList.get(position).getStNm());
}

但它没有用。位置日志仍然打印 0 - 30 并且发生错误。

我搜索了帖子,但我不知道如何解决它。

先感谢您。

标签: android

解决方案


在您的适配器中,您必须使用:

@Override
public int getItemCount() {
    return arrivalInfoArrayList.size();
}

推荐阅读