您的位置:首页 > 移动开发 > Android开发

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

2015-07-01 11:09 453 查看
在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);
            }
        });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: