Android中的上拉下拉刷新控件也是很多的,我所了解的有
SmartRefreshLayout(评分很高但是我不想用😁)
https://github.com/scwang90/SmartRefreshLayout
SpringView (推荐本文使用)
https://github.com/liaoinstan/SpringView
pullloadmorerecyclerview
https://github.com/WuXiaolong/PullLoadMoreRecyclerView
在github上评分比较高的是SmartRefreshLayout,样式很多。我们之前的项目使用的是pullloadmorerecyclerview,这是比较符合google官方样式的,但是前文我说过,我想要的是类似iOS的那种效果,所以我就选择了SpringView,这个无论是样式还是用法都是我比较喜欢的,看着比较有亲切感。
样式样式不用多说可以去GitHub看gif动图。在iOS开发中使用比较多的是MJRefresh,其用法就是新建一个UITableView然后添加mj_header和mj_footer,使用起来就像是插件一样没有太多侵入,SpringView的用法类似,我们看代码
<!--消息模块列表的上拉和下拉-->
<com.liaoinstan.springview.widget.SpringView
android:id="@+id/springView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp">
<!--消息模块的列表数据-->
<ListView
android:id="@+id/messageListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00000000"/>
</com.liaoinstan.springview.widget.SpringView>
通过布局文件可以看到有一个再正常不过的ListView,SpringView包裹住这个ListView,就像插件一样使用,没有侵入ListView内部,这种风格我喜欢
//使用默认风格,如果需要其他风格参考GitHub
springView.setHeader(new DefaultHeader(getContext()));
springView.setFooter(new DefaultFooter(getContext()));
springView.setListener(new SpringView.OnFreshListener() {
@Override
public void onRefresh() {
pageNo = 1;
requestList();
springView.setEnableFooter(true); //有上拉功能
}
@Override
public void onLoadmore() {
//如果目前没有数据,那么上拉可以作为下拉处理,请求第一页的数据
if (mMessageListDao.getData().getList().size() == 0){
pageNo = 1;
requestList();
}else {
pageNo += 1;
requestList();
}
}
});
可以看到使用起来非常简洁,推荐使用。
关于pullloadmorerecyclerview我想说一句,使用这个控件时发现了一个问题,如果当前数据没有占满屏幕那么上拉加载功能不能使用,有人说这个不算一个问题,因为当前数据没有占满屏幕说明没有更多数据可以加载,但是我以为当前请求的第一页数据有没有占满屏幕跟是不是有第二页数据没有必然联系,即使pageSize设置大一些20,那么也不能保证一定会占满屏幕,毕竟Android机型千奇百怪。还有一个问题就是当加载完所有数据时也就是加载更多的动画不能自动消失。
网友评论