支持上下拉刷新的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个赞!!!
具体的操作如下:
github:https://github.com/Wan7451/Wan_RecycleViewAdapter
这个组件的用法与PullToRefreshView 的用法一样,因为就是基于人家的框架写的。
在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); } });
相关文章推荐
- android listview gridview等自定义滚动条样式(非反射)
- android代码设置主题并且去掉标题栏
- 在Windows下搭建Android开发环境
- Java中的Timer和TimerTask在Android中的用法
- java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.LinearLayout
- Android百分比布局源代码解析
- Android学习 17 ->自定义适配器的学习
- 如何分析解决Android ANR
- Android自定义属性attribute
- Android PopupWindow响应返回键最正确的实现方式
- android Process.killProcess 和 System.exit(0) 区别
- Android Fragment学习
- findlibrary returned null产生的联想,Android ndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)
- Android手机界面的各种状态
- android 上加载h5页面
- Android中apk动态加载技术研究(1)基础知识研修
- Android Studio的常用快捷键
- 学习笔记 Android.mk 搜索自己主动
- [置顶] android studio快捷键集合
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上