当前位置: 首页 > 知识库问答 >
问题:

如何更新/刷新一个特定的项目RecyclerView没有调用通知ItemChanged或DiffUtil?

燕烨
2023-03-14

我有一个嵌套的回收器视图,这个回收器视图的每一行/项目也是一个回收器视图,并且有一个外部事件会更新内部回收器视图中的一个项目。我的外部回收器视图适配器的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);
            }

    }

如你所见,我正在将内部recyclerViews绑定到onBindViewHolder中的适配器上,我想在不调用notifiyItemChanged的情况下更新内部recyclerViews的特定项,因为这将重新创建分页的内部适配器,它将调用第一页,因为内部recyclerViews使用的是水平线性布局管理器。

通过按位置访问recyclerView的项目并将NotifiyItem更改为内部recyclerView,是否有任何方法可以实现这一点?

共有2个答案

袁奇文
2023-03-14

生活数据

有趣的是,你可以直接在布局中使用它

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable name="myTextLiveData" type="String" />
    </data>

    <TextView
    ...
      android:text="@{myTextLiveData}
    />

</layout>

在adapter onBind()中,可以设置对象的livedata以及更新livedata的任何位置。setValue(“新值”),它会立即反映。

我严格假设你只是在更新数据部分。如果您的数据要修改订单或列表大小,那么最好坚持使用notifyItemChanged()

你也可以考虑DiffUtil

颜文昌
2023-03-14

您可以尝试使用elle fyItemChanged()

notifyItemChanged(int position, Object payload)

通知所有已注册的观察者,位置上的物品已使用可选有效负载对象更改。

思维方式

arrayList.set(updatePosition, yourValue);
adapterOBJ.notifyItemChanged(updatePosition);
 类似资料:
  • 我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong

  • 删除项目后,“我的回收器”视图未更新。此recyclerView位于片段内部。我试过各种方法,但都不管用。 片段类中的适配器声明 回收服务适配器: } 调试项目时,我可以看到该项实际上正在从ArrayList中删除。但不在循环视图中更新。 删除后,如果滚动回收站视图,则从回收站视图中删除已删除的项。但不是没有滚动。

  • 我正在使用RecyclerView来显示一个项目列表,我需要按位置更新单个项目的状态。我正在更新列表中的项目,然后调用notifyItemChanged(int位置),如下所示: 项目更新成功,但也随机更新了一些其他项目,每次我滚动上下通过我的项目列表,这种更新(不同的图标状态)也在其他项目上。

  • 每个人 我不知道是否已经有人问过这个问题,但我到处找,但找不到。我正在使用GitHub进行Intellij IDEA项目。我在工作中使用我的台式计算机来开发。完成后,我在Github上做了一个提交,它直接在我的帐户上。但是,有时我想在家里继续使用笔记本电脑,使用同一个项目并修改和提交它。由于不太了解Github与Intellij的集成,我知道我可以将现有项目下载到本地计算机上。但我的问题是,如何更

  • 如何将我在build.gradle中所做的更改同步到项目结构中(例如,AndroidStudio正在识别我添加的库?有点像maven项目的“重新导入所有maven项目”——只是为了一个纯粹的gradle项目。