欢迎光临散文网 会员登陆 & 注册

RecyclerView上拉加载的一种实现

2021-02-14 20:07 作者:スレーブ_スレイヤー  | 我要投稿

记录学到的东西是一个好习惯,特别是对于我这种同一个功能每次都用不同方法实现的人来说,可以找到一个最优的方案。这次是实现完了才发现和网上不一样,我的方法是:

1.下拉加载要显示一个进度条,如果已经是最后一页就显示一个“没有更多”的文字。所以,要先把这两个控件加到holder里,也就是后面的progressBarKitView和text。

Holder

2.在onCreateViewHolder方法里,根据viewType来实例化不同的Holder。0就是普通Item的Holder,1就是加载的Holder。

onCreateViewHolder

那么问题来了,怎么确定viewType呢。没错,如果是最后一个Item就把viewType设置成1。

这就是这个方法的缺陷了,需要在数据源末尾添加一条空的数据。

getItemViewType

3.最后实现onBindViewHolder,如果itemViewType是1就直接去加载数据然后把方法返回。

我这里因为服务器一次返回20条数据,所以下一页就是当前的数据总数除以20再加1。

getResByTag内部是开了线程的,所以要先切换到UI线程,然后把“没有更多数据”的文字显示。然后判断,如果从服务器得到的数据为空或者总数据量小于20,认为没有更多数据需要加载,直接返回。

否则先把自己从数据源移除,再把从服务器获取到的数据添加到数据源,最后再添加一个空项用于显示加载的视图,通知更新就OK了。

onBindViewHolder

以上。

RecyclerView上拉加载的一种实现的评论 (共 条)

分享到微博请遵守国家法律