保存RecyclerView列表状态

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适配器。

你可以使用本地数据库来存储数据,按照这个链接操作:http://www.androidauthority.com/how-to-store-data-locally-in-android-app-717190/ - ND1010_
你的列表上显示了哪些数据?你能分享一下你的来源吗? - JavadKhan
你是如何填充数据的?无论如何,我需要那个源代码。如果你手动输入数据,通过EditText,那么你应该使用sqlite数据库。 - JavadKhan
在列表中显示了上面添加的类信息。 - Gaurav Singh
是的,我通过Edittext填充数据。 - Gaurav Singh
有没有一种方法可以在不使用数据库的情况下使用onSaveInstanceState来保留这些列表视图? - Gaurav Singh
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);
    }
}

1
我尝试了这个,但是没有起作用。在应用程序关闭后,RecyclerView仍然为空。 - Gaurav Singh

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模型保存和应用状态的类代码。Here

链接已经断开 :( - ramaral
1
链接现在应该已经修复了。感谢您的反馈。 - Audrius Meškauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接