Agregar clickListner para el botón dentro de un cardView rellenado usando un recyclerView

Tengo un cardView card_contents.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="150dp" android:layout_marginTop="10dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:id="@+id/card_view"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffa3a4a6"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/card_text" android:layout_gravity="center" android:gravity="center" android:text="BE" android:layout_centerInParent="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:id="@+id/button1" android:layout_toLeftOf="@+id/view" android:layout_alignParentLeft="true" android:text="2010" android:textColor="#000000" android:background="@android:color/transparent" /> <View android:layout_width="2dp" android:layout_height="@dimen/abc_action_button_min_height_material" android:layout_centerHorizontal="true" android:id="@+id/view" android:background="@android:color/black" android:layout_alignParentBottom="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_toRightOf="@+id/view" android:background="@android:color/transparent" android:textColor="@android:color/black" android:text="2014"/> </RelativeLayout> </android.support.v7.widget.CardView> </RelativeLayout> 

Que utiliza una vista de reciclador:

 public class MainActivity extends ActionBarActivity { RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<String> list=new ArrayList<String>(); list.add("Hello"); list.add("Hello World"); list.add("Hello World Beings"); recyclerView=(RecyclerView)findViewById(R.id.recycler_view); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); RecyclerView.Adapter adapter=new MyAdapter(list); recyclerView.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

Utilizando el adaptador

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { List<String> list; public MyAdapter(List<String> list){ this.list=list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_contents,viewGroup,false); return new MyViewHolder(v); } @Override public void onBindViewHolder(MyViewHolder myViewHolder, int i) { myViewHolder.textView.setText(list.get(i)); } @Override public int getItemCount() { return list.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder{ TextView textView; MyViewHolder(View view){ super(view); this.textView= (TextView) view.findViewById(R.id.card_text); } } } 

En realidad, quiero establecer el oyente de clic para los botones dentro de las tarjetas y el lanzamiento de nueva actividad en función del botón que se presiona y en qué tarjeta se presiona. ¿Hay alguna manera de lograr esto? He mirado alrededor pero no encontré ninguna respuesta para fijar los oyentes del tecleo para los artículos dentro de un cardView. Soy nuevo al androide y cualquier ayuda será apreciada. Gracias por adelantado

Agregue el oyente de clics para el botón dentro de una tarjetaVisualizada con un recicladorVer

Añadir evento de clic a los botones que está en RecyclerView como:

1. Obtener el botón de xml de la misma manera que haciendo para TextView en la clase MyViewHolder :

 public static class MyViewHolder extends RecyclerView.ViewHolder{ TextView textView; Button btnButton1; MyViewHolder(View view){ super(view); this.textView= (TextView) view.findViewById(R.id.card_text); this.btnButton1= (Button) view.findViewById(R.id.button1); ... do same for other Button } } 

2. Agregue el método setOnClickListener para Button en el método onBindViewHolder :

 @Override public void onBindViewHolder(MyViewHolder myViewHolder, int i){ myViewHolder.textView.setText(list.get(i)); myViewHolder.btnButton1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { /// button click event } }); } 

Defina su oyente onClick en el método onBindViewHolder en CustomAdapter.

Digamos que usted tiene:

 <android.support.v7.widget.CardView android:id="@+id/cv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" android:elevation="4dp" app:cardCornerRadius="2dp"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="16dp"> <TextView android:id="@+id/listText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:padding="8dp" android:text="New Text" /> <ImageButton android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/listText" android:layout_alignParentRight="true" android:onClick="onClickBotonBorrar" android:background="?android:selectableItemBackground" android:src="@drawable/ic_action_borrar" /> </RelativeLayout> </android.support.v7.widget.CardView> 

Tenga en cuenta esta parte: android: onClick="onClickBotonBorrar"

En tu actividad añade esto:

 public void onClickBotonBorrar (View v) { //Do whatever you want when user clicks on your ImageButton } 

Se recomienda no tener el evento de clic dentro de su adaptador sino dentro de su actividad.

Nota: Es similar para el botón

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.