RecyclerView

来源:互联网 发布:python和c 的区别 编辑:程序博客网 时间:2024/06/14 18:06
  • RecyclerView最大的优势就是灵活,RecyclerView只需改变一行代码就可以变化多种不同的布局显示排版,这一点对于开发者是非常方便的!

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


添加分割线


//通过以下方法添加分割线

mRecyclerView.addItemDecoration(newDividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));


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

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


添加点按效果


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


动画


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


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


(由于 GIF 动图超过微信大小,请大家脑补一下。或点击「阅读原文」,在网页版中查看。 )


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移动到toPosition

publicfinalvoidnotifyItemMoved(intfromPosition,inttoPosition);

//批量添加

publicfinalvoidnotifyItemRangeInserted(intpositionStart,intitemCount);

//批量删除

publicfinalvoidnotifyItemRangeRemoved(intpositionStart,intitemCount);


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


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


0 0
原创粉丝点击