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



我创建了这个扩展函数,用于在片段之间导航,它非常直接,但不知何故不起作用。当我点击按钮时,它什么也没做,什么也没改变。我认为问题出在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()
}
}

您使用的是新片段的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())

相关内容

最新更新