support studio recyclerview item example desde cardview activity abrir android onclicklistener android-5.0-lollipop android-cardview

android - studio - ¿OnClickListener para CardView?



cardview clickable (3)

¿Cómo adjunto un OnClickListener a un CardView ? Quiero que cada tarjeta tenga una acción diferente cuando se hace clic.

Tengo un RecyclerView que tiene un adaptador personalizado para mostrar las tarjetas. Así es como se implemented .


  1. simplemente agrega onClick Listener, el elemento que desea en onBindViewHolder. donde se accede fácilmente al valor de esa posición. por favor revise el siguiente código.

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


Debe implementar OnItemClickListener en su clase ViewHolder y pasar el elemento actual a las instancias de ViewHolder en cada onBindViewHolder() .

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


Esta es mi solución para este problema:

  1. Primero agregue la referencia al objeto de vista de vista en la clase 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. A continuación, en el método onBindViewHolder(final MyViewHolder holder, final int position) , agrego un oyente y configuro una nueva 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 } });

Funciona bien para mí, espero que ayude a alguien más.