回答

31

您應該在您的ViewHolder類中實現OnItemClickListener,並將當前項目傳遞給每onBindViewHolder()上的ViewHolder實例。

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

感謝您的鏈接。我在那裏定義了聽衆。 – MikkoP 2014-11-23 11:55:10

+0

不客氣,很高興我能幫上忙。 – 2014-11-23 13:49:57

+0

你能詳細說明你的答案嗎?我怎麼知道哪個cardView行被點擊.....如果我使用view,getId()它會返回相同的id。 – Crawler 2015-07-22 16:03:33

3
  1. 你只需要添加的onClick監聽器,你在onBindViewHolder想要的項目。輕鬆訪問該位置的價值。請檢查下面的代碼。

    @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

這是我對這個問題的解決方案:

  1. 首先添加引用視圖中查看對象ViewHolder類

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

它爲我很好,希望這能幫助別人。