RecyclerView的下拉刷新数据_RecyclerView加载更多
2017-06-09 16:26:59  By: dwtedx

RecyclerView的刷新与加载相信大家都很常见、那么对这个效果满意的又有几个呢、今天跟大家分享一个非常简单的封装效果、效果图如下(效果图循环播放后、总感觉有些诡异!可能是gif截的点不对、在手机上看效果正常的)、控件是用自定义下拉刷新上拉加载控件(SwipeRefreshLayout recyclerView)

recyclerview加载更多


1、支持自动下拉刷新

//设置自动下拉刷新、切记要在recyclerView.setOnLoadListener()之后调用
// 因为在没有设置监听接口的情况下、setRefreshing(true),调用不到OnLoadListener
mSwipeRecyclerView.setRefreshing(true);


2、支持emptyView

mSwipeRecyclerView.setEmptyView(View emptyView);


3、支持禁止上拉加载更多/下拉刷新

//禁止下拉刷新
mSwipeRecyclerView.setRefreshEnable(false);    //禁止加载更多
mSwipeRecyclerView.setLoadMoreEnable(false);


4、支持自定义footer view

//设置footerView
//但是自定义的footerView必须继承BaseFooterView
mSwipeRecyclerView.setFooterView(new SimpleFooterView(this));


5、支持GridLayoutManager的SpanSizeLookup

//由于SwipeRecyclerView中对GridLayoutManager的SpanSizeLookup做了处理、因此对于使用了
//GridLayoutManager又要使用SpanSizeLookup的情况、可以这样使用!
mSwipeRecyclerView.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {        
    @Override
    public int getSpanSize(int position) {            
        return 3;
    }
});


6、关于footerView的分割线 获取childCount - 1 不包含footerView即可

//设置去除footerView 的分割线
mSwipeRecyclerView.getRecyclerView().addItemDecoration(new RecyclerView.ItemDecoration() {        
    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {            
    super.onDraw(c, parent, state);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(0xFFEECCCC);

        Rect rect = new Rect();            
        int left = parent.getPaddingLeft();            
        int right = parent.getWidth() - parent.getPaddingRight();            
        final int childCount = parent.getChildCount() - 1;            
        for (int i = 0; i < childCount; i  ) {                
        final View child = parent.getChildAt(i);                
        //获得child的布局信息
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();                
            final int top = child.getBottom()   params.bottomMargin;                
            final int itemDividerHeight = 1;//px
            rect.set(left   50, top, right - 50, top   itemDividerHeight);
            c.drawRect(rect, paint);
        }
    }
});


7、如果需要对SwipeRefreshLayout或RecyclerView做其他的设置
mSwipeRecyclerView.getSwipeRefreshLayout()       
mSwipeRecyclerView.getRecyclerView()


8、可能存在的问题

由于Recycler.Adapter中关于数据集更新的方法全是final的、无法重写、并且自定义的DataObserver也没法实现的方法 如:notifyItemMoved方法 因此使用除SwipeRecyclerView中DataObserver的方法之外的更新数据集的方法、可能会有问题所以更新数据集建议采用DataObserver中有的方法


Android6.0recyclerview的刷新数据实例源代码下载链接: recyclerview下拉刷新 密码: 2k2c

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+