返回从片段 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 之前”
我的 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 之前”