-
Notifications
You must be signed in to change notification settings - Fork 5.2k
首部加载更多(向上加载更多)
mumu edited this page Aug 26, 2022
·
1 revision
关键类
LeadingLoadStateAdapter
,继承自LoadStateAdapter
类
首部加载更多
与尾部加载更多
是同级关系,同样来自于 LoadStateAdapter
父类,因此使用方式基本一致
使用默认的“加载更多”布局,实现“加载更多”的功能
- 创建所需对象
// 第一步,创建 adapter val mAdapter = RecyclerViewAdapter() // 第二部,使用 Builder 创建 QuickAdapterHelper 对象,这里需要传入你的列表 mAdapter val helper = QuickAdapterHelper.Builder(mAdapter) // 使用默认样式的首部"加载更多" .setLeadingLoadStateAdapter(object : OnLeadingListener { override fun onLoad() { // 执行加载更多的操作,通常都是网络请求 request() } override fun isAllowLoading(): Boolean { // 是否允许触发“加载更多” return true } }).build() /** * 第三步,给 RecyclerView 设置 Adapter, * 注意:这个adapter不是前面创建的 mAdapter,而是 helper 所提供的 adapter(ConcatAdapter) */ recyclerView.adapter = helper.adapter
- 设置数据及加载状态
这里直接对你创建的
mAdapter
操作数据,而不是ConcatAdapter
,ConcatAdapter
mAdapter.addAll(0, list) if(page >= MAX_PAGE) { // 没有分页数据了 /* Set the status to not loaded, and there is no paging data. 设置状态为未加载,并且没有分页数据了 */ helper.trailingLoadState = LoadState.NotLoading(true) Tips.show("no more data") } else { // 后续还有分页数据 /* Set the state to not loaded, and there is also paginated data 设置状态为未加载,并且还有分页数据 */ helper.trailingLoadState = LoadState.NotLoading(false) }
- 需要继承
LeadingLoadStateAdapter
实现自定义类(由于本质是一个Adapter,所以这里除了自定义布局,你还可以做更多的事情)class CustomLoadMoreAdapter : LeadingLoadStateAdapter<CustomLoadMoreAdapter.CustomVH>() { override fun onCreateViewHolder(parent: ViewGroup, loadState: LoadState): CustomVH { // 创建你自己的 UI 布局 val viewBinding = ViewLoadMoreBinding.inflate(LayoutInflater.from(parent.context), parent, false) return CustomVH(viewBinding) } override fun onBindViewHolder(holder: CustomVH, loadState: LoadState) { // 根据加载状态,来自定义你的 UI 界面 if (loadState is LoadState.Loading) { holder.viewBinding.loadingProgress.visibility = View.VISIBLE } else { holder.viewBinding.loadingProgress.visibility = View.GONE } } class CustomVH(val viewBinding: ViewLoadMoreBinding) : RecyclerView.ViewHolder(viewBinding.root) }
- 将自定义"加载更多"传递进去
// 实例化自定义"加载更多"的类
val loadMoreAdapter = CustomLoadMoreAdapter()
loadMoreAdapter.setOnLoadMoreListener(object : OnTrailingListener {
override fun onLoad() {
// 执行加载更多的操作,通常都是网络请求
}
override fun isAllowLoading(): Boolean {
// 是否允许触发“加载更多”
return true
}
})
helper = QuickAdapterHelper.Builder(mAdapter)
.setLeadingLoadStateAdapter(loadMoreAdapter) // 传递自定义的“加载跟多”
.build()
...
/**
* Whether enable loading.
*
* 是否开启加载功能
*/
val isLoadEnable: Boolean = true
/**
* Preload, the number of items from the tail.
*
* 预加载,距离尾部 item 的个数
*/
var preloadSize = 0