安卓开发:RecyclerView的使用(三)

其实我以前也有一个每天聊到深夜的人。  


查看文章:

  1. 安卓开发:RecyclerView的使用(一)
  2. 安卓开发:RecyclerView的使用(二)
  3. 安卓开发:RecyclerView的使用(三)

RecyclerView的点击事件

我们来具体学习一下如何在 RecyclerView 中注册点击事件,修改 FruitAdapter 中的代 码,如下所示:

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
     private List<Fruit> mFruitList; 
     static class ViewHolder extends RecyclerView.ViewHolder {
         View fruitView;
         ImageView fruitImage;
         TextView fruitName;
         public ViewHolder(View view) {
             super(view);
             fruitView = view;
             fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
             fruitName = (TextView) view.findViewById(R.id.fruit_name);
         }
     }
     public FruitAdapter(List<Fruit> fruitList) {
         mFruitList = fruitList;
     }
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.
             fruit_item, parent, false);
     final ViewHolder holder = new ViewHolder(view);
     holder.fruitView.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             int position = holder.getAdapterPosition();
             Fruit fruit = mFruitList.get(position);
             Toast.makeText(v.getContext(), "you clicked view " + fruit.getName(),
                 Toast.LENGTH_SHORT).show();
         }
     });
     holder.fruitImage.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             int position = holder.getAdapterPosition();
             Fruit fruit = mFruitList.get(position);
             Toast.makeText(v.getContext(), "you clicked image " + fruit.getName(),
                 Toast.LENGTH_SHORT).show();
         }
     });
     return holder;
    }
    ...
} 

我们先是修改了 ViewHolder,在 ViewHolder 中添加了 fruitView 变量来保存子项最外层 布局的实例,然后在 onCreateViewHolder()方法中注册点击事件就可以了。这里分别为最外层 布局和 ImageView 都注册了点击事件,RecyclerView 的强大之处也在这里,它可以轻松实现子项 中任意控件或布局的点击事件。我们在两个点击事件中先获取了用户点击的 position,然后通过 position 拿到相应的 Fruit 实例,再使用 Toast 分别弹出两种不同的内容以示区别。

现在重新运行代码,并点击香蕉的图片部分,效果如图 3.37 所示。可以看到,这时触发了 ImageView 的点击事件。

然后再点击菠萝的文字部分,由于 TextView 并没有注册点击事件,因此点击文字这个事件 会被子项的最外层布局捕获到。

转载声明:此篇文章转载自郭霖作者写的《第一行代码》书中的章节,因为此章节对我帮助很大,并且写的非常详细,以便之后方便查阅。特在此做转载声明。

猜你喜欢

转载自blog.csdn.net/qq_38717971/article/details/83414204