Transformations.distinctUntilChanged 没有按预期工作?
Transformations.distinctUntilChanged not working as intended?
我在不同片段(范围为片段)中有多个相同视图模型的实例。每当我更新 Room 中的 LiveData 时,它都会触发片段中的 observable 但它不会触发应该触发的一个实例,而是触发所有实例(即使其他实例中的值相同)。我想到了 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(),它按预期工作,只触发了一个发生变化的数据。所以我想知道是否有可能做到这一点,为什么 observables 即使通过转换也会触发。
问题是我没有在 Entity.class 中覆盖 equals 方法。因此它会 return 全新的对象并且 Transformation.distinctUntilChanged 会触发。
我在不同片段(范围为片段)中有多个相同视图模型的实例。每当我更新 Room 中的 LiveData 时,它都会触发片段中的 observable 但它不会触发应该触发的一个实例,而是触发所有实例(即使其他实例中的值相同)。我想到了 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(),它按预期工作,只触发了一个发生变化的数据。所以我想知道是否有可能做到这一点,为什么 observables 即使通过转换也会触发。
问题是我没有在 Entity.class 中覆盖 equals 方法。因此它会 return 全新的对象并且 Transformation.distinctUntilChanged 会触发。