RecyclerView小结
目录
1. RecyclerView与ListView的异同
2. RecyclerView的使用
- 简单使用步骤
- 关于Item点击事件的监听
- 关于滚动事件的监听
- 设置Decoration
- 设置Animation
RecyclerView和ListView一样是用于展示大量数据集的部件,两者都能够回收和复用不可见的view来节约资源提高性能。与ListView不同的是,RecyclerView具有更好的灵活性,这主要得益于其插件化和充分解耦的设计:
RecyclerView与ListView的主要差异:
使用RecyclerView时一般会用到一下几个RecyclerView的内部类:
一种简单的方式就是在 onBindViewHolder 时调用view的 setOnClickListener() 方法;或者定义ViewHolder时让其操作 OnClickListener 接口:
如果需要在activity或者fragment中处理点击事件,则可以在adapter中设计一个接口供外部调用:
在activity或fragment中使用:
RecyclerView的滚动事件可以使用 addOnScrollListener 方法监听:
滚动的过程一般分为2种:
对应到 onScrollStateChanged 中的newState值:
所以上面 onScrollStateChanged 中的条件可以翻译为:滚动停止 && 倒数第二个item已经可见 && 不在加载过程中
onScrolled 中dx和dy的含义:
google提供了一个RecyclerView.ItemDecoration的实现类DividerItemDecoration作为默认的divider,使用方法如下:
DividerItemDecoration的码源
DividerItemDecoration实现主要包括三个方法:
其绘制过程大致为:
在最新版的DividerItemDecoration中还提供了一个 setDrawable(Drawable drawable) 方法,方便我们自己定制divider的样式。比如我在 res/drawable 目录下新建一个 divider_drawable.xml 文件:
然后在构造decoration时用这个文件替换默认的divider资源文件:
替换后效果如下:
可以看到由于默认的 getItemOffsets() 设定了bottom的padding值,所以在divider的左右两边露出了RecyclerView下面一层的背景色。对于这种情况,可以仿造默认的DividerItemDecoration自己继承RecyclerView.ItemDecoration实现一个decoration,将绘制方法改为 onDrawOver() ,并在 getItemOffsets() 中不设置padding值,就可以让divider绘制在item的上方。
当然设置divider还有一种更简单的方法,直接在item的布局文件中添加一个ImageView画一条线就好了( ̄Д ̄)ノ
同样的google也提供了一个默认的动画DefaultItemAnimation,可以使用 setItemAnimation() 方法来设置。
我们也可以继承RecyclerView.ItemAnimation来自己定义item动画。这里推荐一个第三方动画库 recyclerview-animatiors ,简单好用可拓展。
RecyclerView整体理解和使用
http://www.grokkingandroid.com/first-glance-androids-recyclerview/
https://guides.codepath.com/android/using-the-recyclerview#attaching-click-listeners-with-decorators
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
http://www.jianshu.com/p/12ec590f6c76
点击事件
http://www.jianshu.com/p/f2e0463e5aef
滚动事件
http://blog.devwiki.net/index.php/2016/06/13/RecyclerView-Scroll-Listener.html
完整项目在 我的github 上,如果碰巧能帮到您不妨去点个star吧 ( ̄∇ ̄)