I am using the Android Paging Library like described here: https://developer.android.com/topic/libraries/architecture/paging.html
But i also have an EditText for searching Users by Name.
How can i filter the results from the Paging library to display only matching Users?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With