要实现Android Jetpack Paging多个子RecyclerView,可以使用以下步骤:
implementation 'androidx.paging:paging-runtime:3.0.1'
class MyPagingSource(private val apiService: ApiService) : PagingSource() {
override suspend fun load(params: LoadParams): LoadResult {
try {
val page = params.key ?: 1
val response = apiService.getData(page)
val data = response.items
val prevKey = if (page > 1) page - 1 else null
val nextKey = if (data.isNotEmpty()) page + 1 else null
return LoadResult.Page(data, prevKey, nextKey)
} catch (e: Exception) {
return LoadResult.Error(e)
}
}
}
class MyPagingAdapter : PagingDataAdapter- (ItemComparator()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ItemLayoutBinding.inflate(inflater, parent, false)
return ItemViewHolder(binding)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = getItem(position)
if (item != null) {
(holder as ItemViewHolder).bind(item)
}
}
class ItemViewHolder(private val binding: ItemLayoutBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: Item) {
binding.item = item
binding.executePendingBindings()
}
}
class ItemComparator : DiffUtil.ItemCallback
- () {
override fun areItemsTheSame(oldItem: Item, newItem: Item): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Item, newItem: Item): Boolean {
return oldItem == newItem
}
}
}
val pagingAdapter1 = MyPagingAdapter()
val recyclerView1 = findViewById(R.id.recyclerView1)
recyclerView1.adapter = pagingAdapter1
val pagingAdapter2 = MyPagingAdapter()
val recyclerView2 = findViewById(R.id.recyclerView2)
recyclerView2.adapter = pagingAdapter2
val pagingData1: Flow> = Pager(PagingConfig(pageSize = 20)) {
MyPagingSource(apiService)
}.flow.cachedIn(lifecycleScope)
val pagingData2: Flow> = Pager(PagingConfig(pageSize = 20)) {
MyPagingSource(apiService)
}.flow.cachedIn(lifecycleScope)
pagingData1.observe(this) { pagingData ->
pagingAdapter1.submitData(lifecycle, pagingData)
}
pagingData2.observe(this) { pagingData ->
pagingAdapter2.submitData(lifecycle, pagingData)
}
注意,上述代码中的apiService是一个用于从数据源获取数据的服务类,你需要根据你的项目实际情况进行替换。
通过以上步骤,你就可以在一个Activity或Fragment中实现多个子RecyclerView,并使用Android Jetpack Paging库进行分页加载数据。