为使用recyclerView填充的cardView添加clickListner

我有一个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> 

使用回收站视图:

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

使用适配器

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

实际上,我想为卡片内的button设置点击侦听器,并根据按下的button以及按下的卡片来启动新的活动。 有没有办法做到这一点? 我环顾四周,但没有find任何答案设置点击监听器内的一个cardView.I是新的Android和任何帮助将不胜感激。 提前致谢

Solutions Collecting From Web of "为使用recyclerView填充的cardView添加clickListner"

为使用recyclerView填充的cardView添加点击侦听器

将点击事件添加到RecyclerViewbutton,如下所示:

1.按照与MyViewHolder类中的TextView相同的方式从xml获取button:

 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.onBindViewHolder方法中添加Button的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 } }); } 

在CustomAdapter中的onBindViewHolder方法上定义您的onClick侦听器。

假设你有:

 <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> 

注意这个部分:android: onClick="onClickBotonBorrar"

在你的活动添加这个:

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

build议不要在适配器内部有点击事件,而在活动内部。

注意:button类似