(4)

有关内容

  • Adapter
  • LayoutManager
  • itemDecoration
  • ItemAnimatorr
  • ItemTouchHelper

    了解RecyclerView

  • RecyclerView封装了viewholder的回收复用,编写Adapter面向的是ViewHolder而不再是View
  • 提供了一种插拔式的体验,高度的解耦,异常的灵活,针对每一个Item的显示,RecyclerView专门抽取了相应的类,使其扩展性非常强。
  • 设置布局管理器以控制Item的布局方式,横向、竖向以及瀑布流方式。
  • 可设置Item的间隔样式(可绘制)。
  • 可以控制Item增删的动画。

    RecyclerView控件是Android 5.0,谷歌公司推出的,是support-v7包中的新组件,所以当我们要使用该控件时,首先需要在项目的build.gradle中添加相应的依赖库

RecyclerView控件是Android 5.0,谷歌公司推出的,是support-v7包中的新组件,所以当我们要使用该控件时,首先需要在项目的build.gradle中添加相应的依赖库

RecyclerView的相关类

  • RecyclerView.Adapter:可以托管数据集合,为每一项Item创建视图并且绑定数据
  • RecyclerView.ViewHolder:承载Item视图的子布局
  • RecyclerView.LayoutManager:负责Item视图的布局的显示管理
  • RecyclerView.ItemDecoration:画分割线
  • RecyclerView.ItemAnimator:负责处理数据添加或者删除时候的动画效果

RecyclerView的基本使用步骤

  • 获取RecyclerView控件
RecyclerView  recyclerView  = ( RecyclerView) findViewById(R.id.xxx)
  • 给获取的RecyclerView设置布局管理器
  • 创建并设置自定义适配器
  • 将RecyclerView与自定义的适配器的对象绑定

Adapter

  • 创建View和ViewHolder,后者作为整个复用机制的跟踪单元。
  • 把具体位置的Item和ViewHolder进行绑定,并存储相关的信息。
  • 通知RecyclerView数据变化,支持局部的更新,在提高效率的同同时也有效的支持动画。
  • Item点击事件的处理。
  • 多类型布局的支持。

自定义适配器

  • 继承于RecyclerView.Adapter
  • 构造函数

    初始我们想要展示的数据

  • 创建内部类ViewHolder(View view)继承于RecyclerView.Adapter
    这个内部类用来获取RecyclerView中每个Item的布局以及和它相关联的数据,同时也是RecyclerView.Adapter 中需要指定的VH类型
  • 实现抽象方法
    • onCreateViewHolder(ViewGroup parent, int viewType)

      当RecyclerView需要我们提供类型为viewType的新ViewHolder时,会回调这个方法。
      在这里,我们实例化出了Item的根布局,并返回一个和它绑定的ViewHolder。

    • onBindViewHolder(VH viewHolder, int position)

      当RecyclerView需要展示对应position位置的数据时会回调这个方法。
      通过viewHolder中持有的对应position上的View,我们可以更新视图。

    • getItemCount()

      扫描二维码关注公众号,回复: 5775391 查看本文章

      返回Item的总数。

LayoutMannager

  • Position:负责view的摆放,线性、宫格、瀑布流式或者任意类型
  • Scroll:处理滚动事件,RecyclerView负责接收事件,最终由LayoutManage处理滚动后的逻辑,因为只有它知道View的具体摆放位置。

三种布局管理器

  • 线性布局,横向或者纵向滑动列表
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
     recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
  • 表格布局
GridLayoutManager layoutManager=new GridLayoutManager(this,4);
  • 瀑流式布局
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);

RecyclerView的点击事件

先获取点击的数据元素的postion,再通过position获取被点击的Fruit的实例,然后通过toast显示被点击的实例的内容。

自定义REcyclerView的Item间分割线

  • 通过方法引入addItemDecoration方法就可以画出默认分割线
  • 如果要画出自定义分割线,就要在drawable下新建一个xml文件,然后在values文件下styles.xml文件中用之前新建的xml文件替换RecyclerView自带的listDivider
  • 自定义ItemDecoration.

数据更新

  • 数据更新分为两种
      • 除了Item所对应的数据被更新外,没有其他变化使用, notifyXXXChanged()。
      • 位置变化:Item在数据集中被插入、删除或者移动,使用notifyXXXInsert/Removed/Moved()方法。
  • 局部的刷新
notifyItemChanged(int postion) //position的数据变化 一条数据 
notifyItemInserted(int position) //在position的下方插入了一条数据
notifyItemRemoved(int postion) //移除了position的数据 
notifyItemRangeChanged(int postion, int n) //从position开始,往下n条数据发生了改变 notifyItemRangeInserted(int position, int n) //从position开始,插入了n条数据 notifyItemRangeRemoved(int postion, int n) //从position开始,移除了n条数据
  • 整体刷新

    notifyDataSetChanged()会吧当前所有的Item和结构都视为已经失效的,因此它会让LayoutManager重新绑定Item,并对它们重新布局。

ItemAnimator动画

  • RecyclerView提供了默认的ItemAnimator实现类:DefaultitemAnimator如果没有特殊的需求,默认使用这个动画即可。
mRecyclerView.setItemAnimator(new DefaultitemAnimator());
  • RecyclerView的Item增添删除
    • 在Adapter里面添加方法实现相应逻辑:list数组的add/remove方法的调用;
      界面的刷新
addItem(int position)   //在position下面增添一个Item
     removeItem(int position)//删除position的Item
  • 相应的点击事件

猜你喜欢

转载自www.cnblogs.com/lyszyl/p/10654578.html
4
(4)
4/4
今日推荐