過去 Android 要在 Activity、Fragment 跟 xml 互動的時候,會採用 findViewById()
,而且在 xml 上的每個 View 都得加上 id,如果有大量的 View 需要做變化的話就得每個都命名然後再綁定,非常麻煩。
Data binding Library 是一個 Support Library,可以幫助我們簡易實現 MVVM 架構。它允許我們在 xml 上使用聲明性格式而不是撰寫程式的方式將佈局中的 UI 組件綁定到應用城市中的資料來源。
首先添加 gradle
android{
......
dataBinding{
enabled = true
}
}
在來要調整需要執行 Data Binding 的 xml,在外層加上 <layout>
與綁定 data 來源,就可以在指定 UI 使用這個 data。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.test.ViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.userId}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
要記得在 Activity / Fragment 綁定 View 跟 ViewModel。
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
val viewModel = MainViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.viewModel = viewModel
}
}