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
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
}
});
}
Definieren Sie Ihren onClicklistener in der onBindViewHolder-Methode in Custom Adapter.
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)
}
});
}
}