У меня есть несколько экземпляров одной и той же модели представления в разных фрагментах (в пределах фрагментов). Всякий раз, когда я обновляю 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, и это работало, как предполагалось, только вызывая тот, который изменился. Поэтому мне интересно, возможно ли это сделать, и почему наблюдаемые события запускаются даже при преобразованиях.