【问题标题】:Saving state of fragment using DrawerLayout使用 DrawerLayout 保存片段的状态
【发布时间】:2014-03-14 19:40:15
【问题描述】:

我使用this tutorial 来制作 SliderView。

在第一个片段中,我有一个带有暂停按钮、播放按钮和停止按钮的媒体播放器。 当我按下播放按钮时,它会启用其他按钮并禁用自身。 之后,我使用滑块菜单转到另一个片段。当我返回媒体播放器所在的第一个片段时,按钮处于初始状态。它再次调用 onCreateView。

我需要知道如何保存该片段的状态以便以后显示。

【问题讨论】:

    标签: android android-activity fragment instance


    【解决方案1】:

    查看 Android 开发者网站上的 Fragment 文档。在他们的示例中,他们清楚地展示了如何保存状态here。为了方便使用,我会在这里复制:)。

    基本上,您必须检查 onActivityCreated 中的已保存状态,并将任何所需信息保存在 onSaveInstanceState 中,如下所示:

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    
        .....
    
        if (savedInstanceState != null) {
            // Restore last state for your player information.
            mIsPlaying = savedInstanceState.getBoolean("isPlaying", false);
        }
        ......
    }
    
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("isPlaying", mIsPlaying);
    }
    

    【讨论】:

    • 其实我之前查过,但是没看懂。 onActivityCreated 被首先调用,所以“isPlaying”为假。当我按下播放按钮时,我应该调用:mIsPlaying = savedInstanceState.getBoolean("isPlaying", true); ???每次按钮改变状态时都这样做?
    • 不完全。您是正确的,因为首次调用 onActivityCreated 时该值将为 false。但是,当您离开片段时,将调用 onSaveInstanceState 并在此处保存您需要持久保存的任何值。然后,当您回到该片段时,将调用 onActivityCreated,并且 savedInstanceState Bundle 将包含您存储在 onSaveInstanceState 中的所有数据。有意义吗?
    • 嗯,这个解释正是我需要的!.. 起初,我实际上以为调用 onSaveInstance 时保存了整个片段。所以我可以在我的 onCreateView 上使用 savedInstanceState.getboolean片段,对吧?所以每次创建我的片段时,我都可以设置按钮的状态。这是正确的做法吗?
    • 是的,您可以在 onSaveInstanceState 期间保存所需的任何值,然后将它们加载到 onActivityCreated 中。第一次加载 Fragment 时,不会保存值(因为您还没有离开)。但是,在您离开并返回之后,将调用 onSaveInstanceState 并且您将有机会保存任何重要信息。 :)
    • 非常感谢我的朋友!我现在来看看 SharedPreferences。我感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多