为了账号安全,请及时绑定邮箱和手机立即绑定

我有这个错误 java.lang.IndexOutOfBoundsException:

我有这个错误 java.lang.IndexOutOfBoundsException:

米脂 2022-12-07 15:09:11
我收到一个错误:java.lang.IndexOutOfBoundsException:索引:0,大小:0我遇到错误的部分在我的 if 语句中onBindViewHolder,下面是我的适配器:public class UserProgramWeekAdapter extends RecyclerView.Adapter<UserProgramWeekAdapter.ViewHolder>{    private Context context;    private ArrayList<ProgramTrackerWrapper> programTrackers;    public UserProgramWeekAdapter(Context context, ArrayList<ProgramTrackerWrapper> programTrackers) {        this.context = context;        this.programTrackers = programTrackers;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_user_program_week_adapter, parent, false);        ViewHolder viewHolder = new ViewHolder(view);        return viewHolder;    }    @Override    public void onBindViewHolder(UserProgramWeekAdapter.ViewHolder holder, int position) {        holder.dayTxt.setText(programTrackers.get(position).getDay());        holder.numberofExercises.setText(programTrackers.get(position).getProgramTrackers().size()+ " exercises");        boolean isFinished = false;        for (int i = 0; i < programTrackers.size(); i++){        if ( programTrackers.get(position).getProgramTrackers().get(i).isProgramExerciseFinished()){                isFinished = true;            }        }        String statusTxt = isFinished || programTrackers.size() == 0 ? "Completed" : "Not Completed";        holder.exerciseCompleted.setText(statusTxt);    }    @Override    public int getItemCount() {        return programTrackers.size();    }    public class ViewHolder extends RecyclerView.ViewHolder {        TextView dayTxt, exerciseCompleted, numberofExercises;        public ViewHolder(View itemView) {            super(itemView);            dayTxt = itemView.findViewById(R.id.dayTxt);            exerciseCompleted = itemView.findViewById(R.id.exerciseCompleted);            numberofExercises = itemView.findViewById(R.id.numberofExercises);        }    }}
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

这看起来很可疑:


for (int i = 0; i < programTrackers.size(); i++){

  if ( programTrackers.get(position).getProgramTrackers().get(i).isProgramExerciseFinished()){

        isFinished = true;

    }

}

您检查programTrackers列表的大小,但不检查其子列表,因此i很容易指向不正确的索引:


final int sublistSize =  programTrackers.get(position).getProgramTrackers().size();

for (int i = 0; i < sublistSize; i++){

  if (programTrackers.get(position).getProgramTrackers().get(i).isProgramExerciseFinished()){

        isFinished = true;

    }

}


查看完整回答
反对 回复 2022-12-07
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信