OnClickListener for CardView?

后端 未结 4 1480
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-29 01:37

How do I attach an OnClickListener to a CardView? I want every single card to have a different action when clicked.

I have a Recycler

相关标签:
4条回答
  • 2020-11-29 02:03

    You should implement the OnItemClickListener in your ViewHolder class, and pass the current item to the ViewHolder instances on every onBindViewHolder().

    From 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);
    }
    
    0 讨论(0)
  • 2020-11-29 02:03
    1. you just add onClick Listener, which Item you want in onBindViewHolder. where easily accessing the value of that position. please check the below code.

       @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);
      
              }
          });
      
    0 讨论(0)
  • 2020-11-29 02:27

    This is my solution for this problem:

    1. First add reference to View view object in ViewHolder class

      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. Next, in method onBindViewHolder(final MyViewHolder holder, final int position), I add a listener and set 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
          }
      });
      

    It works for me fine, hope it will help someone else.

    0 讨论(0)
  • 2020-11-29 02:29

    Hello everybody this worked :

       cardView=findViewById(R.id.cardView);
        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(),"clicked",Toast.LENGTH_SHORT).show();
            }
        });
    
    0 讨论(0)
提交回复
热议问题