支持下拉刷新、上拉加载的RecyclerView,基于PullToRefresh
来源:互联网 发布:淘宝网买卖中心 编辑:程序博客网 时间:2024/05/18 08:22
首先我是使用 这篇文章http://blog.csdn.net/Mr_WangGang/article/details/46707441 提供的方法来实现的,感谢提供思路。
但是使用过程中,发现一个bug:上拉加载完成后,必须要向下滑一下再向上滑才能向下滚动,不然就一直判断成是上拉加载状态。
所以在此基础上,参考listview的方法判断是否应该上拉加载,重写了一下isReadyForPullEnd()这个方法。
<span style="font-size:14px;">public class PullToRefreshRecycleView extends PullToRefreshBase<RecyclerView> { private RecyclerView mRefreshableView; public PullToRefreshRecycleView(Context context) { super(context); } public PullToRefreshRecycleView(Context context, AttributeSet attrs) { super(context, attrs); } public PullToRefreshRecycleView(Context context, Mode mode) { super(context, mode); } public PullToRefreshRecycleView(Context context, Mode mode, AnimationStyle animStyle) { super(context, mode, animStyle); } //重写4个方法 //1 滑动方向 @Override public Orientation getPullToRefreshScrollDirection() { return Orientation.VERTICAL; } //滑动的View @Override protected RecyclerView createRefreshableView(Context context, AttributeSet attrs) { mRefreshableView = new RecyclerView(context, attrs); return mRefreshableView; } //是否滑动到底部 @Override protected boolean isReadyForPullEnd() { return isLastItemVisible(); } //是否滑动到顶部 @Override protected boolean isReadyForPullStart() { View view = mRefreshableView.getChildAt(0); if (view != null) { return view.getTop() >= mRefreshableView.getTop(); } return false; } private boolean isLastItemVisible() { final RecyclerView.Adapter adapter = mRefreshableView.getAdapter(); if (null == adapter) { return true; } else { LinearLayoutManager layoutManager = (LinearLayoutManager) mRefreshableView.getLayoutManager(); final int lastItemPosition = mRefreshableView.getAdapter().getItemCount() -1; final int lastVisiblePosition = layoutManager.findLastVisibleItemPosition(); /** * This check should really just be: lastVisiblePosition == * lastItemPosition, but PtRListView internally uses a FooterView * which messes the positions up. For me we'll just subtract one to * account for it and rely on the inner condition which checks * getBottom(). */ if (lastVisiblePosition >= lastItemPosition - 1) { final int childIndex = lastVisiblePosition - layoutManager.findFirstVisibleItemPosition(); final View lastVisibleChild = mRefreshableView.getChildAt(childIndex); if (lastVisibleChild != null) { return lastVisibleChild.getBottom() <= mRefreshableView.getBottom(); } } } return false; }}</span>
0 0
- 支持下拉刷新、上拉加载的RecyclerView,基于PullToRefresh
- PullToRefresh的上拉加载下拉刷新
- RecyclerView的上拉加载,下拉刷新
- pulltorefresh 上拉加载 下拉刷新
- 下拉刷新,上拉加载更多 PullToRefresh
- Android-PullToRefresh下拉刷新,上拉加载
- PullToRefresh实现上拉加载下拉刷新
- PullToRefresh上拉刷新下拉加载
- PullToRefresh上拉加载,下拉刷新
- PullToRefresh上拉刷新下拉加载
- 上拉刷新下拉加载控件-PullToRefresh
- 上拉加载下拉刷新 PullToRefresh
- PullToRefresh上拉加载下拉刷新
- pulltorefresh上拉加载 下拉刷新
- PullToRefresh下拉刷新和上拉加载
- pulltorefresh上拉加载以及下拉刷新
- PullToRefresh实现上拉加载下拉刷新
- PullToRefresh实现下拉刷新上拉加载
- Jquery easyUI treeGride用js初始化后不显示树结构的解决方案
- 宽字符转字符串
- cocos2dx绘制实心圆
- VC2008获取指定的窗口句柄
- VC中通过程序名称找到窗口句…
- 支持下拉刷新、上拉加载的RecyclerView,基于PullToRefresh
- mouse_event函数
- 亲自动手~用VC++做DLL
- linux常用命令
- 亲自动手~用VC++做DLL
- 重新理清冒泡排序
- vc编写Dll文件和调用的方法
- Java 大数加减乘(无除),不含小数点
- 转载:VC常用API+示例