RecyclerView 实现下拉刷新和自动加载
来源:互联网 发布:淘宝荣耀手环a1充电器 编辑:程序博客网 时间:2024/05/10 16:09
RecyclerView是 Android 兼容包V21中新推出的列表类,它的自定义化强的优点足以让它能够取代GridView和ListView,本文将结合SwipeRefreshLayout与RecyclerView讲解如何实现下拉刷新和自动加载的代码
需要的依赖
以下版本自行更新
1
2
3
4
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:recyclerview-v7:21.0.0'
compile 'com.android.support:cardview-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'
需要解决的问题
- [x] 下拉刷新
- [x] 自动加载
- [x] 网络请求异步加载
技术处理
下拉刷新
采用 android.support.v4.widget.SwipeRefreshLayout
来实现
具体可以搜索这个class,我们按照官方文档,布局如下
1
2
3
4
5
6
7
8
9
10
11
12
<viewxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipeRefreshLayout"
class="android.support.v4.widget.SwipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<viewxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recylerView"
class="android.support.v7.widget.RecyclerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></view>
</view>
然后对 swipeRefreshLayout
设置监听即可
1
2
3
4
5
6
7
8
9
10
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if(isrefreshing){
Log.d(TAG,"ignore manually update!");
} else{
loadPage();
}
}
});
自动加载
RecyclerView是一个新兴事物,伸手党们还找不到 endless-RecyclerView
这样的开源神器,只好自己找方法了,同ListView一样,还是重写 OnScrollListener
这个方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
recyclerView.setOnScrollListener(newRecyclerView.OnScrollListener(){
@Override
publicvoidonScrolled(RecyclerViewrecyclerView,intdx,intdy){
super.onScrolled(recyclerView,dx,dy);
intlastVisibleItem=((LinearLayoutManager)mLayoutManager).findLastVisibleItemPosition();
inttotalItemCount=mLayoutManager.getItemCount();
//lastVisibleItem >= totalItemCount - 4 表示剩下4个item自动加载,各位自由选择
// dy>0 表示向下滑动
if(lastVisibleItem>=totalItemCount-4&&dy>0){
if(isLoadingMore){
Log.d(TAG,"ignore manually update!");
}else{
loadPage();//这里多线程也要手动控制isLoadingMore
isLoadingMore=false;
}
}
}
});
如果想用GridView,可以试试这个,注意例子里的span_count =2
1
2
3
4
5
6
7
8
9
10
11
12
@Override
publicvoidonScrolled(RecyclerViewrecyclerView,intdx,intdy){
super.onScrolled(recyclerView,dx,dy);
int[]visibleItems=mLayoutManager.findLastVisibleItemPositions(null);
intlastitem=Math.max(visibleItems[0],visibleItems[1]);
Log.d(TAG,"visibleItems ="+visibleItems);
Log.d(TAG,"lastitem ="+lastitem);
Log.d(TAG,"adapter.getItemCount() ="+adapter.getItemCount());
if(dy>0&&lastitem>adapter.getItemCount()-5&&!isLoadingMore){
Log.d(TAG,"will loadNewFeeds");
}
}
网络请求异步加载
我这里的 loadPage
是基于 Retrofit 构建的,输入参数是一个Map,它的回调功能非常实用,可以直接控制UI更新,流程图如下,大家可以参考一下设计
loadPage 流程图
参考文献
- 俄国佬代码
- ListView祖传代码
问啊-一键呼叫程序员答题神器,牛人一对一服务,开发者编程必备官方网站:www.wenaaa.com
QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!
QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!
0 0
- RecyclerView 实现下拉刷新和自动加载
- RecyclerView 实现下拉刷新和自动加载
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- RecyclerView实现下拉刷新与自动加载控件封装
- 集下拉刷新、自动加载和侧滑菜单的RecyclerView基本实现原理
- SwipeRefreshLayout和RecyclerView实现下拉刷新和上拉加载
- RecyclerView 下拉刷新,自动加载更多
- RecyclerView实现下拉刷新和上拉加载更多
- SwipeRefreshLayout + RecyclerView实现上拉加载和下拉刷新
- 自定义RecyclerView实现下拉刷新和上拉加载
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉加载更多
- Android之RecyclerView轻松实现下拉刷新和加载更多
- RecyclerView实现下拉刷新和上拉加载更多
- Android 实现RecyclerView的下拉刷新和上拉加载
- RecyclerView实现上拉加载和下拉刷新
- RecyclerView实现上拉加载,下拉刷新
- RecyclerView实现上拉加载,下拉刷新
- 为个人博客添加文章评论功能
- Servlet_09_ServletContext(续3)
- 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
- com.jacob.com.ComFailException: Can't co-create object解决办法
- cocos2dx 3.0设置精灵高亮效果
- RecyclerView 实现下拉刷新和自动加载
- 【Unity】关于LightMap过度曝光、NormalMap变红
- Android 自定义控件开发入门(一)
- 调WEBSERVICE超时设置
- Cordova学习教材 http://www.yiibai.com/cordova/cordova_battery_status.html
- Git-版本管理
- java关于读取数据后简单写入一个文件中的总结
- 算法的复杂度
- iOS中数组遍历的方法及比较