首页 > 解决方案 > BaseActivity 作为 DataBinding 的生命周期所有者

问题描述

我的项目结构有一个 BaseActivity 由多个子活动扩展,所以结构就像

                  BaseActivity
                        ^
                        | 
          -------------------------------
          |             |               |
 ChildActivityA  ChildActivityB  ChildActivityC

我正在使用DataBindingwith LiveData,因此每次我需要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的 as

val binding = setDataBindingView(R.layout.someLayout)

如您所见,binding.lifecycleOwner设置为BaseActivity而不是实际ChildActivityA,现在这会造成任何麻烦吗?是否binding.lifecycleOwner仍会遵循 的生命周期?ChildActivityA

标签: androidandroid-databindingandroid-lifecycle

解决方案


this@ChildActivityAthis@BaseActivity引用内存中的同一个实际对象 - 只有一个活动对象存在。因此它们是完全等价的。


推荐阅读