Transformations.distinctUntilChanged не работает, как задумано? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть несколько экземпляров одной и той же модели представления в разных фрагментах (в пределах фрагментов). Всякий раз, когда я обновляю LiveData в комнате, он запускает наблюдаемый фрагмент, но он не запускает один экземпляр, который должен, но все экземпляры (даже если значения в других совпадают). Я думал о решении как Transformations.distinctUntilChanged, но оно не работает. Мой код:

@Dao
public interface PlayerDao {
  @Query("SELECT * from player_table WHERE id_playera=:id")
  LiveData<PlayerEntity> getPlayer(final int id);
 }

public class PlayerRepository {
  public LiveData<PlayerEntity> getPlayer(final int id) {
        return playerDao.getPlayer(id);
    }
 }

public class PlayerViewModel extends AndroidViewModel {
  public LiveData<PlayerEntity> getPlayer(final int id) {
        return Transformations.distinctUntilChanged(repository.getPlayer(id));
    }
 }

 @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        playerViewModel = new ViewModelProvider(this).get(PlayerViewModel.class);
        playerViewModel.getPlayer(redniBrojPlayera).observe(getViewLifecycleOwner(),
        newObserver<PlayerEntity>() {
            @Override
            public void onChanged(PlayerEntity playerEntity) {
                //triggers UI
            }
        });
 }

Я попытался извлечь Livedata-Integer из комнаты и затем применить Transformations.distinctUntilChanged () в viewmodel, и это работало, как предполагалось, только вызывая тот, который изменился. Поэтому мне интересно, возможно ли это сделать, и почему наблюдаемые события запускаются даже при преобразованиях.

1 Ответ

0 голосов
/ 02 апреля 2020

Проблема была в том, что я не переопределил метод equals в моем Entity.class. Поэтому он вернет совершенно новый объект, и Transformation.distinctUntilChanged сработает.

...