You can solve this with a MediatorLiveData.
Specifically Transformations.switchMap
.
// original code, improved later
public void reloadTasks() {
if(liveResults != null) {
liveResults.removeObserver(this);
}
liveResults = getFilteredResults();
liveResults.observeForever(this);
}
But if you think about it, you should be able to solve this without use of observeForever
, especially if we consider that switchMap
is also doing something similar.
So what we need is a LiveData<SelectedOption>
that is switch-mapped to the LiveData<PagedList<T>>
that we need.
private final MutableLiveData<String> filterText = savedStateHandle.getLiveData("filterText")
private final LiveData<List<T>> data;
public MyViewModel() {
data = Transformations.switchMap(
filterText,
(input) -> {
if(input == null || input.equals("")) {
return repository.getData();
} else {
return repository.getFilteredData(input); }
}
});
}
public LiveData<List<T>> getData() {
return data;
}
This way the actual changes from one to another are handled by a MediatorLiveData.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…