08-下拉刷新控件SwipeRefreshLayout介绍

一、SwipeRefreshLayout的简介

以前我们都是使用XListView等流行框架实现下拉刷新以及上拉加载更多的,今天我介绍一个新的控件SwipeRefreshLayout,它是谷歌官方提供的一个新控件,同样可以实现下拉刷新。

SwipeRefreshLayout是V4支持包中提供的一个新的控件,它可以实现下拉刷新的功能。但是缺点是没有实现上拉加载更多。但是网上有很多开发者对它进行加强,使得它可以实现上拉加载。

SwipeRefreshLayout可以与ListView,RecycleView,GridView等列表控件配合使用,而且高度解耦,使用方便灵活,下拉刷新效果比较炫酷,因此赢得我们的青睐。

这是SwipeRefreshLayout的官方文档,注:这是国内的API镜像。
http://doc.cniao5.com/android/reference/android/support/v4/widget/SwipeRefreshLayout.html

二、SwipeRefreshLayout的基本使用

1、在Gradle中引入SwipeRefreshLayout的依赖库。

compile 'com.android.support:support-v4:23.1.1'

2、在布局文件当中放置我们的SwipeRefreshLayout。SwipeRefreshLayout里面也可以放置任意列表控件,通过这种方式可以实现SwipeRefreshLayout和列表之间的解耦。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>

3、代码中的配置,详细看注释,不一一赘述。这个Demo是在CardView的基础上修改而来的。

refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refreshLayout);

//设置进度条的颜色,不定长参数可以设置多种颜色
//对于RefreshLayout,网上有人说最多4种颜色,不要使用android.R.color.,否则会卡死
refreshLayout.setColorSchemeColors(
        Color.RED,
        Color.YELLOW,
        Color.GREEN);

//设置进度条的背景颜色
refreshLayout.setProgressBackgroundColorSchemeColor(Color.WHITE);

//设置大小
refreshLayout.setSize(SwipeRefreshLayout.LARGE);

//设置手指划过多少像素开始触发刷新
refreshLayout.setDistanceToTriggerSync(100);

//设置刷新的时候监听,三秒钟之后添加数据完毕
refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        //模拟网络请求数据
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 30; i++) {
                    //添加数据
                    myAdapter.addData(i, "new data " + i);
                    myAdapter.notifyItemRangeChanged(0, 30);
                }

                //recyclerView回到最上面
                recyclerView.scrollToPosition(0);
                //判断是否在刷新
//                      refreshLayout.isRefreshing()
                //刷新完毕,关闭下拉刷新的组件
                refreshLayout.setRefreshing(false);
            }
        }, 3000);
    }
});

三、运行效果

是不是觉得瞬间高大上有木有,大家快去敲码吧O(∩_∩)O~~。

如果觉得我的文字对你有所帮助的话,欢迎关注我的公众号:

公众号:Android开发进阶

我的群欢迎大家进来探讨各种技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,878评论 22 665
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,151评论 25 708
  • Android UI相关开源项目库汇总OpenDigg 抽屉菜单MaterialDrawer ★7337 - 安卓...
    黄海佳阅读 8,758评论 3 77
  • 文:叔叔 离开家乡很多年了,每年我都回乡探望父母和亲人,目睹了家乡日新月异的变化。然而,老家在我的梦里、回忆里却始...
    Origheart阅读 186评论 0 0
  • 我们通过上述横向分块、纵向分层的方法将一个系统切成不同的小块,这些小块负责某一单一的职责,然后通过接口将块与块之间...
    双鱼大猫阅读 428评论 0 4