如何在 kotlin 的 Recycler View Adapter 中添加更多数据列表而不清除先前的数据?
Posted
技术标签:
【中文标题】如何在 kotlin 的 Recycler View Adapter 中添加更多数据列表而不清除先前的数据?【英文标题】:How to add more list of data without clearing the previous in Recycler View Adapter in kotlin? 【发布时间】:2021-10-23 09:10:39 【问题描述】:我正在尝试创建一个回收器视图,当用户向下滚动时加载更多数据而不删除前一个单元格。例如:(Instagram,推特...)
当我向下滚动时,新数据会在所有回收器视图单元格中获取前一个单元格和新单元格。
所以如果我有 10 个单元格,那么我向下滚动,它会得到另一个新的 10 个单元格,但是现在所有 20 个单元格都相同,并且前 10 个被替换。
主要片段
photosList.layoutManager = mLayoutManager
viewModel.refresh()
photosList.apply
layoutManager = LinearLayoutManager(context)
adapter = photosAdapter
observeViewModel()
photosList.addOnScrollListener(object : RecyclerView.OnScrollListener()
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int)
if (dy > 0) //check for scroll down
//visibleItemCount = mLayoutManager.childCount
var layoutManager = photosList.layoutManager as LinearLayoutManager
visibleItemCount =
layoutManager.findLastVisibleItemPosition() - layoutManager.findFirstVisibleItemPosition() + 1
totalItemCount = layoutManager.itemCount
pastVisibleItems = layoutManager.findFirstVisibleItemPosition()
if (loading)
if (visibleItemCount + pastVisibleItems >= totalItemCount)
loading = false
// Fetch new data
viewModel.fetchMorePhotos()
observeViewModelGetMore()
loading = true
)
视图模型
fun fetchMorePhotos()
pageNumber += 1
fetchPhotos()
private fun fetchPhotos()
loading.value = true
//loading2.value = true
disposable.add(
PhotosService.getPhotos(pageNumber)
.subscribeOn(Schedulers.newThread())
.observeOn(androidSchedulers.mainThread())
.subscribeWith(object : DisposableSingleObserver<List<PhotoData>>()
override fun onSuccess(value: List<PhotoData>?)
Photos.value = value!!
PhotoLoadError.value = false
loading.value = false
//loading2.value = false
override fun onError(e: Throwable?)
PhotoLoadError.value = true
loading.value = false
//loading2.value = false
)
)
适配器
class PhotoListAdapter(
var photos: ArrayList<PhotoData>,
private var click_listener: OnPhotoItemClickListner
) :
RecyclerView.Adapter<PhotoListAdapter.PhotoViewHolder>()
fun updatePhotos(newPhotos: List<PhotoData>)
photos.clear()
photos.addAll(newPhotos)
notifyDataSetChanged()
fun getMorePhotos(newPhotos: List<PhotoData>)
val position: Int = photos.size + 1
photos.addAll(newPhotos)
notifyItemChanged(position,newPhotos)
【问题讨论】:
【参考方案1】:无限滚动是一个复杂的话题,我不会尝试自己解决。您需要使用 Android Paging 库:
https://proandroiddev.com/infinite-scrolling-with-android-paging-library-and-flow-api-e017f47517d6
【讨论】:
以上是关于如何在 kotlin 的 Recycler View Adapter 中添加更多数据列表而不清除先前的数据?的主要内容,如果未能解决你的问题,请参考以下文章
我似乎无法将我的Kotlin Recycler多视图代码整理出来