SwipeRefreshLayout完美实现ListView网络数据上拉加载以及下拉刷新

本文介绍了如何使用SwipeRefreshLayout结合ListView实现上拉加载和下拉刷新功能。通过设置OnRefreshListener监听滑动,利用isRefreshing(), setColorSchemeResources()等方法定制刷新效果。同时讲解了如何处理ListView滑动事件,以及在XML和Java代码中的具体使用。最后提到了在数据处理中跟踪页数的技巧。" 112228743,10351429,Java中的final关键字详解,"['编程语言', 'java', '设计模式', '面试']
摘要由CSDN通过智能技术生成

最近才有时间将上拉加载与下拉刷新进行总结,SwipeRefreshLayout是Android -V4包下自带的一个刷新控件,但是不足的是它只有下拉刷新的功能,没有需要的上拉加载功能,所以我自己添加了上拉加载的功能。

一、首先简单介绍一下SwipeRefreshLayout的。

这个是我在网上找的一个官网的介绍,在竖直滑动时想要刷新页面可以用SwipeRefreshLayout来实现。其实它也就是我们在使用列表的时候需要的上拉加载与下拉刷新的实现,它通过设置OnRefreshListener来监听界面的滑动从而实现刷新。也可以通过一些方法来设置SwipeRefreshLayout是否可以刷新。如:setRefreshing(true),展开刷新动画;setRefreshing(false),取消刷新动画;setEnable(true)下拉刷新将不可用。注意的是,它只可以有一个子控件,一般使用的是ListView。

常用到的方法有以下几个:

  • isRefreshing()

    • 判断当前的状态是否是刷新状态。
  • setColorSchemeResources(int... colorResIds)

    • 设置下拉进度条的颜色主题,参数为可变参数,并且是资源id,可以设置多种不同的颜色,每转一圈就显示一种颜色。
  • setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener)

    • 设置监听,需要重写onRefresh()方法,顶部下拉时会调用这个方法,在里面实现请求数据的逻辑,设置下拉进度条消失等等。
  • setProgressBackgroundColorSchemeResource(int colorRes)

    • 设置下拉进度条的背景颜色,默认白色。
  • setRefreshing(boolean refreshing)

    • 设置刷新状态,true表示正在刷新,false表示取消刷新。
二、SwipeRefreshLayout上拉加载的具体实现

1、首先我们写一个类RefreshView继承自SwipeRefreshLayout,在它的onLayout方法中获取ListView布局,如下:

// 获取ListView,设置ListView的布局位置
if (mListView == null) {
    // 判断容器有多少个孩子
    if (getChildCount() > 0) {
        // 判断第一个孩子是不是ListView
        if (getChildAt(0) instanceof ListView) {
            // 创建ListView对象
            mListView = (ListView) getChildAt(0);
            // 设置ListView的滑动监听
            setListViewOnScroll();
        }
    }
}

2、在复写的代码下添加如下代码,获取底部加载的布局

// 填充底部加载布局
mFooterView = View.inflate(context, R.layout.view_foot, null);
// 表示控件移动的最小距离,手移动的距离大于这个距离才能拖动控件
mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
System.out.println("====" + mScaledTouchSlop);

3、需要判断上拉与下拉。所以需要设置ListView的滑动

 /**
     * 设置ListView的滑动监听
     */
    private void setListViewOnScroll() {

        mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // 移动过程中判断时候能下拉加载更多
                if (canLoadMore()) {
                    // 加载数据
                    loadData();
                }
            }

            @Override
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值