当我按回来时导航片段的问题

时间:2019-08-21 12:33:42

标签: android android-fragments android-fragmentactivity onbackpressed

有一个片段,其中显示了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()
        }
    }

1 个答案:

答案 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