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

当方向改变时,碎片回退不会恢复

傅俊德
2023-03-14

我有一个FragmentActive,当用户浏览应用程序时,我将当前片段替换为用户选择的片段,并添加将交易添加到背包。一切正常,用户可以通过按下返回按钮返回到以前的片段。

当设备方向改变时会出现问题:假设用户看到的第一个片段是A,然后他导航到B,并从B导航到C。在横向模式下,可以更好地欣赏C中的内容,并且C有一个特殊的横向布局,因此用户旋转设备。我希望用户使用C语言进行新的定位。相反,用户看到的是景观。现在他需要再次从A导航到B,然后再导航到C,才能在横向视图中看到C。

我想在方向改变后保留靠背。

如果我在清单中的活动条目上使用configChange=“orientation”,则会保留backbackback,但由于未重新创建片段,因此无法加载新方向的正确布局。我敢打赌,当这种情况发生时,我可以使用一些讨厌的黑客来强制重新创建片段,但我认为应该有更好的解决方案来实现如此简单的事情。

显然我做错了什么,因为在这一页中,有一个解释说

-

这听起来像是我期望的行为,但在我的应用程序中没有发生。我错过什么了吗?我如何实现这种行为?

我看到过一些类似的问题,但到目前为止,没有一个能帮我解决这个问题。任何帮助都将不胜感激。

共有2个答案

史英睿
2023-03-14

原来导航抽屉片段是在方向更改后重新创建的,因此它触发了onNavigationDrawerItemSelected,它总是替换android正在恢复的片段。我通过添加setRetainInstance(true)来修复它;在我的导航抽屉片段中。

常嘉平
2023-03-14

我认为您在添加/替换片段之前没有检查savedInstanceState。试试这个:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Check that the activity is using the layout version
    // with the fragment_container_main FrameLayout
    if (findViewById(R.id.fragment_container_main) != null) {


        // If we're being restored from a previous state,
        // then we don't need to do anything and should return or else
        // we could end up with overlapping fragments.
        if (savedInstanceState != null) { //Do nothing, Android has got your back.

        } else {
            FragmentOne fragmentOne = new FragmentOne();

            // Add the fragment to the fragment_container_main FrameLayout
            getFragmentManager().beginTransaction()
                    .add(R.id.fragment_container_main,
                            fragmentOne,
                            "FRAG_ONE").commit();
        }
    }
}
 类似资料:
  • 我在应用程序中使用Sherlock操作栏。我在菜单中使用了“ifRoom | with text”功能。如果我在纵向模式下测试代码,我只能看到图标,如果我将方向旋转到横向,我仍然只能看到图标。另一方面,如果我使用横向,我可以在纵向和横向上看到文本和图标。这意味着当屏幕旋转时,操作栏不会刷新。我如何修复? 菜单里,我有 我还在清单文件中使用这一行来修复 但它不起作用。我运行我的代码android 2

  • 我正在开发一个应用程序,基本上有一个行动栏。当我的应用程序启动时,活动创建片段并将它们附加到每个标签上,所以当我切换时,我会得到不同的视图。 当我试图旋转设备时,问题就出现了。经过一番挣扎,我注意到Android会像这样自动重新创建之前添加的片段:

  • 在我的应用程序中,一个

  • 我有一个活动,它在onCreate中加载一个片段(比如Fragment1)。当用户按下Fragment1中的按钮时,我用一个新片段替换Fragment1,比如Fragment2。问题是,在Fragment2中更改方向时,会重新创建活动,并显示Fragment1而不是Fragment2。(因为我在onCreate中创建了Fragment1)我如何坚持Fragment2并在方向更改时保持其状态? 谢谢

  • 所以我正在用Visual Studio编写一个Android应用程序。我想要一个既有纵向又有横向的活动。当我打开我的设备时,我的活动中的数据消失了。所以我在网上查了一下,找到了一行放在清单中的数据,这很有效!Android:config changes = " orientation | keyboard hidden | screen size "除了我所有的视图都是无序的、错位的。我使用了两种