DataBinding与LiveData双向绑定,自动刷新XML
DataBinding与LiveData双向绑定
依赖库:
implementation androidx.core:core-ktx:1.3.2
    implementation androidx.appcompat:appcompat:1.2.0
    implementation com.google.android.material:material:1.3.0
    implementation androidx.constraintlayout:constraintlayout:2.0.4
    implementation androidx.databinding:databinding-runtime:4.1.3 
MainActivity:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.kedacom.test.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding
    lateinit var nViewModel: MainViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.lifecycleOwner = this //关键代码
        binding.mainActivity = this
        nViewModel = ViewModelProvider(
            this,
            ViewModelProvider.NewInstanceFactory()
        ).get(MainViewModel::class.java)
        nViewModel.nameData.value = "Test111"
        binding.viewModel = nViewModel
    }
    fun onButtonClick() {
        nViewModel.nameData.value = "Test222"
    }
} 
MainViewModel:
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel() {
    var nameData: MutableLiveData<String> = MutableLiveData()
} 
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <data>
        <variable
            name="MainActivity"
            type="com.kedacom.test.MainActivity" />
        <variable
            name="viewModel"
            type="com.kedacom.test.MainViewModel" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical">
        <Button
            android:id="@+id/button"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:onClick="@{()->MainActivity.onButtonClick()}"
            android:text="@{viewModel.nameData}" />
    </LinearLayout>
</layout>
				       
			          
