Сначала приложение должно показывать изображения кошек, извлеченные из базы данных комнат.(Это работает)
После того, как пользователь изменит поисковый термин, используя вид поиска, действие должно удалить все изображения кошек и заменить их изображениями, связанными с новым поисковым термином.(Невозможно сделать это)
Пожалуйста, проверьте код ниже
ViewModel
public class DatabaseViewModel extends AndroidViewModel {
LiveData<PagedList<OBJ_DB>> itemPagedList;
MutableLiveData<PagedList<OBJ_DB>> mutableLiveData;
private static final String TAG = "MST_DatabaseViewModel";
Context context;
public DatabaseViewModel(@NonNull final Application application, final String search_item) {
super(application);
Log.i(TAG, "08-04-2019: (DatabaseViewModel) Search Term: " + search_item);
context = application.getApplicationContext();
final PagedList.Config pagedListConfig=(
new PagedList.Config.Builder())
.setEnablePlaceholders(true)
.setPrefetchDistance(10)
.setPageSize(PAGE_SIZE)
.build();
final Database_Dao dao = Database_DB.getInstance(application).databaseDao();
itemPagedList = new LivePagedListBuilder<>(
dao.getAllPaged(search_item), pagedListConfig)
.setBoundaryCallback(new PagedList.BoundaryCallback<OBJ_DB>() {
@Override
public void onZeroItemsLoaded() {
super.onZeroItemsLoaded();
Log.i(TAG, "08-04-2019: Zero Items");
if (get_boolean(context, BOOLEAN_NO_MORE_IMAGES, false)) {
return;
}
addNewImagesFromFlickr(
application.getApplicationContext(), 1);
}
@Override
public void onItemAtFrontLoaded(@NonNull OBJ_DB itemAtFront) {
super.onItemAtFrontLoaded(itemAtFront);
Log.i(TAG, "08-04-2019: onItemAtFrontLoaded");
}
@Override
public void onItemAtEndLoaded(@NonNull OBJ_DB itemAtEnd) {
super.onItemAtEndLoaded(itemAtEnd);
if (get_boolean(context, BOOLEAN_NO_MORE_IMAGES, false)) {
return;
}
new functions.BoundaryReachedAddImages (
context, dao, search_item).execute();
Log.i(TAG, "08-04-2019: onItemAtEndLoaded");
}
})
.build();
}
}
Активность (только соответствующая часть)
databaseViewModel = ViewModelProviders
.of(this,
new MyViewModelFactory(
this.getApplication(),
getSearchTerm(getApplicationContext())
)
)
.get(DatabaseViewModel.class);
databaseViewModel.itemPagedList.observe(this, new Observer<PagedList<OBJ_DB>>() {
@Override
public void onChanged(PagedList<OBJ_DB> photos) {
adapter.submitList(photos);
}
});
MyViewModelFactory
public class MyViewModelFactory implements ViewModelProvider.Factory {
private Application mApplication;
private String search_item;
public MyViewModelFactory(Application application, String search_item) {
mApplication = application;
this.search_item = search_item;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
return (T) new DatabaseViewModel(mApplication, search_item);
}
}
Я могу отправить поисковый запрос, используя общие настройки, но как я могу заставитьLiveData для перезагрузки?Я читал о Map And SwicthMap, но не могу заставить их работать с пейджингом.