【发布时间】:2020-10-13 10:01:39
【问题描述】:
我已经看到DataBindingUtil 与所有三种方法一起使用,但从文档 (https://developer.android.com/reference/android/databinding/DataBindingUtil) 中并不清楚这三种方法有什么区别。
【问题讨论】:
标签: android kotlin android-databinding android-jetpack
我已经看到DataBindingUtil 与所有三种方法一起使用,但从文档 (https://developer.android.com/reference/android/databinding/DataBindingUtil) 中并不清楚这三种方法有什么区别。
【问题讨论】:
标签: android kotlin android-databinding android-jetpack
bind 采用已经膨胀的视图层次结构并为其返回 ViewDataBinding。
inflate 获取布局资源 ID,从中扩展视图层次结构,并为其返回 ViewDataBinding。它本质上等于
val layoutInflater = LayoutInflater.from(context)
val view = layoutInflater.inflate(R.layout.some_layout, ...)
val binding = DataBindingUtil.bind<SomeLayoutBinding>(view)
setContentView 获取布局资源 ID,从中扩展视图层次结构,将其设置为活动内容,并为扩展的视图层次结构返回 ViewDataBinding。它本质上等于
setContentView(R.layout.some_layout)
val view = findViewById<View>(android.R.id.content)
val binding = DataBindingUtil.bind<SomeLayoutBinding>(view)
【讨论】:
LayoutInflater.inflate + SomeLayoutBinding.bind = SomeLayoutBinding.inflate。这取决于您的意思是inflate。
SomeLayoutBinding.inflate并致电SomeLayoutBinding.bind
一般setContentView()会显示在activity中。
但是片段有一个名为 onCreateView 的生命周期方法,它返回一个视图。最常见的方法是在 XML 中扩展视图并返回它(正如您在片段的 java 代码中看到的那样)。在这种情况下,您需要自己充气。片段没有 setContentView 方法。所以 inflate 用于 fragments。
绑定只是将视图绑定到布局。
【讨论】: