0
votes

Comment puis-je créer un événement de clic sur l'élément de CardView à partir de RECYCLERVIEW

J'ai référencé Exemple de simple Android RECYCLERVIEW pour créer des événements sur des éléments de RECYCLERVIEW. Et puis j'applique de cette façon à Cardview à partir de RecyclerView, mais j'ai échoué.

OnChickick Event On Viewholder ne fonctionne pas. Il semble que les codes sont presque identiques. Je ne sais pas quel est le problème.

Je viens de copier des codes de la simple Exemple Android RecyclerView

puis modifié l'arraylist sur ArrayList De plus, je remplace XML qui contient textview code avec cardview.

J'ai réussi l'événement lorsque je mets OnClickListener sur Onbindviewholder. Mais j'ai entendu dire que cela rend l'application plus lourd. Donc, je veux éviter de cette façon.

MainActivity.java xxx

myadapter.java xxx


3 commentaires

Vous souhaitez activer une action en cliquant sur l'ensemble de la vision de CardView ou de toute vue particulière de la View? @escargot


@ g.brahma datta um .. Si ça ne vous dérange pas, je veux savoir de toute façon. mais l'original est Th de gameview


Sûr. Vérifiez ma réponse ci-dessous @snail.


4 Réponses :


2
votes

Il existe également un moyen de faire ce xxx


1 commentaires

Je prends cela comme une solution. Mais je veux toujours savoir pourquoi mon code ne fonctionne pas. thx pour la réponse.



1
votes
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    // each data item is just a string in this case
    public ImageView mImageView;
    public TextView mTextView;
    public CardView cv;

    public ViewHolder(View view) {
        super(view);
        mImageView = (ImageView)view.findViewById(R.id.image);
        mTextView = (TextView)view.findViewById(R.id.textview);
        cv = (CardView)view.findViewById(R.id.cardview);

      //for whole cardview (If you want to click only card)
      view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Do the action.
            }
        });

    //if you want to click the only particular item in the CardView
    mImageView .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //Do the action.
            }
        });

    }
}
Try this snippet and let me know. I can solve it for you if it doesn't work.

0 commentaires

1
votes

Le problème est votre interface code> correspond à la partie de la classe Adapter code> pendant que votre onclicklistener code> fait partie de la classe titulaire code>. Vous devez appeler le clicklistener code> à partir de l'adaptateur Onbindviewholder code> .Pour à cette fin, vous devez donner le ID code> à la disposition racine du Fichier de layout d'article CODE> et trouvez la vue par ID dans Constructeur d'éléments code> .after que vous pouvez appeler ClickListener comme ci-dessous.

 @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        Log.d("position", position+"");

        holder.mTextView.setText(mDataset.get(position).text);
        holder.mImageView.setImageResource(mDataset.get(position).img);
        holder.view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mClickListener.onItemClick(v, position)
        }
    });
    }


1 commentaires

OnClickListener à Onbindviewholder est une mauvaise pratique @RAZA.



1
votes

Ajoutez simplement ces lignes Donnez ci-dessous dans Onbindviewholder strong> Vous avez déjà ajouté ce

cv = (cardview) vue.findviewyID (r.id.cardview); em> p> blockQuote>

ligne de sorte qu'il fonctionne ou assurez-vous de donner carte View en XML ID Nom est CardView P>

cv = (CardView)view.findViewById(R.id.cardview);

holder.cv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mClickListener.onItemClick(v, position)
        }
    });


0 commentaires