Using LiveData ViewModel in xml

This is my note for Udemy lesson: Advanced Android Bootcamp 2024.

1. Set up Data Binding

See this note

2. Set up ViewModel

See this note

3. Edit ViewModel

class MainActivityViewModel: ViewModel() {
  private val _count = MutableLiveData(0)
  val count: LiveData<Int> get() = _count
  fun add() {
    _count.value = _count.value?.plus(1)
  }
}

4. Edit activity_main.xml

<layout ...>
  <data>
    <variable name="viewModel" type="com.xxx.xxx.MainActivityViewModel" />
  </data>
  <androidx.constraintlayout.widget.ConstraintLayout ...>
    ...
    <TextView
      ...
      android:text-"@{viewModel.count.toString()}" />

    <Button
      ...
      android:onClick="@{() -> viewModel.add()}" />
    ...
  </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

5. In MainActivity, Pass the ViewModel to xml

override fun onCreate(savedInstanceState: Bundle?) {
  ...
  binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  viewModel = ViewModelProvider(this)[MainActivityViewModel::class.java]
  binding.viewModel = viewModel
  binding.lifecycleOwner = this
}