`DataBindingUtil` 中的 `bind`、`inflate` 和 `setContentView` 有什么区别

Awa*_*ain 7 android kotlin android-databinding android-jetpack

我已经看到DataBindingUtil所有三种方法都使用过,并且从文档(https://developer.android.com/reference/android/databinding/DataBindingUtil)中不清楚这三种方法之间的区别是什么。

Eug*_*nec 13

bind获取一个已经膨胀的视图层次结构并ViewDataBinding为其返回一个。

inflate获取布局资源 ID,从中扩展视图层次结构并为其返回一个ViewDataBinding。它基本上等于

val layoutInflater = LayoutInflater.from(context)
val view = layoutInflater.inflate(R.layout.some_layout, ...)
val binding = DataBindingUtil.bind<SomeLayoutBinding>(view)
Run Code Online (Sandbox Code Playgroud)

setContentView获取布局资源 ID,从中扩充视图层次结构,将其设置为活动内容,ViewDataBinding为扩充后的视图层次结构返回 a 。它基本上等于

setContentView(R.layout.some_layout)
val view = findViewById<View>(android.R.id.content)
val binding = DataBindingUtil.bind<SomeLayoutBinding>(view)
Run Code Online (Sandbox Code Playgroud)


小智 5

一般setContentView ()会在activity中显示

但片段有一个名为 onCreateView 的生命周期方法,它返回一个视图。最常见的方法是在 XML 中扩充视图并返回它(正如您在片段的 java 代码中看到的那样)。在这种情况下,您需要自己充气。Fragment 没有 setContentView 方法。所以膨胀用于碎片

绑定只是将视图绑定到布局。