Я создаю приложение, которое должно обновлять текущий список.Реализация выполняется с использованием room и livingata, я использую шаблон mvp без viewmodel.Мой вопрос заключается в том, что если у меня есть запрос, который возвращает все элементы в выбранной категории, и у меня есть наблюдаемая, уже существующая в данных, могу ли я изменить функцию dao с другими параметрами запроса и соответствующим образом обновить список.Самая близкая вещь, которую я нашел, это: Android Room LiveData select параметры запроса
, но, поскольку я относительно новичок в разработке и в настоящее время изучаю реактивную парадигму в Android, это имеетоказалось довольно сложной задачей.
в докладчике
override var itemsList: LiveData<List<Item>?> =
itemDao.getItemsForCategory(1)
в основной деятельности
presenter.itemsList.observe(this, Observer {
if (it != null) {
itemAdapter.setTodoItems(it)
itemListHolder.adapter =itemAdapter
}
})
в дао
@Query("SELECT * FROM Item")
fun getItemsFromDatabase(): LiveData<List<Item>?>
@Query("SELECT * FROM Item WHERE category_id == :category_id ORDER BY
creationTime ASC")
fun getItemsForCategory(category_id: Long): LiveData<List<Item>?>
РЕДАКТИРОВАТЬ (решение)
решение было mutableLiveData, в котором значение изменяет параметры запроса:
override var itemsList: LiveData<List<IItem>?> = Transformations.switchMap(mutableLiveData) {
itemDao.getItemsForCategory(mutableLiveData.value!!.toLong())
}
override fun onItemsCalled(categoryId: Long) {
when (mutableLiveData.value) {
1 -> mutableLiveData.value = 2
2 -> mutableLiveData.value = 3
3 -> mutableLiveData.value = 4
4 -> mutableLiveData.value = 1
}
}
это просто запрос для той же категории, но с другой обработкой все возможно.