我可以在Fragments构造函数中放入参数吗
所以我有一个这样的片段:
class MyFragment(val thing: SomeDataObject) : Fragment {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// do stuff using `thing`
}
}
我像这样创建并附加它:
val myFragment = MyFragment(SomeDataObject())
supportFragmentManager.beginTransaction()
.replace(R.id.contentFrame, myFragment)
.commit()
我将变量thing作为参数的地方 - 这似乎有效,但是我读到的关于将参数传递给片段的所有内容都说通过arguments在片段实例上创建包和设置来实现。
以我上面定义的方式做这件事有什么问题吗,或者使用捆绑包有什么好处?
只是好奇为什么其他地方都建议使用看似过于复杂的方式来传递参数......
回答
片段需要有一个 0-arg 构造函数,以便框架可以为您重新创建它们,例如在配置更改后。如果缺少 0-arg 构造函数,您将崩溃。如果您同时拥有 0-arg 和 >0-arg 构造函数,则在调用 0-arg 构造函数时,在 >0-arg 中完成的任何初始化都将丢失。