返回从片段 B 到片段 A 不工作 Kotlin

Back From fragment B to Fragment A not working Kotlin

我的 Kotlin 代码中有两个片段。 当我按下一些按钮时,第一个片段将膨胀第二个片段。 显示第二个片段并且一切正常但是当我按下后退按钮时 Phone 将转到主页(应用程序被最小化),当我单击最近查看的应用程序,打开屏幕上所有打开的应用程序并选择我的应用程序(已打开),然后应用程序返回 Fragment Alike 它应该是。

但是我不明白为什么当我点击后退按钮时应用程序被最小化了? 我只是想让它回到片段 A 并且 不要最小化 应用程序。

这是膨胀第二个片段的代码:

                    val fragment2 = details_frag()
                    val fragmentManager: FragmentManager? = fragmentManager
                    val fragmentTransaction: FragmentTransaction =
                        fragmentManager!!.beginTransaction()


                    if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {

                        fragmentTransaction.apply {
                            replace(R.id.fragSec, fragment2)
                            commit()
                        }
                    } else {
                        fragmentTransaction.apply {

                            replace(R.id.flFragment, fragment2)
                            commit()
                        }
                    }

主要 Activity 中膨胀第一个片段的代码是:

if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            supportFragmentManager.beginTransaction().apply {
                replace(R.id.fragLand, firstFrag)
                commit()
            }

            supportFragmentManager.beginTransaction()
                .add(
                    R.id.fragSec,
                    details_frag::class.java,
                    null

                ) //    .addToBackStack(null)
                .commit()


        } else {

            supportFragmentManager.beginTransaction().apply {
                replace(R.id.flFragment, firstFrag)
                commit()
            }
        }

我没有看到这里有什么不寻常的地方,一切都很好,但是当我从第二个片段转到第一个片段时,它只是最小化了我的应用程序... (第一个插入 Main Activity 内,如您所见,当有人点击我的代码中的某些内容时,我只是将第一个片段与第二个片段交换......)

谢谢!!!

您需要在 FragmentTransaction 中调用 addToBackstack(就像您在第二个示例中所做的那样)。这使您正在执行的当前事务(将片段 A 替换为 B)成为堆栈上的新状态。然后当用户回击时,该状态可以被弹出并且交易被逆转,所以你回到片段 A 到位。

如果您不将事务添加到后台堆栈,它会成为最新状态的一部分,即当您添加 A 时 - 该状态变为“已添加 A 和然后将其替换为 B”,当您将其弹出时,它会返回到“添加 A 之前”