初识RecyclerView
2016-04-27 17:23
351 查看
recyclerview是一个比listview更加高级的列表组件,以所谓的插拔式设计轻松实现线性布局,网格布局,以及流式布局。
和listview一样,也需要从写一下adapter,这个adapter继承自RecyclerView.Adapter<>。如果你有注意到这个里面是个泛型,就是说Adapter里面装的类类型都是MyViewHolder类型的
然后有个onCreateViewHolder方法,用来初始化view,可以看到返回的是ViewHolder类型的数据
UI获得之后就是数据的填充了,onBindViewHolder就是用来填充数据的。
我们可以看到ViewHolder在Recyclerview中就是一个内部抽象类,所以当你在子类使用的时候会有点摸不着头脑,这点要注意。
这里面主要是进行UI组件的实例化
以上是adapter类的代码,接下来我们回到MainActivity中,我们来看看他的插拔式设计体现:
这一步老生常谈了好不,实例化UI组件
这个就比较有意思了,我说了,recyclerview自带布局,这里只要稍微new一下,就可以使用不同的布局了,非常方便快捷,下面是个瀑布流式的布局。
其中setLayoutManager中的参数是传入一个布局对象的实例。StaggredGridLayoutManager中有两个参数,需要配合使用,比如第二个参数是VERTICAL,那么第一个参数就表示有记列,如果第二个参数是
HORIZONTAL,那么第一个参数就表示有几行,而且是横向滚动。
还有两个十分重要的效果,就是item的动画和分割线,这里就有点不方便了,因为recycleview并没有提供现成的分割线修饰,所以我们就不得不自己来写咯,所谓特效就是在你添加或者删除的时候的效果
如果你稍微细心一点就可以发现,我曹,怎么没有按钮的点击事件,好,终于被你发现了,就蛋疼在这里。我们知道一些常用的组件都是有事件监听方法的,比如textview,button,imageview等等。recyclerview并没有给viewholder提供设置监听事件的方法,就是例如这样的方法setOnClickListener(),所以我们需要自己写个回调方法。但是这里还有另一个解决方案,其实组件都是有事件监听方法的,所以没有必要非给item设定什么监听方法,使用组件的监听方法一样也可以。
ok,到此这个组件就介绍完毕了,像添加分割线这样的代码和Animator这样的代码不在今天的学习范围之内。有空准备看看源代码。
和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这样的代码不在今天的学习范围之内。有空准备看看源代码。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories