![](/img/trans.png)
[英]Android MVVM 2 ViewModels Sharing 1 Repository with LiveData
[英]Android ViewModels: Should dataclasses expose livedata properties?
鉴于这种情况:
Model
data class User(var id: int, var name: String)
查看 Model
val Users: LiveData<List<User>>
val SelectedUser: LiveData<User>
fun changeSelectedUserName(){SelectedUser.Name = "foo"}
用户界面
<android:TextView Text="@{viewmodel.SelectedUser.name}"/>
<android:Button Text="Change!" onClik="@{() -> viewmodel.changeSelectedUserName()}"/>
当用户单击“更改”时。 按钮 textview 不会更改,因为“名称”字段不是 LiveData。
问题
您的问题是您正在直接修改User
object 属性,而不是更新 LiveData。
为此,您必须执行以下操作之一:
使User
扩展BaseObservable
,并在name
属性更改时调用notifyPropertyChanged(BR.name)
,并删除LiveData<User>
。
使User
扩展BaseObservable
,并将@Bindable
注释放在属性 getter 上,并删除LiveData<User>
。
使User
属性为val
,并进行修改,使用更改的属性创建一个新的User
实例,并将其设置为MutableLiveData<User>
的值。
完全抛弃SelectedUser
,并将其替换为两个ObservableField
,一个用于selectedId: ObservableInt
,一个用于selectedName: ObservableField<String>
。 现在您可以就地修改这些值,还可以通过数据绑定创建针对它的绑定。
删除数据绑定并改用视图绑定,现在您不必担心通知数据绑定框架属性更改。
数据 class 是否也应该将其字段重新公开为 LiveData?
不
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.