当观察到的对象发生变化时,视图层中的不必要操作

时间:2018-09-16 14:47:09

标签: android android-architecture-components

假设您通过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一样。

这不是不好的做法,浪费资源吗?在这种情况下该怎么办?

1 个答案:

答案 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);
   }

}