Я новичок в библиотеке Paging 3 в android kotlin. Я хочу безлимитный трафик. Итак, я обнаружил, что в моем случае полезна библиотека Paging 3. Я использовал PagingSource для создания списка. Я не использую Room. У меня есть вложенный recyclerView. Я использую PagingDataAdapter с diff util для моего Recyclerview. Я использовал рекомендованный учебник для библиотеки подкачки из codelab, и мне это удалось без каких-либо проблем. Я столкнулся с трудностями при обновлении элемента. Я использовал источник подкачки для создания списка, а внутри списка у меня есть некоторые данные, которые поступают с сервера. Я полностью все это без проблем. Но как обновить адаптер или уведомить данные изменились в reyclerview. У меня уже есть механизм для получения обновленного списка. Я искал, как обновить адаптер в каком-то месте, но везде упоминается использование invalidate () из DataSource. Источник данных используется в подкачке 2, верно ?. Теперь это находится внутри Paging 3 согласно документации в Перейти на Paging 3 < / а>. Я использовал Flow для получения данных. Этот код находится внутри класса viewmodel.
fun createRepo(data: List<String>, repository: RepositoryData): Flow<PagingData<UnlimitData>> {
return repository.getStreamData(data).cachedIn(viewModelScope)
}
Я передаю список, который исходит из sever. Функция getStreamData возвращает элементы с данными типа int и string. Мои данные класс
data class UnlimitData(val id: Int, val name: String)
createRepo вызывает мой класс активности для отправки данных в adpater.
lifecycleScope.launch {
viewModel.createRepo(serverData,repository).collectLatest { data ->
adapter.submitData(data)
}
}
Это мой код адаптера: -
class unlimitedAdapter() :
PagingDataAdapter<UnlimitData, RecyclerView.ViewHolder>(COMPARATOR) {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = getItem(position)
if (item != null) {
(holder as UnlimitedViewHolder).bind(item)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return UnlimitedViewHolder.create(parent)
}
companion object {
private val COMPARATOR = object : DiffUtil.ItemCallback<UnlimitData>() {
override fun areItemsTheSame(oldItem: UnlimitData, newItem: UnlimitData): Boolean =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: UnlimitData, newItem: UnlimitData): Boolean = oldItem == newItem
}
}
}
Я добавил логику для вставки / обновления данных в список с помощью RetroFit. Мой список успешно обновлен, но я не могу обновить reyclerview.
Заранее спасибо.