为什么 android:text 不显示最新的 LiveData 值?
Why doesn't android:text display latest LiveData value?
以下代码基于project.
我修改了一些代码。
android:text="@{viewmodel.name}"
显示name
的LiveData
值。
fun onLike()
将更改 name
的 LiveData
值。
我想 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
以下代码基于project.
我修改了一些代码。
android:text="@{viewmodel.name}"
显示name
的LiveData
值。
fun onLike()
将更改 name
的 LiveData
值。
我想 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