如何在不调用notifiyItemChanged或DiffUtil的情况下更新/刷新RecyclerView的特定项目?

Abd*_*ery 8 java android android-recyclerview

我有一个嵌套RecyclerViews的,这个 recyclerView 的每一行/项目也是一个 recyclerView ,并且有一个外部事件将更新内部 recyclerView 中的项目。我的外部 RecyclerView 适配器的 onBindViewHolder 看起来像这样

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
            GiftWrappingHorizontalViewHolder viewHolder = (GiftWrappingHorizontalViewHolder) holder;
            viewHolder.giftWrappingRecyclerView.setLayoutManager(new LinearLayoutManager(viewHolder.giftWrappingRecyclerView.getContext(),
                    RecyclerView.HORIZONTAL, false));
            viewHolder.topTextView.setText(dataList.get(position).getTopTextName());
            if(dataList.get(position).getType() == 1) {
                GiftWrappingHorizontalAdapter adapter = new GiftWrappingHorizontalAdapter(dataList.get(position)
                        .getItems(), position);
                viewHolder.giftWrappingRecyclerView.setAdapter(adapter);
                viewHolder.giftWrappingRecyclerView.setItemAnimator(null);
                adapter.setGiftWrappingHorizontalClickListener(giftWrappingHorizontalClickListener);
            } else if(dataList.get(position).getType() == 0){
                GiftWrappingAddOnsAdapter adapter = new GiftWrappingAddOnsAdapter(dataList.get(position)
                        .getItems(), position);
                viewHolder.giftWrappingRecyclerView.setAdapter(adapter);
                viewHolder.giftWrappingRecyclerView.setItemAnimator(null);
                adapter.setGiftWrappingAddOnEventsListener(giftWrappingAddOnEventsListener);
            }

    }
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,我将内部 recyclerViews 绑定到 onBindViewHolder 内的适配器,并且我想更新内部 recyclerView 的特定项目而不调用 notifiyItemChanged 因为这将重新创建分页的内部适配器,并且它将调用第一个页面只是因为内部 RecyclerViews 使用 HORIZONTAL LinearLayoutManager 。

是否有通过按位置访问 recyclerView 的项目并调用内部 RecyclerView 的 notifiyItemChanged 来实现此目的?

Int*_*iya 6

你可以尝试使用notifyItemChanged()

notifyItemChanged(int position, Object payload)
Run Code Online (Sandbox Code Playgroud)

使用可选的有效负载对象通知所有注册的观察者该位置的项目已更改。

逻辑

arrayList.set(updatePosition, yourValue);
adapterOBJ.notifyItemChanged(updatePosition);
Run Code Online (Sandbox Code Playgroud)