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

(一)RecyclerView简单使用总结

2016-10-26 14:28 302 查看
谷歌推出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);

仅此而已,优美的瀑布流的效果就出来了,有没有很简单啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息