先看一下demo结构
activity_main.xml中加入一个RecyclerView让它充满全屏;
layout_item.xml中加入一个TextView和ImgView;
然后新建Bean实体类
Recyvlerview_Adapte中的代码
package com.example.wh.test;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
/**
* Created by Wh on 2019/1/17.
*/
//继承recyclerview.adapter,<>中是ViewHolder,viewholder是缓存用的,也就是说将view holder的缓存加到<>中
public class Recyvlerview_Adapter extends RecyclerView.Adapter<Recyvlerview_Adapter.ViewHolder>{
private List<Bean> beanList;
//构造方法,将beanList1赋给beanList
public Recyvlerview_Adapter(List<Bean> beanList1) {
this.beanList=beanList1;
}
class ViewHolder extends RecyclerView.ViewHolder{ //用于缓存的ViewHolder
TextView myTv;
ImageView myImg;
View myView; //自定义View用于recyclerview的点击事件
public ViewHolder(View itemView) {
super(itemView);
myView=itemView;//将itemView赋给myView
myImg=itemView.findViewById(R.id.img);
myTv=itemView.findViewById(R.id.tv);
}
}
@NonNull
@Override
//创建viewholder实例
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item,parent,false);//在此方法中先加载布局
final ViewHolder viewHolder=new ViewHolder(view);//将布局传入viewholder对象中
//点击item的监听器
viewHolder.myView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int postion=viewHolder.getAdapterPosition();//获取到当前点击的是哪一个item
Bean bean=beanList.get(postion);//将当前点击的item赋给实体类对象
Toast.makeText(v.getContext(), "你动了"+bean.getMyName()+"一下", Toast.LENGTH_LONG).show();
}
});
//点击item中某一个控件的监听器
viewHolder.myImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int postion=viewHolder.getAdapterPosition();
Bean bean=beanList.get(postion);
Toast.makeText(v.getContext(), "你动了"+bean.getMyName()+"的图片一下", Toast.LENGTH_LONG).show();
}
});
return viewHolder;//将带有布局的viewholder对象返回
}
@Override
//用于对Recyclerview的子项(item)进行赋值
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Bean bean=beanList.get(position);//创建实体类对象 并拿到当前的子项(item)
holder.myTv.setText(bean.getMyName());//设置当前的子项(item)
holder.myImg.setImageResource(bean.getMyImg());
}
@Override
//告诉recyclerview一共有多少子项(item)
public int getItemCount() {
return beanList.size();
}
}
Recyvlerview_Adapter继承了RecyclerView.Adapter所以要重写3个方法:
onCreateViewHolder:用于创建ViewHolder实例
**onBindViewHolder:**用于对RecyclerView的子项(item)赋值
**getItemCount:**告诉RecyclerView有多少子项(item)
RecyclerView的点击事件:需要自定义View ,然后将ViewHolder的view传给自定义的View对象
最后看MainActivity:
效果图:
本人是初学小白,写博客主要是为了自己的查看复习,内容如有不准确,还请帮忙指出,多多谅解!