Android RecyclerView对应的适配器中方法的执行顺序和具体作用详解
Posted 路宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android RecyclerView对应的适配器中方法的执行顺序和具体作用详解相关的知识,希望对你有一定的参考价值。
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下
"通俗易懂,风趣幽默"
,感觉非常有意思,忍不住分享一下给大家。
👉点击跳转到教程
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
首次进入加载的条目数,跟手机的屏幕是有关的,我用切换为横屏加载的条目数为4条,输出日志如下:
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
以上是关于Android RecyclerView对应的适配器中方法的执行顺序和具体作用详解的主要内容,如果未能解决你的问题,请参考以下文章
在我的 recyclerview 适配器类中实现 Android 底页
Android进阶之通用RecyclerView适配器打造方法