У меня есть приложение, которое извлекает список 158 элементов из API, сохраняет его в Room и отображает его пользователю. RoomDB - это источник правды.
Это код моей модели ViewModel, который получает результат из базы данных:
private val pagingConfig =
PagingConfig(pageSize = 20, enablePlaceholders = false, maxSize = 300)
fun getList(filters: Filters): Flow<PagingData<Character>> {
return Pager(pagingConfig) {
repository.getCharacters(filters)
}.flow.map {
it.asDomainModel()
}
}
Это код моего фрагмента, который заполняет адаптер:
private fun fetchData(filters: Filters) {
lifecycleScope.launch {
charactersViewModel.getList(filters).collectLatest { pagedList ->
characterAdapter.submitData(pagedList)
}
}
}
Текущее поведение:
- Когда изменение конфигурации происходит после моего 60-го элемента, позиция прокрутки теряется, я обнаружил, что увеличение pageSize в моем pagingConfig с 20 strong > до 55, устраняет эту проблему.
Что я уже пробовал:
Поскольку я получаю данные асинхронно, я попытался использовать этот фрагмент кода из этого статья, чтобы предотвратить загрузку данных при пустом адаптере. но это не сработало
characterAdapter.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
Чего я ожидаю достичь:
Уметь прокручивать список до конца и вносить изменения в конфигурацию без потери позиции прокрутки без необходимости увеличивать мой pageSize по мере увеличения списка