片段导航扩展功能不起作用

时间:2020-08-08 01:33:07

标签: android kotlin android-fragments

我创建了此扩展功能,用于在片段之间导航,这很简单,但是不起作用。它什么也没做,当我单击按钮时什么也没有改变。我认为问题出在this@navigate参数上,但我不明白为什么这应该是一个问题。

fun Fragment.navigate(): Int? {
    return fragmentManager?.run {
        beginTransaction()
            .replace(
                R.id.my_container,
                this@navigate,
                this@navigate::class.simpleName
            )
            .commit() 
    }
}

用法是这样的

class TestTwoFragment : Fragment(R.layout.fragment_test_two) {
   
    ....

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        ...

        goto_three.setOnClickListener {
            TestThreeFragment
                .newInstance()
                .navigate()
        }
    }

1 个答案:

答案 0 :(得分:2)

您正在使用新片段的fragmentManager,如果尚未添加片段,则为null,例如您的情况。由于您使用的是?.run,因此什么也没有发生,并且该方法返回null

考虑将片段管理器参数添加到您的方法中:

fun Fragment.navigate(fm: FragmentManager): Int? {
    return fm.run {
        beginTransaction()
            .replace(
                R.id.my_container,
                this@navigate,
                this@navigate::class.simpleName
            )
            .commit() 
    }
}

然后:

TestThreeFragment
    .newInstance()
    .navigate(getParentFragmentManager())