Удалить элемент из вложенного RecyclerView Android - PullRequest
0 голосов
/ 09 мая 2020

У меня есть вложенный список, например [[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);
    }


    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...