【问题标题】:Android popBackStack shows fragment not added to the backstackAndroid popBackStack 显示片段未添加到后台堆栈
【发布时间】:2019-12-13 11:45:26
【问题描述】:

MainFragment 启动 FragA 启动 FragB 午餐 FragC

FragB 的返回按钮应该转到FragA,按FragC 的返回按钮也应该转到FragAFragB 是唯一一个 isToAddToBackStackfalse

childFragmentManager.commit {
        replace(containerViewId, fragment, fragment::class.java.name)

        if (isToAddToBackStack) {
            addToBackStack(backStateName)
        }
    }

只要在FragC 上按下返回按钮,就会显示FragB

if (childFragmentManager.backStackEntryCount > 1) {
                childFragmentManager.popBackStack()
                return
}

实现我期望的导航的更好方法是什么?

【问题讨论】:

    标签: android android-fragments fragment-backstack


    【解决方案1】:

    片段事务可以涉及两种不同类型的标签。大多数 Android 开发人员都熟悉 Fragment 标签,您可以稍后通过 findFragmentByTag() 使用它在 FragmentManager 中找到特定的 Fragment。当您的应用程序处于特定状态时,这对于查找 Fragment 很有用,但请记住,需要将 Fragment 添加到您的 FragmentManager。如果您有 removed()replaced() 一个 Fragment 并且没有将其添加到后台堆栈,您将无法找到它。

    另一种类型的标记是传递给addToBackStack() 的 BackStackRecord 的名称。此名称标识特定的回栈记录,该记录是特定事务中发生的事情的记录。 popBackStackImmediate() 及其对应物具有接受返回堆栈记录名称以将返回堆栈弹出到特定状态的变体。

       //fm is FragmentManager
      // Fragment a is on the screen
         Fragment a = new A_Fragment()
         fm.beginTransaction()
           .remove(null /*no fragments in R.id.content*/)
           .add(R.id.content, aFragment, "fragment-a")
           .commit();
    
    
       // user wants to go from A to B
         Fragment bFragment = new B_Fragment();
         fm.beginTransaction()
           .remove(fm.findFragmentById(R.id.content)) 
           .add(R.id.content, bFragment, "fragment-b")
           .addToBackStack("a")
           .commit();
    
       // user wants to go from B to C
           fm.beginTransaction()
             .remove(fm.findFragmentById(R.id.content)) 
             .add(R.id.content, new C_Fragment(), "fragment-c")
             .commit();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多