PagedList和分别更改项目

时间:2019-10-28 11:27:19

标签: android android-room pagedlist

我有一个由地方组成的会议室数据库。用户可以保存的地点数量不受限制(例如,我大约有3K)。

我想使用RecyclerViewPagedLists中展示它们。

但是,当我在屏幕上显示这些项目时,我会从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()
        }

0 个答案:

没有答案