BaseActivity 作为数据绑定的生命周期所有者
BaseActivity as Lifecycle Owner for DataBinding
我的项目结构有一个由多个子活动扩展的 BaseActivity,所以结构是这样的
BaseActivity
^
|
-------------------------------
| | |
ChildActivityA ChildActivityB ChildActivityC
我将 DataBinding
与 LiveData
一起使用,因此每次我需要为相应的绑定 class 设置 lifecycleOwner
即(在 ChildActivityA 中)
val binding = DataBindingUtil.setContentView(R.layout.somelayout)
binding.lifecycleOwner = this@ChildActivityA
现在我需要在每个 Activity
中重复这个样板文件,所以我创建了一个辅助扩展函数来替换上面的两行,即
fun <T : ViewDataBinding> BaseActivity.setDataBindingView(layoutId: Int): T {
val binding = DataBindingUtil.setContentView(this, layoutId)
binding.lifecycleOwner = this@BaseActivity
}
然后调用我的 ChildActivityA
作为
val binding = setDataBindingView(R.layout.someLayout)
如您所见,binding.lifecycleOwner
设置为 BaseActivity
而不是实际的 ChildActivityA
,现在这会造成任何麻烦吗? binding.lifecycleOwner
是否仍遵循 ChildActivityA
的生命周期?
this@ChildActivityA
和 this@BaseActivity
指的是内存中的同一个实际对象 - 只有一个 activity 对象存在。因此它们是完全等价的。
我的项目结构有一个由多个子活动扩展的 BaseActivity,所以结构是这样的
BaseActivity
^
|
-------------------------------
| | |
ChildActivityA ChildActivityB ChildActivityC
我将 DataBinding
与 LiveData
一起使用,因此每次我需要为相应的绑定 class 设置 lifecycleOwner
即(在 ChildActivityA 中)
val binding = DataBindingUtil.setContentView(R.layout.somelayout)
binding.lifecycleOwner = this@ChildActivityA
现在我需要在每个 Activity
中重复这个样板文件,所以我创建了一个辅助扩展函数来替换上面的两行,即
fun <T : ViewDataBinding> BaseActivity.setDataBindingView(layoutId: Int): T {
val binding = DataBindingUtil.setContentView(this, layoutId)
binding.lifecycleOwner = this@BaseActivity
}
然后调用我的 ChildActivityA
作为
val binding = setDataBindingView(R.layout.someLayout)
如您所见,binding.lifecycleOwner
设置为 BaseActivity
而不是实际的 ChildActivityA
,现在这会造成任何麻烦吗? binding.lifecycleOwner
是否仍遵循 ChildActivityA
的生命周期?
this@ChildActivityA
和 this@BaseActivity
指的是内存中的同一个实际对象 - 只有一个 activity 对象存在。因此它们是完全等价的。