gpt4 book ai didi

android - 正确替换 Fragments

转载 作者:行者123 更新时间:2023-11-29 01:31:50 32 4
gpt4 key购买 nike

我想知道更改 Fragment、将它们添加到后台堆栈以及在屏幕旋转后恢复可见 Fragment 的正确方法是什么。
目前,我使用这种方法来初始化第一个 fragment :

private void inflateInitialFragment() {
FragmentManager manager = getFragmentManager();
Fragment mainFragment = manager.findFragmentByTag(MainMenuFragment.class.getSimpleName());
FragmentTransaction ft = manager.beginTransaction();
if (mainFragment == null) {
ft.replace(R.id.mainContainer, new MainMenuFragment(), MainMenuFragment.class.getSimpleName());
} else if (!(mainFragment.isAdded() && !mainFragment.isDetached() && !mainFragment.isRemoving())) {
ft.replace(R.id.mainContainer, mainFragment, MainMenuFragment.class.getSimpleName());
}
ft.commit();
manager.executePendingTransactions();
}

然后为了显示新的 fragment ,我有这样的方法:

public void openAwards() {
getFragmentManager().beginTransaction().replace(R.id.mainContainer,
new AwardsFragment(), AwardsFragment.class.getSimpleName()).addToBackStack(null).commit();
}

回到主屏幕:

@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
} else {
getFragmentManager().popBackStack();
}
}

屏幕旋转几次后,我遇到了这样的崩溃:

java.lang.IllegalStateException: Fragment already added: MainMenuFragment{42c64d90 #0 id=0x7f0b003f MainMenuFragment}

我应该如何更改可见的 Fragment 并在屏幕旋转后恢复它们?
我不认为每次保存一些字符串或 fragment 是恢复它们的好方法。

最佳答案

如果您的 Activity 扩展了 android.app.Activity,您不需要覆盖 onBackPressed()。它会自动从后栈中弹出你的 fragment 。

关于android - 正确替换 Fragments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30827135/

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