java - 在 SaveInstanceState 上保存和恢复 ArrayDeque

标签 java android android-savedstate

我正在开发一个视频应用程序,它使用 ArrayDeque 来存储我们观看的视频的历史记录,使用推送、弹出。它运行良好,但我正在寻找一种保存和恢复 ArrayDeque 的干净方法

private Deque<ProgramModel> mVideoHistory = new ArrayDeque<>();

我通过将其另存为数组列表来保存列表。

@Override
public void onSaveInstanceState(final Bundle outState) {
    // save history
    ArrayList<ProgramModel> history = new ArrayList<>();
    for (ProgramModel program : mVideoHistory) {
        history.add(program);
    }
    outState.putParcelableArrayList("videoHistory", history);
}

然后我恢复它

if (savedInstanceState != null) {
    // restore history
    ArrayList<ProgramModel> history =
            savedInstanceState.getParcelableArrayList("videoHistory");
    mVideoHistory = new ArrayDeque<>(history);
}

可以用比这更有效/更干净的方式来完成吗?

我尝试过 outState.putSerialized("videoHistory", mVideoHistory.toArray()); 但恢复给我带来了问题。

最佳答案

你可以这样做:

outState.putSerializable("videoHistory", (ArrayDeque<ProgramModel>) mVideoHistory);

恢复时再次施放。

希望对你有帮助

关于java - 在 SaveInstanceState 上保存和恢复 ArrayDeque,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35264682/

相关文章:

java - 如何修复错误 "reading .m2\repository\junit\junit\4.8.2\junit-4.8.2.jar"并使用 Java 6 进行编译?

java - 元素未附加到页面文档

java - Roblox 论坛、网页抓取应用程序 (Android) 问题

java - 如何导入commons-io.jar jsp/java

java - 在 Android 中解析 JSON 字符串

android - SavedStateHandle 返回空值

android - 我们如何从 Executor 获得 Looper?

android - Skype For Business 在 Android 上的对话中不显示 HTML

android - 如何在 Jetpack Compose 1.2.0 中访问 "androidx.savedstate.ViewTreeSavedStateRegistryOwner"?

android - 将 HashMap<Integer, List<Integer>> 放入 savedInstanceState