BaseActivity作为数据绑定的生命周期所有者

时间:2020-04-28 05:49:51

标签: android android-databinding android-lifecycle

我的项目结构具有一个BaseActivity,它可以通过多个子活动扩展,因此结构类似于

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

我将DataBindingLiveData一起使用,因此每次我需要为各自的绑定类(即,在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的生命周期?

1 个答案:

答案 0 :(得分:1)

this@ChildActivityAthis@BaseActivity指的是内存中的同一实际对象-仅存在一个活动对象。因此它们是完全等效的。