Замена LiveData при изменении текста в SearchView - PullRequest
0 голосов
/ 08 апреля 2019

Сначала приложение должно показывать изображения кошек, извлеченные из базы данных комнат.(Это работает)

После того, как пользователь изменит поисковый термин, используя вид поиска, действие должно удалить все изображения кошек и заменить их изображениями, связанными с новым поисковым термином.(Невозможно сделать это)

Пожалуйста, проверьте код ниже

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, но не могу заставить их работать с пейджингом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...