我的Kotlin代码中有两个片段。当我按下一些按钮时,第一个碎片会使第二个碎片膨胀。第二个片段会显示出来,一切都很好,但当我按下后退按钮时,手机会转到主页(应用程序被最小化(,当我点击最近查看的应用程序,打开屏幕上所有打开的应用程序并选择我的应用程序(已打开(时,应用程序会像预期的一样返回到片段
但我不明白为什么当我点击后退按钮时,应用程序会最小化?我只想让它回到片段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()
}
}
主活动中对第一个片段进行充气的代码是:
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()
}
}
我在这里没有看到什么异常,一切都很好,但当我从第二个片段到第一个片段时,它只是最小化了我的应用程序。。。(正如你所看到的,第一个片段插入主活动中,当有人点击我代码中的某个内容时,我只是将第一个片段与第二个片段交换…(
谢谢!!!
您需要在FragmentTransaction
中调用addToBackstack
(就像您在第二个示例中所做的那样(。这使得您正在执行的当前事务(用B替换片段A(成为堆栈上的新状态。然后,当用户进行反击时,可以弹出该状态并反转事务,因此您将返回片段A。
如果您不将事务添加到后台,它将成为最新状态的一部分,也就是说,当您添加A时,该状态将变为"添加A然后用B"代替;,当你把它关掉时,它又回到了";在添加A"之前;