10

我有一个cardView card_contents.xml的按钮添加clickListner填充的cardView内使用recyclerView

<?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="B.E" 
     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); 
    } 
} 
} 

我实际上想要为卡片内的按钮设置点击侦听器并根据wh发起新的活动按下按钮并按下该按钮。有没有办法做到这一点?我环顾四周,但没有找到任何答案设置点击监听器内的一个cardView.I是新的Android和任何帮助将不胜感激。在此先感谢

+0

此外,我想用同一个适配器用于填充只有textviews其他回收观点类似。 – AnoopDV 2015-02-07 07:46:55

回答

32

添加点击监听按钮使用 recyclerView填充的cardView内

click事件添加到按钮,这是RecyclerView为:

从获取按钮xml与TextViewMyViewHolder类似:

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.的按钮添加setOnClickListener方法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 
     } 
    }); 
} 
+0

谢谢,但如果我想使用相同的适配器来填充正常的回收站视图只有文本视图 – AnoopDV 2015-02-07 07:55:32

+0

@ user3359069:我认为通常这是不可能的,但你可以通过使用if-else条件,显示/隐藏视图有效的方式。因为我的建议是为其他行设计创建一个单独的适配器,通过它您将开发非常松散耦合的独立模块。感谢 – 2015-02-07 07:59:04

+0

我如何知道在哪个recyclerview中按下了按钮? – 2015-08-11 13:40:18

2

定义在CustomAdapter onBindViewHolder方法您的onClick监听器。

0

比方说,你有:

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

注意:此部分:机器人:onClick="onClickBotonBorrar"

您的活动补充一点:

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

建议不要有内部的单击事件你的适配器,但在你的活动。

注:这对按钮