是时候使用RecycleView

还在用Lisview?RecyclerView都已经出来一年多了!

想必大家多或多或少的接触过或者了解过RecyclerView,为什么没有用起来,原因大概如下?

ListView我用的挺好的,为什么要换RecyclerView?

ListView稳定,熟悉,还知道很多开源库,特别的好用!

RecyclerView不能添加头部,ListView能!

RecyclerView

在Andorid 5.0出来不久,我就已经写过RecyclerView的简单介绍以及基本使用,不了解的可以看看ListView升级版RecyclerView,了解过的同学可以忽略,并往下看。

RecyclerView最大的优势就是灵活,RecyclerView只需改变一行代码就可以变化多种不同的布局显示排版,这一点对于开发者是非常方便的!

RecyclerView.Adapter,比BaseAdapter做了更好的封装,把BaseAdapter的getView方法拆分成onCreateViewHolder方法和onBindViewHolder方法,强制需要创建ViewHolder,这样的好处就是避免了初学者写性能不佳的代码

在实战中我们会遇到什么问题?

get到下面的技能就能够在使用RcyclerView的大路上畅通无阻了!

添加分割线

添加点按效果

列表动画

改变某个数据保持当前位置

添加头部尾部

列表分组

各种效果集成Demo

更灵活的RecyclerView

添加分割线

RecyclerViewrecyclerView=(RecyclerView) findViewById(R.id.recyclerview);

recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this)

 .color(Color.RED)

 .sizeResId(R.dimen.divider)

.marginResId(R.dimen.leftmargin,R.dimen.rightmargin)

.build());

//通过以下方法添加分割线mRecyclerView.addItemDecoration();

HorizontalDividerItemDecoration需要继承RecyclerView.ItemDecoration这个抽象类实现一些方法 。但是我感觉过于麻烦,所以我想到的是:

直接在item_view里面底部自己添加一根线布局,这样就无需重写了,并且这样还有个好处就是,如果细心的同学会发现,添加分割线,最后一个item下面不会有分割线,显然当数据量不足一个屏幕的时候显得很突兀,但是在item_view下面添加一个线的布局则不会出现这种情况

添加点按效果

RecyclerView直接在item_view里面配置即可selector即可。

动画

一个好的用户体验就是要有操作动画的过渡,而不是生硬的刷新列表。

推荐一个RecyclerView的动画库(recyclerview-animators


RecyclerView自带添加、删除动画,而ListView则需添加额外的代码才能实现。

删除调用RecyclerView的adapter的notifyItemRemoved

添加调用RecyclerView的adapter的notifyItemInserted

说到adapter我们就来说说RecyclerView.Adapter和BaseAdapter相比,额外提供了一下这些方法:

// 数据发生了改变,那调用这个方法,传入改变对象的位置。publicfinalvoidnotifyItemChanged(intposition);// 可以刷新从positionStart开始itemCount数量的item了publicfinalvoidnotifyItemRangeChanged(intpositionStart,intitemCount);// 添加,传入对象的位置。publicfinalvoidnotifyItemInserted(intposition);// 删除,传入对象的位置。publicfinalvoidnotifyItemRemoved(intposition);// 对象从fromPosition移动到toPositionpublicfinalvoidnotifyItemMoved(intfromPosition,inttoPosition);//批量添加publicfinalvoidnotifyItemRangeInserted(intpositionStart,intitemCount);//批量删除publicfinalvoidnotifyItemRangeRemoved(intpositionStart,intitemCount);

改变列表某个布局状态且保持当前位置

这种需求是普遍存在的,就是改变列表某一个item数据,然后刷新列表,如果是ListView刷新后则会回到最顶部,而RecyclerView同样的操作但是原来滑动的位置不变。

各种解决方案的RecyclerView的Adapter

BaseRecyclerViewAdapterHelper

效果展示

布局更灵活的RecyclerView

twoway-view封装了RecyclerView常用方法,如click等等,以及支持了更多不同的布局,使得RecyclerView使用起来更简单!

更灵活的添加分割线

分割线使用请参考 以下链接:

https://github.com/yqritc/RecyclerView-FlexibleDivider


部分文字引用了:陈宇明

参考链接:http://www.jianshu.com/p/a92955be0a3e


推荐阅读更多精彩内容