CardView的OnClickListener?

Mik*_*koP 21 android onclicklistener android-cardview android-5.0-lollipop

如何附加OnClickListenerCardView?我希望每张卡片在点击时都有不同的动作.

我有一个RecyclerView用于显示卡片的自定义适配器.这就是它的实现方式.

And*_*s K 36

您应该OnItemClickListenerViewHolder类中实现,并将当前项传递给每个ViewHolder实例onBindViewHolder().

这篇文章:

public static class ViewHolder extends RecyclerView.ViewHolder {
    public View view;
    public Item currentItem;

    public ViewHolder(View v) {
        super(v);
        view = v;
        view.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                // item clicked
            }
        });
    }
}

@Override public void onBindViewHolder(ViewHolder viewHolder, int i) {
    viewHolder.currentItem = items.get(i);
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适合我.当我点击卡片时,什么也没发生.但当我点击外面的卡片时,会触发onClick事件.我假设CardView吸收了click事件,阻止了上面的OnClick事件被触发.编辑:好的,我得到了它的工作.问题是我的CardView将'clickable'属性设置为true.删除后,上面的代码开始正确处理OnClick事件.谢谢! (3认同)
  • @Crawler你调用`getAdapterPosition()`来获取它在列表中的索引. (2认同)

小智 5

这是我对这个问题的解决方案:

  1. 首先在ViewHolder类中添加对View视图对象的引用

    public static class TouristViewHolder extends RecyclerView.ViewHolder{
        public ImageView img;
        public TextView name;
        public TextView description;
        public RatingBar rating;
        public View view;               // <----- here
    
        public TouristViewHolder(final View view) {
            super(view);
            this.view = view;            // <----- here
            // ... rest of code
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 接下来,在方法中onBindViewHolder(final MyViewHolder holder, final int position),我添加一个侦听器并设置 new Intent

    @Override
    public void onBindViewHolder(TouristViewHolder touristViewHolder, final int position) {
    
    touristViewHolder.view.setOnClickListener(new View.OnClickListener() {  // <--- here
        @Override
        public void onClick(View v) {
            Log.i("W4K","Click-"+position);
            context.startActivity(new Intent(context,MainActivity.class));  // <--- here
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

它对我很有用,希望对其他人有帮助。