我有一个LiveData依赖于另一个的对象LiveData。据我了解,Transformations.switchMap应该允许链接它们。但是switchMap处理程序仅触发一次,并且不会对进一步的更新做出反应。相反,如果我observe在第一个对象上使用,当它准备好时,检索第二个,它工作正常,但在这种情况下,我必须在Activity而不是ViewModel. 是否可以链接LiveData对象,例如Transformations.switchMap,但接收所有更新,而不仅仅是第一个?
这是一个尝试使用switchMap:
LiveData<Resource<User>> userLiveData = usersRepository.get();
return Transformations.switchMap(userLiveData, resource -> {
if (resource.status == Status.SUCCESS && resource.data != null) {
return apiService.cartItems("Bearer " + resource.data.token);
} else {
return AbsentLiveData.create();
}
});
这是一种observe活动中的方法(有效,但需要保持活动中的逻辑):
viewModel.user().observe(this, x -> {
if (x != null && x.data != null) {
viewModel.items(x.data.token).observe(this, result -> {
// use result
});
}
});