保存RecyclerView列表状态

时间:2017-06-16 06:06:50

标签: android android-recyclerview onsaveinstancestate onrestoreinstancestate

我有一个包含类对象列表的recyclerView。目前,当我关闭我的应用程序时,recyclerView中的所有列表都会丢失,重新启动应用程序后,recyclerView不会显示任何内容(没有列表)。

即使在我被关闭和销毁之后,我还会用什么来保留清单呢?

public class Info  {
public String pName;
public String pContact;
public Character pGender;
public int pID;
public String tDateTime;   // today's date and time
}

我在arraylist中存储此类的对象以填充我的recyclerview适配器。

2 个答案:

答案 0 :(得分:1)

保存状态:

protected void onSaveInstanceState(Bundle state) {
     super.onSaveInstanceState(state);

     // Save list state
     mListState = mLayoutManager.onSaveInstanceState();
     state.putParcelable(LIST_STATE_KEY, mListState);
}

恢复状态:

protected void onRestoreInstanceState(Bundle state) {
    super.onRestoreInstanceState(state);

    // Retrieve list state and list/item positions
    if(state != null)
        mListState = state.getParcelable(LIST_STATE_KEY);
}

然后更新LayoutManager:

@Override
protected void onResume() {
    super.onResume();

    if (mListState != null) {
        mLayoutManager.onRestoreInstanceState(mListState);
    }
}

答案 1 :(得分:1)

覆盖活动中的onSaveInstanceState并保存模型的状态,而不是布局管理器的状态。如果视图显示任何数据,你肯定在某处有数据模型。

至少,您需要记住模型中当前项目的数量。这是因为模型能够从某个地方获取所需项目的内容。如果不是或需要太长时间,则状态还需要包括正在显示的项目。像

这样的东西
@Override
public void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  outState.putSerializable("d.list.data", adapter.getState());
}

而且,必须恢复国家:

if (savedInstanceState != null) {
  adapter.setState(savedInstanceState.getSerializable("d.list.data"));
}

Here是为使用RecyclerView的模型保存和应用状态的类的代码。