Android RecyclerView对应的适配器中方法的执行顺序和具体作用详解

简介: Android RecyclerView对应的适配器中方法的执行顺序和具体作用详解

1.代码的执行顺序为,首次进入会先调用getItemCount(),返回条目的个数,之后会分别调用

getItemCount 作用:返回条目的个数

getItemViewType 作用:修改相应position的视图类型

onCreateViewHolder 作用:这个方法用于创建条目View

onBindViewHolder 作用:这个方法是用于绑定holder的,一般用来设置数据

具体适配器的代码如下,有具体的注释可以自己理解一下:

/**
 * @Author: ly
 * @Date: 2022/12/10
 * @Description: RecyclerView对应的适配器
 */
public class ExerciseAdapter extends RecyclerView.Adapter<ExerciseAdapter.ExerciseViewHolder> {
    private static final String TAG = "ExerciseAdapter";
    private List<String> stringList = new ArrayList<>();
    public void setStringList(List<String> stringList) {
        this.stringList = stringList;
    }
    /**
     * 这个方法用于创建条目View
     *
     * @param parent   新视图绑定后将添加到其中的ViewGroup
     * @param viewType 视图类型
     * @return 不同的ViewType创建不同的ViewHolder子类
     */
    @NonNull
    @Override
    public ExerciseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Log.e(TAG, "onCreateViewHolder   " + "  viewType: " + viewType);
        ItemExerciseBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_exercise, parent, false);
        return new ExerciseViewHolder(binding);
    }
    /**
     * 这个方法是用于绑定holder的,一般用来设置数据
     *
     * @param holder   判断该holder属于的ViewHolder 为不同的viewType添加不同的绑定方法
     * @param position 对应的条目索引
     */
    @Override
    public void onBindViewHolder(@NonNull ExerciseViewHolder holder, int position) {
        holder.bindData(position);
    }
    /**
     * 返回条目的个数
     *
     * @return
     */
    @Override
    public int getItemCount() {
        Log.e(TAG, "getItemCount");
        return 100;
    }
    /**
     * 修改相应position的视图类型
     *
     * @param position 条目索引
     * @return 默认返回0
     */
    @Override
    public int getItemViewType(int position) {
        Log.e(TAG, "getItemViewType " + "position:" + position);
        return super.getItemViewType(position);
    }
    public class ExerciseViewHolder extends RecyclerView.ViewHolder {
        ItemExerciseBinding binding;
        public ExerciseViewHolder(@NonNull ItemExerciseBinding itemView) {
            super(itemView.getRoot());
            binding = itemView;
        }
        /**
         * 这个方法用于设置数据
         *
         * @param position
         */
        public void bindData(int position) {
            Log.e(TAG, "onBindViewHolder   " + "  position: " + position);
            binding.tvExercise.setText(stringList.get(position));
        }
    }
}

首次进入页面输出的日志为:

getItemCount 这个会先执行一次,之后会依次执行以下四个方法
getItemCount
getItemViewType position:0
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 0
getItemCount
getItemViewType position:1
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 1
getItemCount
getItemViewType position:2
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 2
getItemCount
getItemViewType position:3
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 3
getItemCount
getItemViewType position:4
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 4
getItemCount
getItemViewType position:5
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 5
getItemCount
getItemViewType position:6
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 6
getItemCount
getItemViewType position:7
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 7
getItemCount
getItemViewType position:8
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 8
getItemCount
getItemViewType position:9
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 9
getItemCount
getItemViewType position:10
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 10
getItemCount
getItemViewType position:11
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 11

首次进入加载的条目数,跟手机的屏幕是有关的,我切换为横屏加载的条目数为5条,输出日志如下:

getItemCount
getItemCount
getItemViewType position:0
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 0
getItemCount
getItemViewType position:1
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 1
getItemCount
getItemViewType position:2
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 2
getItemCount
getItemViewType position:3
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 3
getItemCount
getItemViewType position:4
onCreateViewHolder     viewType: 0
onBindViewHolder     position: 4


目录
相关文章
|
6天前
|
Android开发
Android调用相机与相册的方法1
Android调用相机与相册的方法
39 0
|
6天前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
66 0
|
6天前
|
机器学习/深度学习 Java Shell
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
49 0
|
5天前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
14 5
|
5天前
|
Android开发
Android获取当前系统日期和时间的三种方法
Android获取当前系统日期和时间的三种方法
16 4
|
6天前
|
API 开发工具 Android开发
调用Android原生@SystemApi、@Hide方法
调用Android原生@SystemApi、@Hide方法
9 1
|
6天前
|
程序员 Android开发
Android亮度调节的几种实现方法
Android亮度调节的几种实现方法
11 0
|
6天前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
17 0
|
6天前
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
38 0
|
6天前
|
Android开发
Android中去掉ActionBar的几种方法
Android中去掉ActionBar的几种方法
14 0