假设您通过viewmodel和可观察的实时数据监听User对象的更改,如下所示:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
viewModel.getUser().observe(this, user -> {
// Update UI :
// Update userNameTextView
// Load profile image to imageView
// Update follower count
});
}
根据观察到的用户更改,可以更新视图。对象的实际更改可能只是关注者数量,但是您的行为就像整个用户对象都已更改,例如:将相同的图像设置为imageview一样。
这不是不好的做法,浪费资源吗?在这种情况下该怎么办?
答案 0 :(得分:0)
一种可能的解决方案是使用数据绑定来绑定您的User
对象,方法是使其扩展BaseObservable或使其对应数据类型的字段ObservableField s。
您仍然可以将LiveData
用作View和ViewModel之间的数据容器/通道,以重新绑定整个User
对象。
然后要进行部分更新,可以在更改的字段上notifyPropertyChanged
,下面是一个示例:
private static class User extends BaseObservable {
private String firstName;
private String lastName;
@Bindable
public String getFirstName() {
return this.firstName;
}
@Bindable
public String getLastName() {
return this.lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
}