浅谈ListView和RecyclerView

      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了呢?哈哈。

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值