您的位置:首页 > 移动开发 > Android开发

初识RecyclerView

2016-04-27 17:23 351 查看
recyclerview是一个比listview更加高级的列表组件,以所谓的插拔式设计轻松实现线性布局,网格布局,以及流式布局。
和listview一样,也需要从写一下adapter,这个adapter继承自RecyclerView.Adapter<>。如果你有注意到这个里面是个泛型,就是说Adapter里面装的类类型都是MyViewHolder类型的

RecyclerView.Adapter<HomeAdapter.MyViewHolder>

然后有个onCreateViewHolder方法,用来初始化view,可以看到返回的是ViewHolder类型的数据

public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)

UI获得之后就是数据的填充了,onBindViewHolder就是用来填充数据的。

public void onBindViewHolder(final MyViewHolder holder, final int position)

我们可以看到ViewHolder在Recyclerview中就是一个内部抽象类,所以当你在子类使用的时候会有点摸不着头脑,这点要注意。

class MyViewHolder extends ViewHolder

这里面主要是进行UI组件的实例化

以上是adapter类的代码,接下来我们回到MainActivity中,我们来看看他的插拔式设计体现:
这一步老生常谈了好不,实例化UI组件

mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);

这个就比较有意思了,我说了,recyclerview自带布局,这里只要稍微new一下,就可以使用不同的布局了,非常方便快捷,下面是个瀑布流式的布局。
其中setLayoutManager中的参数是传入一个布局对象的实例。StaggredGridLayoutManager中有两个参数,需要配合使用,比如第二个参数是VERTICAL,那么第一个参数就表示有记列,如果第二个参数是
HORIZONTAL,那么第一个参数就表示有几行,而且是横向滚动。

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

还有两个十分重要的效果,就是item的动画和分割线,这里就有点不方便了,因为recycleview并没有提供现成的分割线修饰,所以我们就不得不自己来写咯,所谓特效就是在你添加或者删除的时候的效果

mRecyclerView.addItemDecoration(new DividerGridItemDecoration(this));
// 设置item动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());


如果你稍微细心一点就可以发现,我曹,怎么没有按钮的点击事件,好,终于被你发现了,就蛋疼在这里。我们知道一些常用的组件都是有事件监听方法的,比如textview,button,imageview等等。recyclerview并没有给viewholder提供设置监听事件的方法,就是例如这样的方法setOnClickListener(),所以我们需要自己写个回调方法。但是这里还有另一个解决方案,其实组件都是有事件监听方法的,所以没有必要非给item设定什么监听方法,使用组件的监听方法一样也可以。

ok,到此这个组件就介绍完毕了,像添加分割线这样的代码和Animator这样的代码不在今天的学习范围之内。有空准备看看源代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android