(4)RecyclerVIew

有关内容

  • 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()
返回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
  • 相应的点击事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值