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