gpt4 book ai didi

android - popBackStackImmediate 在当前 fragment 事务未添加到后台堆栈时不显示 fragment

转载 作者:行者123 更新时间:2023-11-30 00:26:28 31 4
gpt4 key购买 nike

当序列中的所有 fragment 都添加到后台堆栈时,Popbackstack 工作正常,但当其中一个事务未添加到后台堆栈时,Popbackstack 无法正常工作。

这是我的导航:

1.替换 fragment 以加载主页 fragment 。此交易未添加到后台。

  1. 替换 fragment 以加载登录 fragment 。此事务已添加到后台堆栈。

    3.替换 fragment 以加载登录 fragment 。此事务未添加到后台堆栈。

    现在,当我按下后退按钮时,一旦没有任何反应。而理想情况下,它应该从登录 fragment 转到主 fragment 。这是我在主要 Activity 中的 onbackpressed 方法:

    @Override
    public void onBackPressed() {
    if(getSupportFragmentManager().getBackStackEntryCount()>0)
    {
    FragmentManager.BackStackEntry backStackEntry = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1);
    String str = backStackEntry.getName();
    FragmentManager fm=getSupportFragmentManager();
    //getSupportFragmentManager().popBackStackImmediate();
    fm.popBackStack(str, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
    else {
    super.onBackPressed();
    }


    }

最佳答案

popBackstack 仅“弹出”后台堆栈中的内容。由于在按返回时将 LoginFragment 替换为 LoggedInFragment 时尚未添加事务:

  • LoggedInFragment 仍然存在,
  • 弹出 LogInFragment
  • 显示 HomeFragment

但是因为LoggedInFragment是在HomeFragment之后添加的,所以HomeFragment显示在它的下面。所以您看不到它被 LoggedInFragment 隐藏了。

一种解决方案是在用 LoggedInFragment 替换 LogInFragment 时将事务添加到返回堆栈。然后在 onBackPressed 中测试当前 fragment 是否为 LoggedInFragment。如果是这种情况,您将返回堆栈弹出到 HomeFragment(不包括在内)。这样,LoggedInFragment 和 LogInFragment 都会弹出。

编辑

@Override
public void onBackPressed() {
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment_container);
// If there is something in the back stack AND the current fragment is the LoggedInFragment
if (manager.getBackStackEntryCount() > 0
&& fragment instanceof LoggedInFragment) {
manager.popBackStack(HomeFragment.class.getSimpleName(), 0);
} else {
super.onBackPressed();
}
}

为了按名称检索 HomeFragment,您需要在用 HomeFragment 替换当前 fragment 时标记您的事务。通常我用 fragment 的类简单名称标记所有事务,这样我就可以重试任何 fragment :

transaction.replace(R.id.my_fragment_container, fragment, fragment.getClass().getSimpleName());

关于android - popBackStackImmediate 在当前 fragment 事务未添加到后台堆栈时不显示 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45278497/

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