3

我有一个包含类对象列表的 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 适配器。

4

2 回答 2

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);
    }
}
于 2017-06-16T06:17:47.500 回答
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"));
}

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

于 2017-06-16T08:08:41.970 回答