当前位置: 首页 > 知识库问答 >
问题:

从后堆栈还原片段时的savedInstanceState

拓拔烨赫
2023-03-14

可以使用savedinstanceState()保存删除片段时的状态,然后在将片段弹出后堆栈时恢复状态吗?当我从后堆栈还原片段时,savedInstanceState包始终为空。

现在,应用程序流程是:创建的片段->删除的片段(添加到后堆栈)->从后堆栈恢复的片段(savedInstanceState包为空)。

下面是相关代码:

public void onActivityCreated(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getArguments();
    Long playlistId = bundle.getLong(Constants.PLAYLIST_ID);
    int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID);

    if (savedInstanceState == null) {
       selectedVideoNumber = playlistItemId;
    } else {
       selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO");
    }
}

public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber);
    }

我认为问题是onSavedInstanceState()在被移除和添加到后堆栈时从未被调用。如果我不能使用onsavedInstanceState(),是否有其他方法可以解决这个问题?

共有1个答案

施玉宸
2023-03-14

不幸的是,onSaveInstanceState在正常的碎片后堆栈重新创建中没有被调用。查看http://developer.android.com/guide/components/fragments.html#Creating以及添加到后堆栈时如何维护片段状态的答案?

 类似资料:
  • Back Stack是否支持与Android中的嵌套片段交互? 如果是这样,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后堆栈的事实。我希望这不是因为嵌套片段的问题,只是我做了一些不正确的事情。 以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

  • 只要不按后退键,一切都很好。一旦用户关闭其中一个子页面列表,就会重新创建以前的列表,但没有以前显示的页面。在父页面列表中浏览其他页面仍然有效。 在GitHub上可以找到一个示例应用程序:

  • 我编写了一个在两个片段之间切换的虚拟活动。从FragmentA到FragmentB时,FragmentA被添加到后面的堆栈中。但是,当我返回到FragmentA时(按下back),创建了一个全新的FragmentA,并且丢失了它所处的状态。我感觉我在寻找与这个问题相同的东西,但我包含了一个完整的代码示例来帮助解决这个问题: 然而,如果在删除片段时调用addToBackStack(),则该片段将被停

  • 对于我工作的应用程序,我需要实现可访问性。除了一个屏幕外,其他一切都很好,我必须将片段添加到我的活动中。基本上,上面的片段是一个拨号键盘,用于输入密码。此片段与fragmentTransaction一起添加。 问题是对讲的焦点是设置在下面片段的元素上。 您知道是否有办法将对讲焦点设置在拨号片段上吗?我只想“禁用”下面的片段以获得焦点 谢谢,

  • 问题内容: 我只知道非基元(对象)放在堆上,方法在堆栈上,但是基元变量呢? -更新 根据答案,我可以说堆可以有一个新的堆,并且给定对象可以堆吗?假设对象将具有基本变量和引用变量。 问题答案: 本地定义的基元将在堆栈中。但是,如果将原语定义为对象实例的一部分,则该原语将位于堆上。 关于更新: 对象没有自己的堆栈。在我的示例中,实际上是的每个实例的一部分。只要分配了HeapClass的实例(例如),就

  • 如何从堆栈中弹出特定片段,并从片段中删除其他片段?例如,这些是我的片段,我现在在E right know。 A- 想从E回到B,清除C和D。我怎么能做到这一点?