ActivityMainBinding.inflate与DataBindingUtil.setContentView有什么区别?
DataBindingUtil.setContentView 相比手动 inflate 的额外优势
启用DataBinding时获取绑定对象的两种常见实现如下:
第一种:手动 inflate 方式
val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root)第二种:DataBindingUtil 方式
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
除了代码更简洁之外,DataBindingUtil.setContentView 还有以下不可替代的优势:
- 自动适配多配置场景
该方法会自动关联当前Activity的上下文配置,横竖屏切换、平板/手机适配、夜间模式切换等场景下会自动加载对应配置的布局并生成匹配的绑定对象,不需要开发者手动判断配置、选择布局文件再执行 inflate 操作。 - 嵌套布局绑定自动初始化
如果布局中使用了<include>、<merge>等嵌套标签,且子布局也启用了DataBinding,通过DataBindingUtil生成的绑定对象会自动完成子布局绑定类的实例化,你可以直接通过binding.includeId.childView调用子布局控件,不需要额外调用bind()方法手动关联子布局。 - 错误提示更精准
当布局存在DataBinding语法错误(比如表达式逻辑错误、绑定变量不存在、自定义BindingAdapter不匹配)时,DataBindingUtil初始化时抛出的异常会直接标注错误所在的布局文件位置和具体原因,比手动inflate时抛出的类型不匹配、空指针等模糊异常更容易排查。 - 自动处理绑定状态与生命周期关联
对于使用双向绑定、LiveData绑定、全局自定义BindingAdapter的场景,DataBindingUtil创建的绑定对象会自动适配全局DataBinding配置,同时在Activity重建时自动恢复绑定状态,避免出现首次渲染绑定不生效、LiveData变更不触发UI更新的问题。
内容的提问来源于stack exchange,提问作者Polymath
相关产品推荐
相关产品推荐

