У меня есть база данных комнат, состоящая из мест. У пользователя может быть сохранено неограниченное количество мест (например, у меня около 3K).
Я хочу представить их в RecyclerView
с использованием PagedLists
.
Однако, когда я представляю эти элементы на экране, я сопоставляю с Place
до PlaceUI
, поскольку вид может изменяться в зависимости от некоторых условий. Например, у меня есть расширяемое меню, и я бы хотел, чтобы это расширяемое меню оставалось расширенным после однократного нажатия. Это чисто пользовательский интерфейс, поэтому я не хотел бы сохранять его как часть объекта Place DB.
Итак, то, что я делал до разбивки на страницы, помещало слушателя в это меню, когда бы оно ни щелкнуло, я бы изменил объект в этом индексе, чтобы указать menuOpen = true
.
Однако, с PagedLists
я не могу этого достичь, так как мне нужно было бы передать весь новый список адаптеру.
Есть ли альтернатива для достижения такого поведения? Я видел, что в документации для PagedLists говорится, что она предназначена для неизменяемых списков, но это похоже на такой общий случай использования, что должно быть что-то для достижения такого поведения.
Некоторый код:
@Query("select * from places order by distance, placeName ASC")
abstract fun getPlaces(): DataSource.Factory<Int, Place>
private val pagedPlacesObservable = placesRepository.getPagedListPlaces()
.map {
PlaceUI.state(it)
}
.toFlowable(pageSize = 50)
private val stateAwarePlaceLiveData = pagedPlacesObservable
.toLiveData()
viewModel.stateAwarePlaceLiveData.observe(this) {
adapter.submitList(it)
places_empty_state.isVisible = it.isEmpty()
}