OnClickListener pour CardView?

comment fixer un OnClickListenerCardView? Je veux que chaque carte ait une action différente lorsqu'elle est cliquée.

j'ai un RecyclerView qui a un adaptateur personnalisé pour afficher les cartes. C'est comme cela mise en œuvre.

18
demandé sur SpaceCore186 2014-11-22 22:51:40

3 réponses

vous devriez implémenter le OnItemClickListener dans votre ViewHolder classe, et passer à l'élément actif à l' ViewHolder cas sur tous les onBindViewHolder().

ce 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);
}
34
répondu Andras K 2016-10-15 00:52:12
  1. vous avez juste à ajouter onClick Listener, quel article vous voulez dans onBindViewHolder. où d'accéder facilement à la valeur de cette position. veuillez vérifier le code ci-dessous.

     @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);
    
            }
        });
    
3
répondu Kona Suresh 2016-09-21 10:55:33

C'est ma solution pour ce problème:

  1. tout d'abord ajouter une référence à L'objet View view dans la classe 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. Ensuite, dans la méthode onBindViewHolder(final MyViewHolder holder, final int position), j'ajoute un écouteur et je mets 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
        }
    });
    

Ça marche pour moi, fine, j'espère que ça aidera quelqu'un d'autre.

1
répondu Marek Bodziony 2017-07-30 03:23:05