如何將OnClickListener
附加到CardView
?我希望每一張卡在點擊時都有不同的動作。CardView的OnClickListener?
我有一個RecyclerView
有一個自定義適配器顯示卡。這是implemented。
如何將OnClickListener
附加到CardView
?我希望每一張卡在點擊時都有不同的動作。CardView的OnClickListener?
我有一個RecyclerView
有一個自定義適配器顯示卡。這是implemented。
您應該在您的ViewHolder
類中實現OnItemClickListener
,並將當前項目傳遞給每onBindViewHolder()
上的ViewHolder
實例。
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);
}
你只需要添加的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);
}
});
這是我對這個問題的解決方案:
首先添加引用視圖中查看對象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
}
}
接下來,在方法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
}
});
它爲我很好,希望這能幫助別人。
感謝您的鏈接。我在那裏定義了聽衆。 – MikkoP 2014-11-23 11:55:10
不客氣,很高興我能幫上忙。 – 2014-11-23 13:49:57
你能詳細說明你的答案嗎?我怎麼知道哪個cardView行被點擊.....如果我使用view,getId()它會返回相同的id。 – Crawler 2015-07-22 16:03:33