Android学习——RecyclerView

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 }
原文地址:https://www.cnblogs.com/znjy/p/14906010.html