15

OnClickListener'u CardView'a nasıl eklerim? Her kartın tıklandığında farklı bir işlem yapmasını istiyorum.CardView için OnClickListener?

Kartların görüntülenmesi için özel bir bağdaştırıcıya sahip bir RecyclerView sahibim. implemented budur.

cevap

31

Sen ViewHolder sınıfta OnItemClickListener uygulamak ve her onBindViewHolder() üzerinde ViewHolder örneklerine geçerli öğeyi geçmelidir. this post itibaren

:

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

Bağlantı için teşekkürler. Orada dinleyiciyi tanımladım. – MikkoP

+0

Bir şey değil, yardımcı olabileceğime sevindim. –

+0

Cevabınızı biraz daha detaylandırabilir misiniz .... hangi kartın tıklanacağını nasıl bilirim? Tıkla .. viewId() kullanırsanız, aynı kimliği verir. – Crawler

3
  1. sen sadece onBindViewHolder istediğiniz Öğe onClick Dinleyici, ekleyin. Bu pozisyonun değerine kolayca erişilebilen yer. lütfen aşağıdaki kodu kontrol edin.

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

Bu sorunun benim çözümdür:

  1. İlk ViewHolder sınıfında görünüm nesnesi görüntüle başvuru eklemek

    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. Sonraki, yöntemde onBindViewHolder(final MyViewHolder holder, final int position) yılında, ben bir dinleyici ekleyin ve yeni Intent'u ayarlayın. Bu ince benim için çalışıyor

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

, bu başkası yardımcı olacağını umuyoruz.

İlgili konular