Android基础知识—— RecyclerView

2018-06-08  本文已影响9人  银月银月

1.RecyclerView是什么?

RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。看到这也许有人会问,不是已经有ListView了吗,为什么还要RecyclerView呢?这就牵扯到第二个问题了。

2.RecyclerView的优点是什么?

根据官方的介绍RecyclerView是ListView的升级版,既然如此那RecyclerView必然有它的优点,现就RecylerView相对于ListView的优点罗列如下: 

① RecyclerView封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。 

② 提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager等),也就是说RecyclerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。你想控制Item的分隔线,可以通过继承RecyclerView的ItemDecoration这个类,然后针对自己的业务需求去抒写代码。 

③ 可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecyclerView有其自己默认的实现。

recyclerView = (RecyclerView) findViewById(R.id.recyclerView); LinearLayoutManager layoutManager =newLinearLayoutManager(this);//设置布局管理器 recyclerView.setLayoutManager(layoutManager);//设置为垂直布局,这也是默认的 layoutManager.setOrientation(OrientationHelper. VERTICAL);//设置Adapter recyclerView.setAdapter(recycleAdapter);//设置分隔线 recyclerView.addItemDecoration(newDividerGridItemDecoration(this));//设置增加或删除条目的动画 recyclerView.setItemAnimator(newDefaultItemAnimator());

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

LinearLayoutManager layoutManager = new LinearLayoutManager(this ); 

 //设置布局管理器

  recyclerView.setLayoutManager(layoutManager);  

//设置为垂直布局,这也是默认的 

 layoutManager.setOrientation(OrientationHelper. VERTICAL);  

//设置Adapter 

 recyclerView.setAdapter(recycleAdapter); 

//设置分隔线  

recyclerView.addItemDecoration( new DividerGridItemDecoration(this )); 

 //设置增加或删除条目的动画 

 recyclerView.setItemAnimator( new DefaultItemAnimator()); 

可以看到对RecylerView的设置过程,比ListView要复杂一些,虽然代码抒写上有点复杂,但它的扩展性是极高的。在了解了RecyclerView的一些控制之后,紧接着来看看它的Adapter的写法,RecyclerView的Adapter与ListView的Adapter还是有点区别的,RecyclerView.Adapter,需要实现3个方法: 

a) onCreateViewHolder() 

这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。

b) onBindViewHolder() 

这个方法主要用于适配渲染数据到View中。方法提供给你了一viewHolder而不是原来的convertView。

c) getItemCount() 

这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。接下来通过几个小的实例帮助大家更深入的了解RecyclerView的用法。

有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。

你想要控制其显示的方式,请通过布局管理器LayoutManager

你想要控制Item间的间隔(可绘制),请通过ItemDecoration

你想要控制Item增删的动画,请通过ItemAnimator

你想要控制点击、长按事件,请自己写。

 

LayoutManager

RecyclerView.LayoutManager吧,这是一个抽象类,好在系统提供了3个实现类:

LinearLayoutManager 现行管理器,支持横向、纵向。

GridLayoutManager 网格布局管理器   // mRecyclerView.setLayoutManager(new GridLayoutManager(this,4)); 

StaggeredGridLayoutManager 瀑布流式布局管理器    mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,

        StaggeredGridLayoutManager.HORIZONTAL));

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));

上一篇下一篇

猜你喜欢

热点阅读