gpt4 book ai didi

android - 通知 ViewModel 模型更新?

转载 作者:行者123 更新时间:2023-12-03 10:54:39 25 4
gpt4 key购买 nike

我目前正在开发一个使用 Firebase 的实时数据库和数据绑定(bind)进行显示的应用程序。为了简单起见,这里有一个简单版本的问题:

给定一个模型类:

public class User {
private String name;
private Date date;

public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Date getDate() { return date; }
public void setDate(Date date) { this.date = date; }
}

以及用户的 ViewModel 类:
public class UserViewModel {
private User user;
public void setUser(User user) {
this.user = user;
}

public String getName() { return user.getName() }
public void setName(String name) { user.setName(name); }
public String getDateAsString() { // ... }
}

现在,在 Activity/fragment 中,我有一个 RecyclerView呈现用户列表。所以在适配器的 onCreateViewHolder()我使用 DataBindingUtils 为布局充气, 新建 ViewHolder和一个新的 UserViewModel访问 UI 的实例。在 onBindViewHolder() 中 UserViewModel被分配了相应的 User 实例。

到目前为止,一切都很好:给定一个用户列表,它的项目被渲染到 RecyclerView通过 UserViewModel .

对于应用程序,我还使用 Firebase 读取和写入实时数据库。所以当我现在收到一个回调时, User条目已更新,我直接修改相应实例中的信息。

所以现在问题: 我如何通知 UserViewModel数据已更改并且需要在 UI 中重新绘制相应的 View ?

我知道我需要做的一个步骤是拥有 UserViewModel延长 BaseObservable , 用 @Bindable 标记方法并将调用添加到 notifyPropertyChanged(int)在 ViewModel 的 setter 中。但这并没有解决如何通知 UserViewModel 的问题。模型数据的更新。

感谢任何帮助和示例代码!谢谢! :)

最佳答案

您不需要扩展 UserViewModelBaseObservable , 但是你可以。我将展示另一种方式来实现这一点。

就个人而言,我更喜欢创建一个 ObservableField<User>在我的UserViewModel ,创建 getter 和 setter,例如:

private final ObservableField<User> userField = new ObservableField<User>();

public UserViewModel(User user){
userField.set(user);
}

public ObservableField<User> getUser(){
return userField;
}

将其传递给布局并引用如下属性:
<variable
name="userViewModel"
type="your.package.UserViewModel" />

<EditText
android:text"@={userViewModel.user.name}" />

每当您的用户更改他的 Name在您的 EditText ,更改也会在您的模型中更新。 (对 @={} 使用双向数据绑定(bind))

更新为使用 ObservableField ,感谢您的提醒,@tynn。纠正我,如果我仍然错了。

关于android - 通知 ViewModel 模型更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40454767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com