有一个片段,其中显示了recyclerView
列表。
当我单击MainActivity
中的列表项时,我调用该方法:
fun FragmentActivity?.replaceFragment(fragment: Fragment): Boolean {
if (this == null) return false
try {
supportFragmentManager?.beginTransaction()?.replace(
R.id.container, fragment,
fragment.createTagName()
)?.commit()
} catch (ignored: IllegalStateException) {
return false
}
return true
}
此后,我按下系统后退按钮,我有一个重复的列表。
我还可以在MainActivity
中享受下一个乐趣:
override fun onBackPressed() {
val onBackPressListener = currentFragmentInContainer() as? OnBackPressListener
if (onBackPressListener?.onBackPress() != true) {
super.onBackPressed()
}
}
答案 0 :(得分:1)
问题是您尚未将当前片段添加到后堆栈中。
为了到达起点,您必须标记片段。 addToBackStack(tag:String)
将帮助您做到这一点。
代码:
fun FragmentActivity?.replaceFragment(fragment: Fragment): Boolean {
if (this == null) return false
try {
supportFragmentManager?.beginTransaction()?.replace(
R.id.container, fragment,
fragment.createTagName()
).addToBackStack(fragment.createTagName())?.commit()
} catch (ignored: IllegalStateException) {
return false
}
return true
}
以下是有关该方法的文档:addToBackStack