我有一个由地方组成的会议室数据库。用户可以保存的地点数量不受限制(例如,我大约有3K)。
我想使用RecyclerView
在PagedLists
中展示它们。
但是,当我在屏幕上显示这些项目时,我会从Place
映射到PlaceUI
,因为视图会根据某些条件而改变。例如,我有一个可扩展菜单,并且希望该可扩展菜单在单击一次后保持扩展状态。这纯粹是一个UI状态,所以我不想将其保存为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()
}