Java 如何在recyclerview适配器中更新特定项目范围

Java 如何在recyclerview适配器中更新特定项目范围,java,android,android-recyclerview,adapter,notifydatasetchanged,Java,Android,Android Recyclerview,Adapter,Notifydatasetchanged,我有一个回收视图。我正在从服务器获取一个列表,并将其显示在列表中。我有分页,当我滚动到底部时,我请求服务器获取下一个项目,例如50个项目。唯一的问题是,当我得到响应时,我正在使用notifyDataSetChanged()更新整个适配器 这很简单,我使用的是ViewModel。当我的观察者发出通知时,我调用notifyDataSetChanged()。我的适配器从ViewModel获取列表。当我从服务器获取下50个项目时,我只需将新项目添加到现有列表中。调用notifyDataSetChange

我有一个
回收视图
。我正在从服务器获取一个列表,并将其显示在列表中。我有
分页
,当我滚动到底部时,我请求
服务器
获取下一个项目,例如50个项目。唯一的问题是,当我得到响应时,我正在使用
notifyDataSetChanged()
更新整个适配器


这很简单,我使用的是
ViewModel
。当我的观察者发出通知时,我调用
notifyDataSetChanged()
。我的适配器从
ViewModel
获取列表。当我从服务器获取下50个项目时,我只需将新项目添加到现有列表中。调用
notifyDataSetChanged()
adapter后,将用这50个新项目更新整个列表。那个么,我怎样才能只更新从服务器上获得的最后50个项目呢?当我将这些项添加到列表中时,我需要通知适配器更新其数据。在那里我找到了一个
notifyItemInserted(),但它需要位置。

您可以使用DiffUtilsasynclistdifferent来完成这项工作(我告诉您这一点,但我不完全理解它的内部工作原理)。它使绘图变得简单,并通过Android系统进行处理。我读过一些文章,发现AsyncListDifference检查新项目,只绘制新项目

以下是一些帮助您的代码:

适配器类

导入android.content.Context;
导入android.content.Intent;
导入android.text.TextUtils;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.AsyncListDifferent;
导入androidx.recyclerview.widget.DiffUtil;
导入androidx.recyclerview.widget.recyclerview;
导入java.util.ArrayList;
导入java.util.SortedSet;
导入neilsayok.github.launchest5.R;
导入neilsayok.github.launchest5.adapter.viewholder.AppDrawerItemVH;
导入neilsayok.github.launchertest5.data.AppInfo;

公共类AppDroperRVAdapter扩展了RecyclerView.Adapter

当前方法有什么问题?你想要实现什么?是否要覆盖先前获取的数据?您可以选中NotifyItemRange,将链接转到不推荐的版本。这是正确的:如果要更新,则应使用notifyItemRangeChanged;如果要插入,则应使用NotifyItemRangeSerted;如果要删除,还应。。。NotifyItemRange已删除
mViewModel.getList().observe(
            getViewLifecycleOwner(),
            listResult -> {
                recycler.getAdapter().notifyDataSetChanged();
            });