Transformations.distinctUntilChanged无法按预期工作?

问题描述 投票:-1回答:1

我在不同的片段中有相同视图模型的多个实例(作用于片段)。每当我在Room中更新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
            }
        });
 }

我尝试从Room提取Livedata-Integer,然后在viewmodel中应用Transformations.distinctUntilChanged(),它按预期工作,仅触发了一个已更改的对象。所以我想知道是否有可能做到这一点,以及为什么观测值甚至通过转换也会触发。

java android viewmodel android-room android-livedata
1个回答
0
投票

问题是我没有在Entity.class中重写equals方法。因此它将返回全新的对象,并且Transformation.distinctUntilChanged将触发。

© www.soinside.com 2019 - 2024. All rights reserved.