RecyclerView的点击事件
为RecyclerView准备一个适配器,新建FruitAdapter类,让这个适配器继承自RecursiveAction.Adapter
1 public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { 2 //定义一个全局变量 3 private List<Fruit> mFruitList; 4 //定义一个内部类ViewHolder,ViewHolder要继承RecyclerView.ViewHolder 5 static class ViewHolder extends RecyclerView.ViewHolder{ 6 View fruitView; //添加fruitView变量来保存子项最外层布局的实例,然后在onCreateViewHolder()方法中注册点击事件 7 ImageView fruitImage; 8 TextView fruitName; 9 //构造函数中要传入一个View参数,这个参数通常是RecyclerView子项的最外层布局, 10 // 那么就可以通过findViewById()方法来获取到不居中的ImageView和TextView的实例了 11 public ViewHolder(View view){ 12 super(view); 13 fruitView = view; 14 fruitImage = (ImageView) view.findViewById(R.id.fruit_image); 15 fruitName = (TextView) view.findViewById(R.id.fruit_name); 16 } 17 } 18 //FruitAdapter中也有一个构造函数,这个方法用于把展示的数据源传进来,并赋值给一个全局变量mFruitList,后续操作都在这个数据源上进行 19 public FruitAdapter(List<Fruit> fruitList){ 20 mFruitList = fruitList; 21 } 22 //由于RecyclerView继承自RecyclerView.Adapter,那么就必须重写onCreateViewHolder(),onBindViewHolder(),getItemCount()方法 23 //onCreateViewHolder()方法用于创建ViewHolder实例, 24 //在这个方法内将fruit_item布局加载进来,然后创建一个ViewHolder实例,并将加载出来的布局传入构造函数中,最后将ViewHolder实例返回 25 @Override 26 public ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) { 27 View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false); 28 final ViewHolder holder = new ViewHolder(view); 29 //以下两个点击事件中先获取了用户点击的position,然后通过position拿到相应的Fruit实例 30 //为最外层布局注册点击事件 31 holder.fruitView.setOnClickListener(new View.OnClickListener() { 32 @Override 33 public void onClick(View v) { 34 int position = holder.getAdapterPosition(); 35 Fruit fruit = mFruitList.get(position); 36 Toast.makeText(v.getContext(),"you clicked view" + fruit.getName(),Toast.LENGTH_SHORT).show(); 37 } 38 }); 39 //为布局内图片注册点击事件 40 holder.fruitImage.setOnClickListener(new View.OnClickListener() { 41 @Override 42 public void onClick(View v) { 43 int position = holder.getAdapterPosition(); 44 Fruit fruit = mFruitList.get(position); 45 Toast.makeText(v.getContext(),"you clicked image" + fruit.getName(),Toast.LENGTH_SHORT).show(); 46 } 47 }); 48 return holder; 49 } 50 //onBindViewHolder()方法是用于对RecyclerView子项的数据进行赋值的,会在每个子项被滚动到屏幕内的时候执行, 51 // 这里通过position参数的到当前项的Friut实例,然后再将数据设置到ViewHolder的ImageView和TextView中 52 @Override 53 public void onBindViewHolder(ViewHolder holder, int position) { 54 Fruit fruit = mFruitList.get(position); 55 holder.fruitImage.setImageResource(fruit.getImageId()); 56 holder.fruitName.setText(fruit.getName()); 57 } 58 //getItemCount()方法用于告诉RecyclerView一共有多少子项,直接返回数据源的长度 59 @Override 60 public int getItemCount() { 61 return mFruitList.size(); 62 } 63 }