Ненужные операции в слое вида, когда наблюдаемые изменения объекта - PullRequest
0 голосов
/ 16 сентября 2018

Предположим, что вы прослушиваете изменения объекта User с помощью viewmodel и наблюдаемых виртуальных данных, как это:

@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
});
}

Когда наблюдаются изменения пользователя, вы обновляете представления.Фактическое изменение объекта - это, вероятно, просто число подписчиков, но вы действуете так, как будто весь пользовательский объект изменился. Пример: установка того же изображения для просмотра изображений.

Разве это не плохая практика и не трата ресурсов?Что делать в этом случае?

1 Ответ

0 голосов
/ 16 сентября 2018

Одним из возможных решений было бы использование привязки данных для привязки вашего 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);
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...