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

时间:2016-09-28 05:06:29

标签: android android-layout android-recyclerview bundle

我一直在使用RecyclerView。我正在关注延迟加载,所以每次都在视图上显示10个数据。如果用户滚动到底部,页面将从TOP重新加载!但是,我想留在以前的地方!所以,我试过用

recyclerView.scrollToPosition(position);

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

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

我尝试过其他所有方法,显然没有一种方法适合我! 任何帮助将非常感谢!提前致谢!

3 个答案:

答案 0 :(得分:1)

注意:确保每次更新数据集后都没有初始化或调用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();

}

答案 1 :(得分:1)

我在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();

多数民众赞成。

答案 2 :(得分:0)

这是回收/重新使用视图的默认行为Recycler View。正如官方文档中所述: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
如果您遇到任何与视图相关的问题,请将您的视图状态保存在List<Object>设置可见项目中,或者不保存每个位置。在您的onBindViewHolder方法中,根据位置显示/隐藏您的视图。