跳转至

Paging3

示例:

rv = view.findViewById<RecyclerView>(R.id.rv)
config = createPaging3AdapterConfig<MediaResourceEntity>(object :
    DiffUtil.ItemCallback<MediaResourceEntity>() {
    override fun areItemsTheSame(
        oldItem: MediaResourceEntity,
        newItem: MediaResourceEntity
    ): Boolean {
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(
        oldItem: MediaResourceEntity,
        newItem: MediaResourceEntity
    ): Boolean {
        return oldItem == newItem
    }

}) {
    //与上面实例一样,在这里添加了viewholder
    addItemView(R.layout.item_1) {
        isThisType { data, position ->
            data.fileType == 2
        }
        // 。。。
    }
    //再添加一种新的viewholder
    addItemView(R.layout.item_2) {
        isThisType { data, position ->
            data.fileType != 2
        }
        // 。。。
    }
}
//完成配置
config.done(rv)

//提交、更新数据
viewLifecycleOwner.lifecycleScope.launch {
    lifecycle.repeatOnLifecycle(Lifecycle.State.CREATED) {
        viewModel.datas.collect { pagingData ->
            config.myPaging3Adapter.submitData(pagingData)
        }
    }
}

header、footer

配置header、footer header、footer可配置属性或方法有:

方法、属性 解释
属性 ---------------------------------------------------------
autoClose 如果值大于0.则在触发[LoadState.Loading]状态后,延迟[autoClose]毫秒后触发[LoadState.NotLoading]
autoLoading true时自动触发[LoadState.Loading]状态 false时需手动切换[LoadState]状态
useType 是否以loadState区分不同的viewHolder 若是使用[addItemDelegate]添加viewholder,则此处为true,[setItemDelegate]设置的单个viewholder则不修改此状态
方法 ---------------------------------------------------------
addItemDelegate 为header、footer配置多种加载状态,类似于配置多ViewHolder
setItemDelegate 为header、footer配置一种加载状态,类似于配置单种类型ViewHolder
config = createPaging3AdapterConfig<MediaResourceEntity>() {
    //配置footer
    withFooter {
        autoLoading = true
        //footer配置成一个跟loadstate没关联的itemview
        setItemDelegate(com.kiylx.recyclerviewneko.R.layout.footer_item) { header, loadstate ->
            //itemview绑定
            val m = header.getView<Button>(com.kiylx.recyclerviewneko.R.id.retry_button)!!
            Log.d(tag, "可见性:${m.visibility}")
        }
    }
    withHeader {

    }
}