目录
可能需要的知识:AS| (二)Android Studio快捷键【JetBrains家族】_android studio jetbrains-CSDN博客
一、概述
- 是什么? 一种Android对象
- 干什么? 是连接后端数据data和前端显示UI(View)之间一个重要纽带
- 有什么用? 填充数据,即把所携带的数据填充(映射)到用户界面上
二、继承关系
(一)继承结构图
(二)常用adapter
- BaseAdapter(实际开发用的最多):抽象类,所有Adapter的父类,使用时继承并重写相关方法
- ArrayAdapter(最简单):支持泛型操作,但只能展现一行文字
- SimpleAdapter(较常用):具有良好扩展性,可以自定义多种效果
- SimpleCursorAdapter(不推荐):用于显示简单文本,一般在数据库那用到,有点过时
三、RecyclerView.Adapter
(一)概述
RecyclerView是Android用于取代ListView的SDK,灵活性和可替代性都比ListView更好。其可以实现数据纵向滚动和横向滚动(ListView做不到横向滚动)。
- RecyclerView也存在一些问题: 高度不能自适应、最后一个 Item 显示不全被遮挡等。而无论ListView还是RecyclerView都必不可少地会使用到适配器,其配置比较繁琐。
- RecycleView使用的适配器并不是之前的BaseAdapter,而是需要继承RecyclerView.Adapter<VH extends RecycleView.ViewHolder>。
可以看出,RecycleView.Adapter是一个抽象类,并支持泛型
补充:抽象类,不能被实例化,即不能直接new一个抽象类,但有自己的构造方法,需要通过继承去实现抽象方法
public abstract static class Adapter<VH extends ViewHolder> {
……
}
(二)方法说明
1.定义MyAdapter
继承RecyclerView.Adapter
后,Android Stuido
提醒需要重写3个方法:
//方法1:
public RecyclerView.ViewHolder onCreateViewHolder
(ViewGroup parent, int viewType)
//方法2:
public void onBindViewHolder
(RecyclerView.ViewHolder holder, int position)
//方法3:
public int getItemCount()
2.定义一个静态内部类ViewHolder继承RecycelrView.ViewHolder
在指定了泛型为ViewHoler
后,方法2
也会根据泛型改变onBindViewHolder(RecyclerHolder holder, int position)
以上步骤完成后,代码如下:
package com.example.recycleview.RecyclerViewDemo;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
/**1.定义Adapter*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
/**3.重写3个方法*/
/**
* @param parent 理解为item的ViewGroup,item的子控件加载在其中
* @param viewType item的类型,根据viewType创建
不同类型的ViewHolder——>加载不同类型的item
* @return
*/
//创建ViewHolder
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
/**
* @param holder 就是上面onCreateViewHolder中创建的ViewHolder
* @param position item对应 数据源集合(DataList) 的position
*/
//给ViewHolder绑定数据
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
}
//实际item的数量
@Override
public int getItemCount() {
return 0;
}
/** 2.定义ViewHolder*/
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
四、使用示例