RecyclerView 梳理

2017-09-04  本文已影响0人  kiplening

初识RecyclerView

RecyclerView是官方推出的可以灵活展示大量数据的View控件,比ListView更加灵活也更强大。

术语

RecycleView中有些属性值得我们注意。

Position In RecyclerView

包括layout position和Adapter Position,除了调用Adapter.notify*事件计算更新的布局之外,这两个位置信息是一样的。

Layout position,表示最新布局下的位置信息,可调用getLayoutPosition()获取,获取到位置之后可以调用findViewHolderForLayoutPosition(int)方法获取对应位置的ViewHolder。

Adapter position,表示适配器中元素的位置信息,同样有getAdapterPosition()方法 和findViewHolderForAdapterPosition()。需要注意的是,在程序调用notifyDataChanged()方法后,但是新的布局 还未被计算出来时,getAdapterPosition()不能返回正确的值,我们应当对NoPosition 或者null等返回值做相应的处理。

When writing a RecyclerView.LayoutManager you almost always want to use layout positions whereas when writing an RecyclerView.Adapter, you probably want to use adapter positions.

RecyclerView的使用

RecyclerView的使用和ListView的使用有很多相似之处,只不过实现方式更加了灵活需要自行设置的属性更多。RecyclerView必须设置如下属性:

先简单讲述LayoutManager,这个属性控制可dataSet在View中的展示方式,官方提供了三中默认的实现:LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager。通过设置不同的LayoutManager可以实现各种样式的布局。

ItemAnimator,可以配置item的增加和删除动画,系统提供了默认的实现,我们也可以通过编写代码实现各种酷炫的动画效果。github上面有很多第三方的动画,使用十分方便。需要注意的是,只有使用notifyItemInsert()和notifyItemRemove()方法进行数据更新才会有动画效果,直接使用notifyDataSetChanged()方法是没有动画效果的。

Adapter,实现了布局和dataSet之间的绑定。相信使用过ListView后对适配器一定不会陌生。

ItemDecoration,通过mRecyclerView.addItemDecoration()方法添加分割线,我们可以继承抽象类RecyclerView.ItemDecoration来实现自己的分割线。这个官方只是提供了抽象类,并没有提供任何默认的实现。

RecyclerView的优势

RecyclerView的官方介绍:A flexible view for providing a limited window into a large data set.

简单的说明了RecyclerView的最大优点——灵活。

通过上面的介绍我们也发现,RecyclerView的布局、数据绑定、动画和分割线都可以自行定义。

上一篇 下一篇

猜你喜欢

热点阅读