Android MVVM / ViewModel для RecyclerView с бесконечной прокруткой (загрузить больше) - Как обрабатывать данные при изменении конфигурации - PullRequest
0 голосов
/ 07 сентября 2018

Итак, у меня есть RecyclerView с бесконечной прокруткой. Сначала я выполняю сетевой вызов моего API и получаю первую страницу из 20 элементов.

В моем ViewModel (код ниже) у меня есть наблюдаемая, которая запускает сетевой вызов в моем хранилище, используя номер страницы.

Таким образом, когда пользователь прокручивает страницу до конца, номер страницы увеличивается, и он запускает другой сетевой запрос.

Вот код в моем ViewModel:

private val scheduleObservable = Transformations.switchMap(scheduleParams) { params: Map<String, Any> ->
    ScheduleRepository.schedule(params["organizationId"] as String, params["page"] as Int)
}

// This is the method I call in my Fragment to fetch another page
fun fetchSchedule(organizationId: String, page: Int) {
  val params = mapOf(
      "organizationId" to organizationId,
      "page" to page
  )
  scheduleParams.value = params
}

fun scheduleObservable() : LiveData<Resource<Items>> {
    return scheduleObservable
}

В моем фрагменте я наблюдаю scheduleObservable, и когда он выдает данные, я добавляю их в адаптер моего RecyclerView:

viewModel.scheduleObservable().observe(this, Observer {
    it?.data?.let {    
        if (!isAppending) {
            adapter.replaceData(it)
        } else {
            adapter.addData(it)
        }
    }
})  

Проблема с моей текущей реализацией заключается в том, что при изменении конфигурации я перепривязываю своего наблюдателя, и наблюдаемое излучает последние извлеченные данные. В моем случае он будет выдавать только последнюю извлеченную страницу.

При возвращении после изменения конфигурации я хотел бы получить полный список элементов, выбранных к этому моменту, чтобы я мог заново заполнить адаптер этими.

Мне интересно, как лучше это решить. Должен ли я иметь две наблюдаемые? Должен ли я создать переменную списка в моем ViewModel для хранения всех выбранных элементов и использовать этот список для моего адаптера?

Я проверил компоненты android-Architecture-GitHub, но обычно это излишнее сравнение с моими потребностями (нет базы данных, нет библиотеки подкачки и т. Д.), И я заблудился, поскольку все еще пытаюсь обернуть голову вокруг компонентов архитектуры.

...