View Binding
之前我們與視圖交互的方式有findViewById、kotlin中引入Android Kotlin Extensions後直接通過id進行訪問
現在有了新的選擇–View Binding。
在模塊中啓用視圖綁定之後,系統會爲該模塊中的每個 XML 佈局文件生成一個綁定類。綁定類的實例包含對在相應佈局中具有 ID 的所有視圖的直接引用。
打開配置
View Binding可按模塊啓用。要在某個模塊中啓用,在該模塊的build.gradle中添加如下配置:
android {
...
viewBinding {
enabled = true
}
...
}
重新編譯後系統會爲每個佈局文件生成對應的Binding類,該類中包含對應佈局中具有 ID 的所有視圖的直接引用。生成類的目錄在 模塊根目錄/build/generated/data_binding_base_class_source_out下。
使用實例
activity_main.xml:
<LinearLayout ... >
<TextView android:id="@+id/tvName" />
<TextView android:text="no id"/>
<Button android:id="@+id/btnOpen"/>
</LinearLayout>
綁定類的類名是xml的名稱後面加“Binding”。
最後生成的綁定類類名是ActivityMainBinding。
這個類有兩個成員變量tvName和btnOpen,還包含一個getRoot()方法,返回根視圖,此例中返回LinearLayout。
要獲取綁定類的實例,可以通過靜態 inflate() 方法。
private lateinit var binding: ActivityMainBinding
@Override
fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(inflater)
setContentView(binding.root)
}
然後就可以操作某些控件了:
binding.tvName = "name"
binding.btnOpen.setOnClickListener{
Log.d(TAG,"btnOpen click")
}