跳转至

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 。

你可以通过修改 SenderFragmentsetVmBySelf 返回值来查看 ReceiverFragment 是否会接收到数据更新。

override fun setVmBySelf(): Boolean = false

默认日志标志

你可以通过 getDefaultTag 返回值作为日志的默认 TAG,是 Fragment 的类名。

Log.i(getDefaultTag(), "这是一个日志。")

获取视图绑定对象

通过 getBinding() 你可以获取对应的视图绑定对象。

getBinding().view

关于生命周期的说明

你不应该在 onDestroyView 之后再调用 getBinding() 方法,因为这会导致空异常。

示例代码

查看示例代码