Вывод разных списков из базы данных

В репозитории переменной типа LiveData изначально присвоен запрос из БД (записи идут в алфавитном порядке). Как после запуска приложения и, например, нажатия на кнопку отсортировать список по другим параметрам и вывести на экран? Я пробовал переприсваивать переменной другой запрос, но ничего не менялось, также пробовал менять типы на MutableLiveData, но понял, что Dao не поддерживает MutableLiveData и если вызывать метод value у запроса из Dao с типом LiveData, то приложение не запустится. Заранее спасибо за ответ.


Ответы (1 шт):

Автор решения: Спицко Дмитрий

Вариант первый, и, на мой взгляд, правильный. Оторвать представление от модели. Подписчик получает данные и отдает их адаптеру RecyclerView. У этого же адаптера создаем параметры отображения, которые сортируют данные внутри адаптера как вам надо. При выборе пользователем другого вида сортировки меняются параметры адаптера, но не меняется подписчик и обсервбл.

Вариант второй, генерируем в рантайме запросы

 @Dao
 interface Dao {
     @RawQuery(observedEntities = MyEntry.class)
     LiveData<List<MyEntry>> getEntries(SupportSQLiteQuery query);
 }


LiveData<List<User>> liveUsers = rawDao.getUsers(new SimpleSQLiteQuery("SELECT * FROM MyEntry ORDER BY name DESC"));
→ Ссылка