Вывод разных списков из базы данных
В репозитории переменной типа 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"));