PagedList и изменить элементы индивидуально - PullRequest
0 голосов
/ 28 октября 2019

У меня есть база данных комнат, состоящая из мест. У пользователя может быть сохранено неограниченное количество мест (например, у меня около 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()
        }
...