加载更多数据后如何在 RecyclerView 中恢复到之前的状态

How to restore to the previous state in RecyclerView after loading more data

我使用 RecyclerView 已经有一段时间了。我遵循延迟加载,所以我每次都在视图上显示 10 个数据。如果用户滚动到底部,页面会从顶部重新加载!但是,我想留在以前的地方!所以,我尝试使用

recyclerView.scrollToPosition(position);

然而,这打破了 UI 流程! 我的第二次尝试是使用 onSaveInstanceState() 和 onRestoreInstanceState(Bundle state); 但是,这不起作用!我的页面重新加载到顶部!

Parcelable state = layoutManager.onSaveInstanceState();
layoutManager.onRestoreInstanceState(state);

我已经尝试了所有其他方法,显然 none 对我有用! 任何帮助将不胜感激!提前致谢!

注意:确保您没有在每次更新数据集后都初始化或调用 setAdapter() 方法。如果没有,那么

您必须更新您的数据列表并调用 notifyDataSetChanged() 这将从现有位置更新您的适配器。

假设您已将数据存储到 ArrayList mData;

您的 getItemCount() 将是

@Override
public int getItemCount() {

if (mData != null && mData.length() > 0)
    return mData.size();

    return 0;
}

现在在您的适配器中再创建一个方法,您每次从服务器获取新数据时都会调用该方法。此方法将简单地覆盖您的数据集并更新您的适配器

private void updateDataSet(ArrayList<String> mData){

  this.mData = mData;
  notifyDataSetChanged();

}

这是 Recycler View 到 recycle/resuse 视图的默认行为。如官方文档所示: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
如果您遇到任何与视图相关的问题,请将您的视图状态保存在 List<Object> 中,例如为每个位置设置可见项或不可见项。并在您的 onBindViewHolder 方法中根据位置 show/hide 您的观点。

我在 2 天前完成了此功能

我和你分享我的想法

制作

Listview lv; //Assume Find view by Id 
List<Model> models = new ArrayList();

现在制作适配器并分配空白模型

CustomAdapter adapter = new CustomeAdapter(context,models);
lv.setAdapter(adapter);

现在当您有新数据要使用 lazylodaing 加载时

这样做

models.addAll(newModels); //new ModelList
adapter.notifyDataSetChanged();

就是这样。