CardView的OnClickListener?

问题描述 投票:21回答:4

如何将OnClickListener附加到CardView?我希望每个卡在单击时都有不同的操作。

我有一个RecyclerView,它具有用于显示卡的自定义适配器。这就是implemented的样子。

android onclicklistener android-5.0-lollipop android-cardview
4个回答
36
投票

您应该在OnItemClickListener类中实现ViewHolder,并将当前项传递给每个ViewHolder上的onBindViewHolder()实例。

来自this post

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);
}

3
投票
  1. 您只需要在onBindViewHolder中添加onClick侦听器即可。在哪里可以轻松获取该头寸的价值。请检查以下代码。

     @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
    
        holder.title.setText(Html.fromHtml(html2text(results.get(position).getTitle().toString())));
        holder.description.setText(Html.fromHtml(html2text(results.get(position).getSummary().toString())));
        holder.url.setText(Html.fromHtml(html2text(results.get(position).getUrl().toString())));
        holder.url.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(mContext, DetailsActivity.class);
                intent.putExtra("url",results.get(position).getUrl().toString());
               mContext. startActivity(intent);
    
            }
        });
    

3
投票

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

  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
       }
    }
    
  2. 接下来,在方法onBindViewHolder(final MyViewHolder holder, final int position)中,我添加了一个侦听器并设置了新的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
        }
    });
    

对我来说很好,希望它对其他人有帮助。


0
投票

大家好,工作人员:

   cardView=findViewById(R.id.cardView);
    cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplicationContext(),"clicked",Toast.LENGTH_SHORT).show();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.