RecyclerView上拉加载的一种实现
2021-02-14 20:07 作者:スレーブ_スレイヤー | 我要投稿
记录学到的东西是一个好习惯,特别是对于我这种同一个功能每次都用不同方法实现的人来说,可以找到一个最优的方案。这次是实现完了才发现和网上不一样,我的方法是:
1.下拉加载要显示一个进度条,如果已经是最后一页就显示一个“没有更多”的文字。所以,要先把这两个控件加到holder里,也就是后面的progressBarKitView和text。

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

那么问题来了,怎么确定viewType呢。没错,如果是最后一个Item就把viewType设置成1。
这就是这个方法的缺陷了,需要在数据源末尾添加一条空的数据。

3.最后实现onBindViewHolder,如果itemViewType是1就直接去加载数据然后把方法返回。
我这里因为服务器一次返回20条数据,所以下一页就是当前的数据总数除以20再加1。
getResByTag内部是开了线程的,所以要先切换到UI线程,然后把“没有更多数据”的文字显示。然后判断,如果从服务器得到的数据为空或者总数据量小于20,认为没有更多数据需要加载,直接返回。
否则先把自己从数据源移除,再把从服务器获取到的数据添加到数据源,最后再添加一个空项用于显示加载的视图,通知更新就OK了。

以上。