wake-up-neo.com

Fügen Sie clickListner für die Schaltfläche in einer mit RecyclerView bestückten cardView hinzu

Ich habe eine 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="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>

MainActivity.class

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

MyAdapter.class

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 einen Klick-Listener für die Schaltflächen in den Karten festlegen und eine neue Aktivität starten, je nachdem, welche Taste gedrückt wurde und auf welcher Karte sie gedrückt wurde. Gibt es eine Möglichkeit, dies zu erreichen? Ich habe mich umgesehen, aber keine Antworten gefunden, um Klick-Listener für Elemente in einem cardView einzustellen. Ich bin neu bei Android und jede Hilfe wird geschätzt. Danke im Voraus 

12
AnoopDV

Fügen Sie einen Click-Listener für die Schaltfläche in einer mit einem .__ ausgefüllten cardView hinzu. RecyclerView

Fügen Sie den Click-Events Schaltflächen hinzu, die sich in RecyclerView befinden:

1. Get Button von xml auf dieselbe 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. setOnClickListener-Methode für Button in onBindViewHolder-Methode hinzufügen:

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

Definieren Sie Ihren onClicklistener in der onBindViewHolder-Methode in Custom Adapter.

2
Pradeet Swamy

Nehmen wir an, 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>

Beachten Sie diesen Teil: Android: onClick="onClickBotonBorrar"

In Ihrer Aktivität fügen Sie Folgendes hinzu:

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

Es wird empfohlen, das Klickereignis nicht in Ihrem Adapter, sondern in Ihrer Aktivität zu haben.

Hinweis: Für die Schaltfläche ist es ähnlich

Ein anderer Ansatz wäre die Verwendung einer Schnittstelle 

1) Eine Schnittstelle erstellen  

public interface ItemClickListener{

   public void startSecondActivity(position)(int index);

   public void startThirdActivity(position)(int index);

}

2) Implementiere die Schnittstelle in deiner Aktivität  

public class MainActivity extends AppcompatActivity implements ItemClickListener {

   .........

   public void startSecondActivity(position)(int index){

            Intent i = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(i);

   }

   public void startThirdActivity(position)(int index){

            Intent i = new Intent(MainActivity.this, ThirdActivity.class);
            startActivity(i);
   }


}

3) ItemListener in RecyclerViewAdapter verwenden  

MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{

      private ItemListener listener;

      public MyAdapter(Context context){
           listener = (ItemListener)context;
      }

      Override
      public void onBindViewHolder(MyViewHolder myViewHolder, int position){

         myViewHolder.btnButton1.setOnClickListener(new View.OnClickListener(){

              @Override
              public void onClick(View v) {
                  listener.startSecondActivity(position)
              }
         });

         myViewHolder.btnButton2.setOnClickListener(new View.OnClickListener(){

              @Override
              public void onClick(View v) {
                   listener.startThirdActivity(position)
              }
         });
      }

}
0
Rohit Singh