支持上下拉刷新的RecycleView,基于androidPullToRefresh

本文介绍了如何在Android项目中利用androidPullToRefresh库为RecycleView添加符合特定需求的上下拉刷新效果。通过分析源码,发现可以继承PullToRefreshBase并实现4个关键方法来达成目标,省去了使用SwipeRefreshLayout的不便。提供了一个基于androidPullToRefresh的RecycleView适配器实现示例链接。
摘要由CSDN通过智能技术生成

在Android开发中,一个可以上下拉刷新的列表是非常常见的功能。在之前的项目中,一般都是使用ListView实现的,一般实现的原理都是跟ListView添加头尾视图 + 手势操作。


在AndroidV7包中出现RecycleView后,很多开发者就将ListView舍弃,直接使用RecycleView。


但是在项目中需要实现上下拉刷新的功能,所以,很有必要让RecycleView支持上下拉刷新。


网上搜的话,等搜出一大堆关于的RecycleViews上下拉的资料,但都是与 SwipeRefreshLayout 配合使用。但是SwipeRefreshLayout 下拉刷新的效果往往不符合项目的需求,大部分的需求效果类似于 androidPullToRefresh。所以我就考虑如何实现类似androidPullToRefresh的下拉刷新效果。


当我查看androidPullToRefresh 源码(之后简称源码)的时候发现,androidPullToRefresh 框架对上下拉的刷新操作封装的特别好,所以就直接使用androidPullToRefresh 框架。


在查看源码的发现,PullToRefreshWebView、PullToRefreshScrollView 都是继承自 PullToRefreshBase。而PullToRefreshBase主要是对上下拉的手势操作,以及上下拉的效果做了封装,我能不能直接继承PullToRefreshBase 来实现的我的功能呢?


在PullToRefreshBase 中有4个方法需要实现,实现这个方法,即可实现添加 上下拉效果了。  为androidPullToRefresh的作者32个赞!!!


具体的操作如下:

public class WanRecycleView extends PullToRefreshBase<RecyclerView> {

    public WanRecycleView(Context context) {
        super(context);
    }

    public WanRecycleView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public WanRecycleView(Context context, Mode mode) {
        super(context, mode);
    }

    public WanRecycleView(Context context, Mode mode, AnimationStyle animStyle) {
        super(context, mode, animStyle);
    }

    //重写4个方法
    //1 滑动方向
    @Override
    public Orientation getPullToRefreshScrollDirection() {
        return Orientation.VERTICAL;
    }

    //重写4个方法
    //2  滑动的View
    @Override
    protected RecyclerView createRefreshableView(Context context, AttributeSet attrs) {
        RecyclerView view = new RecyclerView(context, attrs);
        return view;
    }

    //重写4个方法
    //3 是否滑动到底部
    @Override
    protected boolean isReadyForPullEnd() {
        View view = getRefreshableView().getChildAt(getRefreshableView().getChildCount() - 1);
        if (null != view) {
            return getRefreshableView().getBottom() >= view.getBottom();
        }
        return false;
    }

    //重写4个方法
    //4 是否滑动到顶部
    @Override
    protected boolean isReadyForPullStart() {
        View view = getRefreshableView().getChildAt(0);

        if (view != null) {
            return view.getTop() >= getRefreshableView().getTop();
        }
        return false;
    }

}


github:https://github.com/Wan7451/Wan_RecycleViewAdapter

这个组件的用法与PullToRefreshView 的用法一样,因为就是基于人家的框架写的。


 mainView.setScrollingWhileRefreshingEnabled(true);
        mainView.setMode(PullToRefreshBase.Mode.BOTH);
        mainView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<RecyclerView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<RecyclerView> refreshView) {
                Toast.makeText(MainActivity.this, "下拉刷新", Toast.LENGTH_SHORT).show();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        mainView.onRefreshComplete();
                    }
                }, 4000);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<RecyclerView> refreshView) {
                Toast.makeText(MainActivity.this, "上拉加载", Toast.LENGTH_SHORT).show();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        mainView.onRefreshComplete();
                    }
                }, 4000);
            }
        });






  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值