【基础】RecyclerView

一、用法介绍

1、布局管理器

    包含三种布局管理器:LinearLayoutManager(线性布局)、GridLayoutManager(网格布局)、StaggeredGridLayoutManager(交错网格布局,即瀑布流布局,单词staggered在这里意为“交错的,错开的”)。注意:这里的交错网格布局(瀑布流布局)是指纵向排布时,每个ItemView的宽度相同而高度不同,横向排布时,每个ItemView的高度相同而宽度不同。

    每个布局管理器都提供了一些api可以对布局参数进行修改。如:

线性布局管理器可以设置数据横向展示:

//设置ItemView横向排列
LinearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

线性布局管理器设置数据反向展示:

//设置数据反向展示
LinearLayoutManager.setReverseLayout(true);

2、适配器Adapter

    有三个方法必须实现:

  • onCreateViewHolder    创建并返回ViewHolder
  • onBindViewHolder    绑定数据与ViewHolder
  • getItemCount    返回数据量

二、开发中遇到的坑记录

1、滑动后ItemView中Switch开关状态错乱(重要)

问题描述:当ItemView中包含需要设置状态变化回调的控件时,如Switch需要设置OnCheckedChangeListener,由于RecyclerView的复用机制,在新的条目进行OnBindViewHolder时,可能复用了某个之前回收的ItemView,如果此时直接根据List的数据对ItemView中的Switch开关进行初始化,会导致控件相应之前设置的回调,而回调中往往又会修改List中的数据,这样会导致之前被回收掉的条目对应的List中的数据(开关状态)莫名奇妙的被修改。

//TODO 增加代码示例

解决方法:在onBindViewHolder()中,在根据List中的数据对这种需要设置状态变化监听的控件进行初始化时,先将控件的监听值为null,再赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值