android - BaseActivity 作为 DataBinding 的生命周期所有者
问题描述
我的项目结构有一个 BaseActivity 由多个子活动扩展,所以结构就像
BaseActivity
^
|
-------------------------------
| | |
ChildActivityA ChildActivityB ChildActivityC
我正在使用DataBinding
with 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
解决方案
this@ChildActivityA
并this@BaseActivity
引用内存中的同一个实际对象 - 只有一个活动对象存在。因此它们是完全等价的。
推荐阅读
- react-native - 操作必须是使用异步函数注销的普通对象
- swiftui - 如何水平对齐两个文本视图,以便前缘和后缘在中间相遇?
- c# - Mobile Blazor 绑定 iOS 不显示 Azure AD B2C 登录
- javascript - 如何通过他们的ID减去两个div?
- jquery - 在ajax提交之前,表单验证不适用于jquery步骤
- python - Python , pyinstaller 与 matplotlib 和 numpy
- sql - MariaDB/SQL:如何在所有表中查找系统 ID 列等于指定值的行?
- java - 如何在运行时覆盖特定模块的 Maven 属性?
- amazon-web-services - AWS lambda:防止通过 S3:TestEvent 调用表单
- javascript - 有没有其他人在他们的“ServiceArea”实体上使用邮政编码来进行食品订购谷歌操作并能够使它们工作?