用法
导入依赖库
1 | implementation 'androidx.recyclerview:recyclerview:1.0.0' |
主布局添加控件
1 |
|
子布局 fruit_item.xml
1 |
|
实体类 Fruit
1 | public class Fruit { |
新建类FruitAdapter
继承自RecyclerView.Adapter
,指定泛型为FruitAdapter.ViewHolder
(在该adapter中新建ViewHolder类继承自RecyclerView.ViewHolder)
- 首先定义了内部类
ViewHolder
,继承自RecyclerView.ViewHolder
,其中传入了一个itemView
参数,这个参数继承通常是RecycleView
子项的最外层布局,通过它就能取到ImageView
和TextView
了 - 必须重写的三个方法
onCreateViewHolder()
: 用来创建ViewHolder
实例,在这个方法中,将 子布局 传入创建的ViewHolder
实例,然后将其返回onBindViewHolder()
:对RecyclerView
子项数据赋值,会在子项布局滚动到屏幕时执行getItemCount()
:返回数据源的长度,用来判断子布局的个数
1 | public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { |
主活动修改
- 先通过
initFruit()
初始化水果数据,接着创建RecycleView
实例,然后创建了一个LinearLayoutManger
对象,并将它设置到RecycleView
中,表示使用线性布局,最后创建FruitAdapter
实例建立数据关联
1 | public class MainActivity extends AppCompatActivity { |
横向滚动
只修改调用的LineatLayout属性,修改为水平,加入一行代码即可
1 | protected void onCreate(Bundle savedInstanceState) { |
瀑布流效果
使用StaggeredGridLayoutManger布局,仅修改一行代码:
StaggeredGridLayoutManger
的构造函数接收两个参数,第一个参数用来指定布局列数;第二个参数指定排列方向
1 | protected void onCreate(Bundle savedInstanceState) { |
点击事件简单实现
多种方式,可在onBindViewHolder()中实现
1
2
3
4
5
6
7
8
9
10
11
12
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
holder.fruitImage.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d("tag",fruit.getName());
}
});
}