Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paging Library Filter/Search

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?

like image 666
user3292244 Avatar asked Mar 09 '18 11:03

user3292244


1 Answers

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.

like image 108
EpicPandaForce Avatar answered Oct 03 '22 12:10

EpicPandaForce