一、用法介绍
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,再赋值。