Làm cách nào để đính kèm một OnClickListener
vào CardView
? Tôi muốn mỗi thẻ có một hành động khác nhau khi được nhấp.OnClickListener cho CardView?
Tôi có một RecyclerView
có bộ điều hợp tùy chỉnh để hiển thị thẻ. Đây là cách nó là implemented.
Làm cách nào để đính kèm một OnClickListener
vào CardView
? Tôi muốn mỗi thẻ có một hành động khác nhau khi được nhấp.OnClickListener cho CardView?
Tôi có một RecyclerView
có bộ điều hợp tùy chỉnh để hiển thị thẻ. Đây là cách nó là implemented.
Bạn nên triển khai OnItemClickListener
trong lớp ViewHolder
và chuyển mục hiện tại tới các trường hợp ViewHolder
trên mỗi onBindViewHolder()
.
Từ 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);
}
bạn chỉ cần thêm onClick Listener, mà mục mà bạn muốn trong onBindViewHolder. nơi dễ dàng truy cập vào giá trị của vị trí đó. vui lòng kiểm tra mã bên dưới.
@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);
}
});
Đây là giải pháp của tôi cho vấn đề này:
Đầu tiên thêm tài liệu tham khảo để xem xem đối tượng trong lớp 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
}
}
Tiếp theo, trong phương pháp onBindViewHolder(final MyViewHolder holder, final int position)
, tôi thêm người nghe và đặt Intent
mới.
@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
}
});
Nó hoạt động đối với tôi tốt, hy vọng nó sẽ giúp người khác.
Cảm ơn bạn đã liên kết. Tôi định nghĩa người nghe ở đó. – MikkoP
Bạn được chào đón, vui vì tôi có thể giúp đỡ. –
Bạn có thể xây dựng câu trả lời của bạn nhiều hơn một chút .... làm thế nào tôi có thể biết được dòng cardView nào được nhấp ..... Nếu tôi sử dụng view, getId() nó trả về cùng một id. – Crawler