RecyclerView小结

 我来答
天然槑17
2022-06-01 · TA获得超过1.1万个赞
知道大有可为答主
回答量:5967
采纳率:100%
帮助的人:32.1万
展开全部

目录

​ 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吧 ( ̄∇ ̄)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式