gpt4 book ai didi

android - popbackstack 后 fragment 不可见

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:06 24 4
gpt4 key购买 nike

我在 Activity.onCreate() 中添加 fragment (主 fragment ),但没有将其添加到后台堆栈,我使用 FragmentTransaction.replace() 来完成。之后,我使用 FragmentTransaction.replace() 添加每个下一个 fragment 并将其添加到 backstack。

我有一个功能可以清除后台堆栈,让主 fragment 可见,为此我使用 FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

如果我只添加 1 个 fragment 到 backstack 然后清除 backstack 它工作正常,但如果我添加多个然后在清除 backstack 后屏幕是空白的,尽管主 fragment 接收 onStart() 和 onResume() 和认为它是可见的,在我再次添加另一个 fragment 或离开应用程序之前,它不会收到 onPause()、onStop()。此外,如果我 popBackstack() 一个一个地(根据用户操作)它工作正常,但如果我 popBackstack() 在循环中(一次弹出所有 fragment )它不起作用.

代码如下:

public void changeFragment(BaseFragment fragment, boolean addToBackStack, boolean preventDuplicate) {
Fragment topFragment = getSupportFragmentManager().findFragmentById(fragmentContainer.getId());
if (preventDuplicate && topFragment != null && fragment.getClass().equals(topFragment.getClass())) {
//Prevent adding same fragment
return;
}

FragmentTransaction transaction =
fragmentManager
.beginTransaction()
.replace(fragmentContainer.getId(), fragment);

if (addToBackStack) {
transaction.addToBackStack(null);
}

transaction.commit();
}

public void goToHome() {
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

最佳答案

FragmentTransaction 有一个新方法(在版本 25.1.0 中添加),请参阅:https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean) .

尝试在 FragmentTransaction 上设置它,同时:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();    
transaction.setAllowOptimization(true);
transaction.replace(...);

这解决了我的问题。

致谢:https://stackoverflow.com/a/42597413/5310016

关于android - popbackstack 后 fragment 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42484358/

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