Listview想必大家都知道,用法更是熟的不能再熟了,但是ListView有它的局限性,扩展性也不太好,比如它只能纵向滚动,无法实现横向滚动。为此android提供了一个更强大的滚动控件——RecyclerView,它是一个增强版的ListView,优化了ListView中存在的各种不足,目前Android官方更加推荐使用RecyclerView.
如何使用?
我们在用之前还是要添加依赖库:compile 'com.android.support:recyclerview-v7:24.2.1
在xml布局文件中做如此修改:将ListView标签改为 <android.support.v7.widget.RecyclerView/>,因为本博客主要介绍这两个控件的区别,所以不再粘贴代码,只对他们在使用时的不同之处做一下讲解。
同样需要一个适配器,只是RecyclerView继承RecyclerView.Adapter<MyAdapter.ViewHolder> 当然ViewHolder是MyAdapter的内部类。这样MyAdapter就必须重写RecyclerView.Adapter的三个方法onCreateViewHolder(),加载布局文件,创建ViewHolder实例,返回值为ViewHolder; onBindViewHolder(),为控件赋值处理数据;getItemCount()返回RecycleView一共有多少子项也就是说数据集的数据条数目。
与ListView相比,分工更明确,更容易理解。
Activity的onCreate()方法中我们需要创建一个LayoutManager用来指定RecyclerView的布局方式:LinearLayoutManager线性布局,GridLayoutManager网格布局和StaggeredGridLayoutManager瀑布流布局。
下面举例说明:
LinearLayoutManager:
LinearLayoutManager layoutManager = new LinearLayoutManager(this)
recyclerView.setLayoutManager(layoutManager);
LinearLayoutManager默认是vertical竖向排列,若是想横向滚动排列,设置item布局的宽度为定值,比如100dp,onCreate()方法中再加一行代码
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)
StaggeredGridLayoutManager:
需要修改item布局文件的layout_width = match_parent,不能设置为指定值,因为瀑布流布局的宽度应该是根据布局的列数来自动适配的。
onCreate()方法中应该这样写
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
3代表了列数,StaggeredGridLayoutManager.VERTICAL代表了瀑布流的方向,表示布局纵向排列
还要一个值得一提的知识就是RecyclerView的点击事件。
RecyclerView没有像ListView一样的setOnItemClickListener()事件,而是需要我们自己给子项具体的View设置注册点击事件,这个在onCreateViewHolder中去写点击事件就OK了。
像我们认为很复杂的聊天记录界面,用这个RecyclerView去实现最合适不过了。
最后我再写两个RecycleView最常用的2个方法,当我们的数据源改变需要更新adapter时,用adapter.notifyItemInserted(size - 1);当我们需要定位到最后一行,保证用户随时看到最新的,就像QQ聊天界面一样,我们需要用到 recyclerView.scrollToPosition(size-1).
好了,这个讲完了,下个项目,大家是不是可以尝试用RecyclerView而不是ListView了呢?哈哈。