我的项目结构具有一个BaseActivity,它可以通过多个子活动扩展,因此结构类似于
BaseActivity
^
|
-------------------------------
| | |
ChildActivityA ChildActivityB ChildActivityC
我将DataBinding
与LiveData
一起使用,因此每次我需要为各自的绑定类(即,在ChildActivityA中)设置lifecycleOwner
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
的生命周期?
答案 0 :(得分:1)
this@ChildActivityA
和this@BaseActivity
指的是内存中的同一实际对象-仅存在一个活动对象。因此它们是完全等效的。