RecyclerView 实现下拉刷新和自动加载
来源:互联网 发布:linux文件系统架构 编辑:程序博客网 时间:2024/05/13 09:52
RecyclerView 实现下拉刷新和自动加载
RecyclerView是 Android 兼容包V21中新推出的列表类,它的自定义化强的优点足以让它能够取代GridView和ListView,本文将结合SwipeRefreshLayout与RecyclerView讲解如何实现下拉刷新和自动加载的代码
需要的依赖
以下版本自行更新
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,我们按照官方文档,布局如下
<view xmlns: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"> <view xmlns: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
设置监听即可
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { if(isrefreshing){ Log.d(TAG,"ignore manually update!"); } else{ loadPage(); } } });
自动加载
RecyclerView是一个新兴事物,伸手党们还找不到 endless-RecyclerView
这样的开源神器,只好自己找方法了,同ListView一样,还是重写 OnScrollListener
这个方法
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int lastVisibleItem = ((LinearLayoutManager) mLayoutManager).findLastVisibleItemPosition(); int totalItemCount = 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
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int[] visibleItems = mLayoutManager.findLastVisibleItemPositions(null); int lastitem = 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更新,流程图如下,大家可以参考一下设计
参考文献
- 俄国佬代码
- ListView祖传代码
- 示例代码,非常推荐,不是我写的
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实现上拉加载,下拉刷新
- sql关键语句详解
- 如何解决有限无限同时上网的问题
- URL传递中文字符,特殊危险字符的解决方案(仅供参考)urldecode、base64_encode
- 解决refreshing gradle project 和Building gradle project info 一直卡住\速度慢
- 小希的迷宫
- RecyclerView 实现下拉刷新和自动加载
- 【POJ】-2356-Find a multiple(抽屉原理&STL)
- 1077. Kuchiguse (20)
- tomcat源码解析(一)——Bootstrap和Catalina启动部分
- Codeforces Round #364 (Div. 2),只有A与B
- 前自增 后自增
- HDOJ 1789 Doing Homework again
- springmvc中解决post乱码
- 互联网职业概述