У меня есть вложенный список, например [[Item1,Item2],[Item3,Item4]]
, установленный в RecyclerView. Я пытаюсь удалить элемент из вложенного списка, который работает нормально, пока я не изменю положение отображаемого вложенного списка. Я получаю сообщение об ошибке ConcurrentModification в getItemCount()
.
Удаление элемента
activities.get(position).remove(POI);
notifyDataSetChanged();
Изменение позиции
public void setPosition(int position) {
this.position = position;
notifyDataSetChanged();
}
Ошибка
java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.size(ArrayList.java:1057)
at com.example.planner.ui.planner.PlannerAdapter.getItemCount(PlannerAdapter.java:79)
PlannerAdapter . java
public class PlannerAdapter extends RecyclerView.Adapter<PlannerAdapter.MyViewHolder> implements CustomClickListener {
private List<List<POI>> activities;
private Integer position = 0;
public void setPosition(int position) {
this.position = position;
notifyDataSetChanged();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
PlannerItemBinding plannerItemBinding =
DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.planner_item, viewGroup, false);
return new MyViewHolder(plannerItemBinding);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
try {
myViewHolder.bindTo(activities.get(position).get(i));
}
catch (IndexOutOfBoundsException e){
e.printStackTrace();
}
myViewHolder.plannerItemBinding.setItemClickListener(this);
}
@Override
public int getItemCount() {
if (activities != null) {
return activities.get(position).size();
} else {
return 0;
}
}
public void setCityList(List<List<POI>> cities) {
this.activities = cities;
notifyDataSetChanged();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private PlannerItemBinding plannerItemBinding;
public MyViewHolder(@NonNull PlannerItemBinding plannerItemBinding) {
super(plannerItemBinding.getRoot());
this.plannerItemBinding = plannerItemBinding;
}
void bindTo(POI POI) {
plannerItemBinding.setVariable(com.example.planner.BR.city, POI);
plannerItemBinding.executePendingBindings();
}
}
public void cardClicked(POI POI) {
List<List<POI>> clone = new ArrayList<>(activities);
clone.get(position).remove(POI);
setCityList(clone);
}
}
}