gpt4 book ai didi

android - 方向更改时不会恢复 Fragment Backstack

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:55 30 4
gpt4 key购买 nike

我有一个 FragmentActivity,当用户在应用程序中导航时,我用用户选择的 fragment 替换当前 fragment ,并将事务添加到后台堆栈。一切正常,用户可以通过按后退按钮返回到之前的 fragment 。

问题发生在设备方向改变时:假设用户看到的第一个 fragment 是 A,然后他导航到 B,然后从 B 导航到 C。C 里面的内容在横向模式下更好地欣赏,并且 C 有一个特殊的横向布局,所以用户旋转设备。我希望用户在 C 中使用新的方向。相反,用户看到的是横向的 A。现在他需要再次从 A 导航到 B,然后再导航到 C,以便能够看到 C 的风景。

我希望在方向更改后保留后退堆栈。

如果我在 list 中的 Activity 条目上使用 configChange="orientation",会保留 backstack,但由于未重新创建 fragment ,它无法为新的 Activity 加载正确的布局方向。我敢打赌,当发生这种情况时,我可以使用一些讨厌的 hack 来强制重新创建 fragment ,但我认为应该有更好的解决方案来实现如此简单的事情。

显然我做错了什么,因为在this page , 有一个解释说

-> Fragment Manager invokes onSaveInstanceState() on both thefragments.
-> Activity and both Fragments are destroyed
-> New instance of the Activity is created
-> Back stack is recreated withnew instances of the Fragments

这听起来像我期望的行为,但在我的应用中并没有发生。我错过了什么吗?我怎样才能实现这种行为?

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

最佳答案

我认为您在添加/替换 fragment 之前没有检查 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();
}
}
}

关于android - 方向更改时不会恢复 Fragment Backstack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637796/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com