为什么 android:text 不显示最新的 LiveData 值?

Why doesn't android:text display latest LiveData value?

以下代码基于project.

我修改了一些代码。

android:text="@{viewmodel.name}"显示nameLiveData值。

fun onLike() 将更改 nameLiveData 值。

我想 android:text="@{viewmodel.name}" 在我点击按钮 (android:id="@+id/like_button") 后会显示最新值“My new”。

但实际上android:text="@{viewmodel.name}"一直显示“Ada”,为什么?

SimpleViewModelSolution.kt

class SimpleViewModelSolution : ViewModel() {
    private var _name = MutableLiveData("Ada")     // I modified from private val _name = MutableLiveData("Ada")
   
    val name: LiveData<String> = _name
  
     ...

    fun onLike() {
        _likes.value = (_likes.value ?: 0) + 1
        _name = MutableLiveData("My new")  // I added
    }
}

solution.xml

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewmodel"
            type="com.example.android.databinding.basicsample.data.SimpleViewModelSolution"/>
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    
        <TextView
            android:id="@+id/name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"            
            android:text="@{viewmodel.name}"
           ..."/>

        <Button
            android:id="@+id/like_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="8dp"
            android:onClick="@{() -> viewmodel.onLike()}"
            android:text="@string/like"
           .../>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

将您的 onLike() 更改为:

fun onLike() {
    _likes.value = (_likes.value ?: 0) + 1
    _name.value = "My new"
}

此外,您可以将 _name 声明为 val 而不是 var