美文网首页
RecyclerView基础知识

RecyclerView基础知识

作者: 撕裂的我 | 来源:发表于2017-09-13 23:54 被阅读0次

    RecyclerView的前身就是ListView,为什么有了ListView还需要RecyclerView呢?因为ListView天生就有很大的缺陷。

    ListView的缺陷

    1.ListView的扩展性不好,只能实现纵向滚动,不支持横向滚动。
    2.ListView的点击事件setOnItemClickListener()不能做到精确定位(例如ListView的item中还有一个按钮)。

    RecyclerView的基本用法

    • 需要添加support库
    • 在布局中使用RecyclerView
      ps:因为RecyclerView不是内置在系统SDK当中,所以需要写出完整的包路径
    • 代码中找到RecyclerView,设置布局管理器,适配器、

    布局管理器
    RecyclerView提供了3种布局管理器1.LinearLayoutManager;2.GridLayoutManager;3.StaggeredGridLayoutManager。

    1.LinearLayoutManager默认是纵向排列的,显示的item是从上到下的。如果想横向排列,及从左到右显示item需要设置方向。

    LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(LinearLayoutManager.HORIZONTAL);
    

    2.GridLayoutManager是网格布局,可以自己设置分为几列。
    3.StaggeredGridLayoutManager是瀑布流布局,可以轻松的实现瀑布流的效果。我们也可以设置瀑布流的排列方式(横向,纵向)和行(列)数。
    适配器
    适配器需要基础RecyclerView.Adapter;必须要实现3个方法。
    1.onCreateViewHolder();2.onBindViewHolder();getItemCount()。

    1.onCreateViewHolder()用于创建ViewHolder实例(一般都是内部类,viewHolder要继承RecyclerView.ViewHolder),然后将这个ViewHolder实例返回。

    2.onBindViewHolder()对RecyclerView的子项数据进行赋值,会在每个子项被滚动到屏幕内的时候执行。
    3.getItemCount()告诉RecyclerView有多少子项,直接返回数据源的长度。

    • 点击事件
      RecyclerView并没有和ListView一样的setOnItemTouchListener(),所有的点击事件都要具体的View去注册(可通过ViewHolder获取到相应的View
      然后setOnClickListener()),这样就解决了开头提到ListView的点击问题。
      可以通过下面的代码获取到postion,然后通过postion做相关操作。
    int position = holder.getAdapterPosition();
    

    补充
    ListView的布局排列是有自身去管理的,而RecyclerView将这个工作交给了LayoutManager,LayoutManager中制定了一套可以扩展的布局排列接口,子类只需要按照接口的规范来实现,就能定制出各种不同排列方式的布局。

    参考文章:郭霖 《第一行代码》

    相关文章

      网友评论

          本文标题:RecyclerView基础知识

          本文链接:https://www.haomeiwen.com/subject/sjcrsxtx.html