(一)RecyclerView简单使用总结

来源:互联网 发布:oracle数据库迁移文档 编辑:程序博客网 时间:2024/06/16 17:48

谷歌推出Recyclerview的时间也不短了,今天就简单记录一下他的使用总结


第一步,我们都知道必须通过导入support-v7才能对其进行使用,studio的引入方式就是:compile 'com.android.support:recyclerview-v7:24.0.0'



第二步:adapter,adapter继承的是RecyclerView.Adapter。需要实现的三个方法是:

①onCreateViewHolder()
    这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
②onBindViewHolder()
     这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView。通过这个holder我们能够直接拿到item中的view进行数据渲染
③getItemCount()
      这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。
注意:item的布局文件,如果父布局高度是matchParent的话,每个item的高度就会是整屏那么大。此处一定要注意
第三步:渲染自己想要的效果
(1)、listview的效果(线性管理器):
//设置布局管理器rv_recycler.setLayoutManager(new LinearLayoutManager(this));//添加数据 rv_recycler.setAdapter(myadapter = new MyAdapter(this,list));

recyclerview默认是没有分割线的,也没有driver属性,可以通过下边的方式添加分割线,系统默认的灰色线条,也可以改变分割线的样式,这里不做说明

rv_recycler.addItemDecoration(new DividerItemDecoration(this,LinearLayout.VERTICAL));
(2)、gridview的效果(网格布局管理器):

//设置布局管理器,第二个参数是列数rv_recycler.setLayoutManager(new GridLayoutManager(this,2));rv_recycler.setAdapter(myadapter = new MyAdapter(this,list));rv_recycler.addItemDecoration(new DividerGridItemDecoration(this));
(3)、接下来是重点了,瀑布流的效果(瀑布流式布局管理器):

//第一个参数和第二个参数是对应的,第二个是方向,第一个是对应的列数或者行数rv_recycler.setLayoutManager(new StaggeredGridLayoutManager(2,        StaggeredGridLayoutManager.VERTICAL));rv_recycler.setAdapter(myadapter = new MyAdapter(this,list));rv_recycler.addItemDecoration(new DividerGridItemDecoration(this));
此处需要注意:如果方向是垂直的就需要将item的父布局宽度设置为mp,否则出现的效果大家有兴趣了可以自己尝试;如果是水平,高度设置为mp。总之再用流式布局管理器的时候item的布局使用需要格外小心哈(下次有时间了可以补充上布局的问题,图文表述,方便大家理解同时也给自己加强下印象)


离我们心心念念的瀑布流只差一步了,很简单,那就是动态的设置item的宽高了,上代码:

ViewGroup.LayoutParams params = tv.getLayoutParams();//设置图片的相对于屏幕的宽高比params.width = AppUtils.getScreenDispaly(context)[0]/3;//随机计算出高度params.height =  (int) (200 + Math.random() * 400) ;tv.setLayoutParams(params);
仅此而已,优美的瀑布流的效果就出来了,有没有很简单啊。

1 0