引入依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
Adapter需要继承RecyclerView.Adapter<NewsAdapter.ViewHolder>
需要写的方法:
1、构造方法
public NewsAdapter(Context context, int resourceId, List<News> data) {
this.mContext = context;//上下文环境,指哪个activity
this.mNewsData = data;//数据
this.resourceId = resourceId;//xml模板文件
}
2、onCreateViewHolder
/**
* onCreateViewHolder()方法在需要创建ViewHolder(在本实验中手机上创建NewsAdapter.ViewHolder)时被回调
* 将list_item转化为view并绑定上对应的组件
* @param parent
* @param viewType
* @return
*/
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext)//将list_item转化为view
.inflate(resourceId, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
3、ViewHolder
/**
* 给onCreateViewHolder()方法中的view绑定对应的组件
*/
static class ViewHolder extends RecyclerView.ViewHolder {
TextView tvTitle;
TextView tvAuthor;
ImageView ivImage;
public ViewHolder(View view) {
super(view);
tvTitle = view.findViewById(R.id.tvTitle);
tvAuthor = view.findViewById(R.id.tvAuthor);
ivImage = view.findViewById(R.id.tvImage);
}
}
4、onBindViewHolder
/**
* onBindViewHolder()方法在Item需要重新绑定数据时被回调
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//position指的是需要被加载的数据的下标
News news = mNewsData.get(position);
holder.tvTitle.setText(news.getmTitle());
holder.tvAuthor.setText(news.getmAuthor());
if (news.getmImageId() != -1) {
holder.ivImage.setImageResource(news.getmImageId());
}
}
5、getItemCount()
@Override
public int getItemCount() {
return mNewsData.size();
}
总结:刚开始看这个东西时不太懂,但还是我可以通过分析它的每一个方法的参数、返回值和行为来分析方法的目的、作用,进而分析出RecyclerView的工作流程和工作原理。