10

Mam card_contents.xml cardViewDodaj clickListner dla przycisku wewnątrz cardView zaludnionych użyciu 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> 

który wykorzystuje widok recykler:

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

pomocą adaptera

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

Naprawdę chcę ustawić detektor kliknięcia dla przycisków wewnątrz kart i uruchomić nową aktywność w zależności od ich przycisk jest wciśnięty i na której karcie jest wciśnięty. Czy istnieje sposób, aby to osiągnąć? Rozglądałem się, ale nie znalazłem żadnych odpowiedzi na temat ustawiania detektorów kliknięć dla elementów wewnątrz cardView. Jestem nowy dla Androida i każda pomoc będzie doceniana. Dzięki z góry

+0

Również chcę użyć tego samego adaptera do wypełnienia innego widoku recyklera tylko z widokami tekstu. – AnoopDV

Odpowiedz

32

Dodaj kliknąć na przycisk słuchacza wewnątrz cardView zaludnionych wykorzystaniem recyclerView

Dodaj zdarzenie click do przycisków, które znajduje się w RecyclerView jak:

1. przycisk Pobierz z xml w taki sam sposób jak w przypadku TextView w MyViewHolder klasa:

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. Dodaj setOnClickListener metodę Buttona w onBindViewHolder metody:

@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

Dzięki, ale co jeśli chcę użyć tego samego adaptera do wypełnienia zwykłych widoków recyklerów z widokami tekstowymi – AnoopDV

+0

@ user3359069: Myślę, że normalnie nie jest to możliwe, ale można to zrobić przy użyciu warunków w trybie "else", pokazać/ukryć widoki, które nie są prawidłowy sposób. jako moją sugestię stwórz oddzielny adapter dla innego projektu rzędu, w którym opracujesz niezależne moduły, które są bardzo luźno połączone. Dzięki –

+0

Skąd mam wiedzieć, w którym widoku recyklingu naciśnięty jest przycisk? –

2

Zdefiniuj onClick słuchacza na metodzie onBindViewHolder w CustomAdapter.

0

Powiedzmy masz:

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

Uwaga ta część: Android: onClick="onClickBotonBorrar"

Na Aktywny dodać to:

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

Zaleca się, aby nie mieć zdarzenie click wewnątrz twój adapter, ale wewnątrz twojej aktywności.

Uwaga: To jest podobne dla przycisku

Powiązane problemy