10

ich cardView card_contents.xmlclickListner hinzufügen in einem cardView für Knopf bevölkert eine recyclerView mit

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

, die verwendet einen Recycler Blick haben:

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

mit dem Adapter

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

Ich möchte Klick-Listener für die Schaltflächen in den Karten setzen und neue Aktivitäten starten, abhängig von wh Ich-Taste wird gedrückt und auf welche Karte gedrückt wird. Gibt es einen Weg, dies zu erreichen? Ich habe mich umgesehen, aber fand keine Antworten für das Setzen von Klick-Listenern für Elemente in einer cardView.Ich bin neu bei Android und jede Hilfe wird geschätzt. Vielen Dank im Voraus

+0

Auch ich möchte den gleichen Adapter für die Bestückung andere Recycler-Ansicht mit nur Textansichten verwenden. – AnoopDV

Antwort

32

hinzufügen Zuhörer in einem cardView für Schaltfläche klicken bevölkert mit einem recyclerView

Click-Ereignis Schaltflächen hinzufügen, die in RecyclerView wie:

1. Get Anstecknadel xml in der gleichen Weise wie für TextView in MyViewHolder Klasse:

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. hinzufügen setOnClickListener Methode für Button in onBindViewHolder Methode:

@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

Danke, aber was, wenn ich den gleichen Adapter verwenden möchte, um normale Recycleransichten mit nur Textansichten zu bevölkern – AnoopDV

+0

@ user3359069: ich denke, normalerweise ist es nicht möglich, aber Sie können es tun, indem Sie If-Else-Bedingungen, Ansichten anzeigen/ausblenden, was nicht ist gültiger Weg. wie mein Vorschlag einen separaten Adapter für andere Reihe Design erstellen, durch die Sie unabhängige Module entwickeln, die sehr lose gekoppelt ist. Danke –

+0

Woher weiß ich, in welcher Recyclerview die Schaltfläche gedrückt wird? –

2

Definieren Sie Ihre onClick Zuhörer auf onBindViewHolder Methode in CustomAdapter.

0

Sagen wir, Sie haben:

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

Hinweis: dieser Teil: android: onClick="onClickBotonBorrar"

Auf Ihrer Aktivität fügen Sie diese:

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

Es wird nicht empfohlen, das Click-Ereignis im Inneren zu haben Dein Adapter aber in deiner Aktivität.

Hinweis: Es ist ähnlich für Schaltfläche