Fragment¶
VastFragment
是基于 Fragment 进行封装的。
快速使用¶
我们以 VastVbVmFragment
为例,向你展示了如何将其添加到你的项目当中:
class VideosFragment : VastVbVmFragment<FragmentVideosBinding, SharedVM>() {
}
当然,如果你的项目中没有采用 ViewBinding ,你可以继承 VastVmFragment
,在此情况下你需要将 layoutId
设定为对应的布局id,例如:
class SenderFragment(override val layoutId: Int = R.layout.fragment_sender) :
VastVmFragment<SharedVM>() {
}
含参数 ViewModel 的创建¶
如果 ViewModel
含有参数,你应该重写 createViewModel
方法。
class ParamVM(val param: String) : ViewModel()
class SampleVbVmFragment : VastVbVmFragment<FragmentSampleVbVmBinding, ParamVM>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
...
}
override fun createViewModel(modelClass: Class<out ViewModel>): ViewModel {
return ParamVM(defaultTag)
}
}
ViewModel Owner¶
当 setVmBySelf
为 true 时,表示 Fragment 的 ViewModel 会自行保留。当你希望 ViewModel 被其关联的 Activity 保留时,请将 setVmBySelf
设置为 false 。
你可以通过修改 SenderFragment 的 setVmBySelf
返回值来查看 ReceiverFragment 是否会接收到数据更新。
override fun setVmBySelf(): Boolean = false
默认日志标志¶
你可以通过 getDefaultTag
返回值作为日志的默认 TAG,是 Fragment
的类名。
Log.i(getDefaultTag(), "这是一个日志。")
获取视图绑定对象¶
通过 getBinding()
你可以获取对应的视图绑定对象。
getBinding().view
关于生命周期的说明
你不应该在 onDestroyView
之后再调用 getBinding()
方法,因为这会导致空异常。