当前位置: 代码迷 >> Android >> 当观察到的对象发生变化时,视图层中的不必要操作
  详细解决方案

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

热度:24   发布时间:2023-08-04 12:29:58.0

假设您通过viewmodel和可观察的livedata监听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一样。

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

一种可能的解决方案是通过使数据对象扩展或使其对应数据类型的字段来使用数据绑定来绑定您的User对象。

您仍然可以将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);
   }

}
  相关解决方案