RecyclerView 下拉刷新和加载更多
一.SwipeRefreshLayout实现下拉刷新
1.方法API:
setOnRefreshListener(OnRefreshListener):添加下拉刷新监听器
setRefreshing(boolean):显示或者隐藏刷新进度条
isRefreshing():检查是否处于刷新状态
setColorSchemeResources():设置进度条的颜色主题,最多设置四种,以前的setColorScheme()方法已经弃用了。
2.简单使用:
<?xmlversionxmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:androidLinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="match_parent"
android:layout_height="match_parent">
<includelayoutincludelayout="@layout/common_top_bar_layout"/>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/demo_swiperefreshlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/demo_recycler"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
></android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
Java:
原理:是一个刷新布局,来自兼容包v4可以运行在低版本,控件如果想要支持下拉刷新,只要使用当前布局包裹 
setColorSchemeColors:修改旋转颜色,可以添加多种颜色 
setRefreshing: 是否显示loading状态 
setOnRefreshListener:下拉刷新监听
 public class MainActivity extends AppCompatActivity {
     private SwipeRefreshLayout swipeRefreshLayout;
     protected void onCreate(Bundle savedInstanceState) {
                  ·····
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout);
         //设置旋转的颜色效果
         swipeRefreshLayout.setColorSchemeColors(Color.GREEN, Color.YELLOW, Color.RED);
         //设置下拉刷新的监听器
         swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
             public void onRefresh() {
                 requestData();
             }
         });
     }
     private void requestData() {
         new Handler().postDelayed(new Runnable() {//延时加载
        public void run() {
                 String json = "{name:小米}";
                 TextView text = (TextView) findViewById(R.id.text);
                 text.setText(json);
                 swipeRefreshLayout.setRefreshing(false);//关闭显示
             }
         }, );
     }
二.加载更多——上滑加载数据 
思路:
1.滚动到底部 getItemCount()-2 ==bottomPosition 
2.不处理滚动中 
OnScrollListener监听滚动加载的监听器 
int dy 滚动距离,向上滚动为正 
layoutManager.findLastVisibleItemPosition获取处于底部数据的下标 
dy>0与isLoading 都是用来控件灵敏度
 public class HomeFragment extends Fragment {
         private SwipeRefreshLayout swipeRefreshLayout;
         private RecyclerView recyclerView;
         private AppAdapter adapter;
         @Override
         public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
                 //有一个显示网络状态
                 //StateLayout stateLayout  = new StateLayout(container.getContext());
             swipeRefreshLayout = new SwipeRefreshLayout(container.getContext());
             //设置颜色
             swipeRefreshLayout.setColorSchemeColors(Color.GREEN);
             //设置下拉监听
             swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                 @Override
                 public void onRefresh() {
                     HttpConnect.get(ApiUrls.HOME+"?index=0", callback);
                 }
             });
             recyclerView = new RecyclerView(container.getContext());
             //设置排列规则
             recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
             //预先设置了Noemal视图,但是normal视图没有内容    stateLayout.addNormalView(recyclerView);
             swipeRefreshLayout.addView(recyclerView);
             //发送请求给服务器
             HttpConnect.get(ApiUrls.HOME+"?index=0",callback);
             return swipeRefreshLayout;
         }
         DefaultCallBack callback = new DefaultCallBack() {
             @Override
             public void onStart(int what) {
                 swipeRefreshLayout.setRefreshing(true);
             }
             @Override
             public void onFinish(int what) {
                 swipeRefreshLayout.setRefreshing(false);
             }
             //拿到数据
             protected void createView(String json) {
                 HomeWebInfo info = new Gson().fromJson(json, HomeWebInfo.class);
                 //创建控件,设置适配器
                 adapter=new AppAdapter(info.list);
                 recyclerView.setAdapter(adapter);
                 //上滑加载数据
                 addLoadMoreList();
             }
         };
         private void addLoadMoreList(){
         recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
             private boolean isLoading = false;
            //int dy 上下滑动的距离 +数代表往上滑动
             public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                 super.onScrolled(recyclerView, dx, dy);
                 //判断 是否是排列布局
                 RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
                 //判断是否是线性排列,并且是否滑动距离
                 if(layoutManager instanceof  LinearLayoutManager && dy> ){
                     //当前是列表
                     int total = adapter.getItemCount();
                     int lastPosition = total-;
                     //获取rv 的bottom条目
                     int currLastPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
                     if(currLastPosition==lastPosition&&!isLoading){      }
                     isLoading=true;
                     Toast.makeText(MyApp.getContext(),"加载更多...",Toast.LENGTH_SHORT).show();
                     new Handler().postDelayed(new Runnable() {
                         @Override
                         public void run() {
                             Toast.makeText(MyApp.getContext(), "加载成功", Toast.LENGTH_SHORT).show();
                             isLoading=false;
                         }
                     },);
                 }
             }
         });
       }
   }
RecyclerView 下拉刷新和加载更多的更多相关文章
- Android之RecyclerView轻松实现下拉刷新和加载更多
		今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了.自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难, ... 
- RecyclerView的下拉刷新和加载更多 动画
		下拉刷新和加载更多 1.https://github.com/jianghejie/XRecyclerView 2.http://blog.csdn.net/jabony/article/detail ... 
- 自己封装的工具类,使用原生SwipeRefreshLayout+RecycleView实现下拉刷新和加载更多
		实现SwipeRefreshLayout+RecycleView实现刷新 在你的xml文件里写上如下代码: <android.support.v4.widget.SwipeRefreshLayo ... 
- iOS 下拉刷新和加载更多 (OC\Swift)
		Swift语言出来之后, 可能还没有第三方的下拉刷新和上提加载, 所以自己用UIRefreshControl控件和UITableView实例的tableFooterView(底部视图)属性结合起来写了 ... 
- Android UI--自定义ListView(实现下拉刷新+加载更多)
		Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ... 
- Android Demo 下拉刷新+加载更多+滑动删除
		小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第 ... 
- PullToRefresh下拉刷新 加载更多 详解 +示例
		常用设置 项目地址:https://github.com/chrisbanes/Android-PullToRefresh a. 设置刷新模式 如果Mode设置成Mode.PULL_FROM_STAR ... 
- 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示
		实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性.网格.瀑布流效果演示 效果预览 实例APP 小米应用商店 使用方法 build.gradle文件 dependenc ... 
- RecyclerView下拉刷新上拉加载更多
		现在Android里都建议用RecyclerView代替ListView和GridView,所以下拉刷新和上拉加载更多也需要实现.下拉刷新可以用SwipeRefreshLayout 包裹Recycle ... 
随机推荐
- web3调用call()方法获取不到返回值
			一.web3的call()获取不到返回值问题和解决方法 在彩票小合约中,遇到一个问题:合约中 有两个方法 第一个返回一个账户地址,没有使用到当前方法调用者信息: 第二个使用到了当前方法调用者信息 在w ... 
- (转)pathlib路径库使用详解
			原文:https://xin053.github.io/2016/07/03/pathlib%E8%B7%AF%E5%BE%84%E5%BA%93%E4%BD%BF%E7%94%A8%E8%AF%A6 ... 
- Mac 安装 Ruby, Rails 运行环境
			对于新入门的开发者,如何安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境. 次安装方法同样适用于产品环境! ... 
- FineBI学习系列之FineBI的Windows里安装步骤(图文详解)
			不多说,直接上干货! 先进入FineBI官网. http://www.finebi.com/product/download/ windows系统里FineBI的安装流程 1.从FineBI官网下载 ... 
- 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
			一:简要介绍一下asp.net的执行步骤 1.IIS接收到客户请求 2. IIS把请求交给aspnet_isapi.dll处理 3.(如果是第一次运行程序)装载bin目录中的dll 4.(如果是第一次 ... 
- tomcat 启动速度慢背后的真相
			1. tomcat 启动慢 在线上环境中,我们经常会遇到类似的问题,就是tomcat 启动比较慢,查看内存和cpu,io都是正常的,但是启动很慢,有的时候长达几分钟,这到底是什么原因导致的. 1.1 ... 
- 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]
			[来源]:腾讯2013实习生笔试 给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j])空间复杂度和O(n)的时间复杂度:除遍历计数器与a ... 
- [Node.js] 3、搭建hexo博客
			一.安装新版本的nodejs和npm 安装n模块: npm install -g n 升级node.js到最新稳定版 n stable 二.安装hexo note: 参考github,不要去其 ... 
- Excel上传并读取数据
			最近一段时间,维护一个旧系统,其中有一个功能,是把Excel上传,并读取数据进行维护,然后转插入至SQL数据库中.下面Insus.NET使用asp.net 标准上传控件: <asp:FileUp ... 
- Spring基础(4) : bean重写
			@Configuration public class Config1 { @Bean() public Person getP(){ Person p = new Person(); p.setNa ... 
