我创建了此扩展功能,用于在片段之间导航,这很简单,但是不起作用。它什么也没做,当我单击按钮时什么也没有改变。我认为问题出在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()
}
}
答案 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())