Klicken Sie auf einen ImageButton, der zu einer CardView in einer RecyclerView gehört
Gelöst
Ich habe es behoben, indem ich deine Antworten gemischt habe, also habe ich beschlossen, hier aufzuschreiben.
Der Schlüssel war dasViewHolder
Konstrukteur
Ich habe das @ gelöscsetOnClickListener()
und dieonClick()
Methoden und ich habe diese innere Klasse in meinem @ definieObjectAdapter.java
.
public static class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(View itemView) {
super(itemView);
card_first_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Toast.makeText(v.getContext(), object.get(position).getName(), Toast.LENGTH_SHORT).show();
}
});
card_second_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Forward button", Toast.LENGTH_SHORT).show();
}
});
}
}
Und das ist alles. Der Rest der Klasse ist derselbe.
DasObjectFragment.java
ist:
public class ObjectFragment extends Fragment {
public void ObjectFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this Fragment
return layoutInflater.inflate(R.layout.fragment_object, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final ArrayList<Object> objects = initializeList();
if(!objects.isEmpty()) {
RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.objects_recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new SimpleDivider(getActivity().getApplicationContext()));
final ObjectAdapter objectAdapter = new ObjectAdapter(objects, R.layout.card_object);
recyclerView.setAdapter(objectAdapter);
}
}
private ArrayList<Object> initializeList() {
ArrayList<Object> objects= new ArrayList<>();
objects.add(new Object(...));
return objects;
}
}
Vielen Dank Jungs.
Ursprüngliche Frage
Ich habe einRecyclerView
welches einige @ enthäCardViews
. DiesCardViews
habe zwei verschiedeneImageButton
die verschiedene Dinge machen, wenn Sie darauf klicken (offensichtlich).
Hier ist dascard_object.xml
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/object_card"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="2dp"
card_view:cardBackgroundColor="@color/colorPrimary"
android:clickable="true">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:background="@color/colorPrimary">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/object_card_first_button"
android:src="@drawable/contact_100px"
android:maxHeight="25dp"
android:maxWidth="25dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:background="@color/transparentBackgroundPrimary"
android:layout_marginRight="54dp"
android:layout_marginEnd="54dp"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/forward_100px"
android:maxHeight="25dp"
android:maxWidth="25dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:background="@color/transparentBackgroundPrimary"
android:id="@+id/object_card_second_button" />
</LinearLayout>
</android.support.v7.widget.CardView>
Dies ist der Hauptcode meinesObjectAdapter.java
:
public class ObjectAdapter
extends RecyclerView.Adapter<ObjectAdapter.ViewHolder>
implements View.OnClickListener {
private ArrayList<Object> objects;
private int itemLayout;
private View.OnClickListener onClickListener;
public ObjectAdapter(ArrayList<Object> objects, int itemLayout) {
this.objects = objects;
this.itemLayout = itemLayout;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(itemLayout, viewGroup, false);
view.setOnClickListener(this);
return new ViewHolder(view);
}
public void setOnClickListener(View.OnClickListener listener) {
this.onClickListener = listener;
}
public void onClick(View view) {
if(onClickListener != null) {
onClickListener.onClick(view);
}
}
MyObjectFragment.java
ist der nächste:
public class ObjectFragment extends Fragment {
public void ObjectFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this Fragment
return layoutInflater.inflate(R.layout.fragment_object, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final ArrayList<Object> objects = initializeList();
if(!objects.isEmpty()) {
RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.objects_recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new SimpleDivider(getActivity().getApplicationContext()));
final ObjectAdapter objectAdapter = new ObjectAdapter(objects, R.layout.card_object);
objectAdapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Here I can manage my Object attributes,
// but no the ImageButtons itselves
}
});
recyclerView.setAdapter(objectAdapter);
}
}
private ArrayList<Object> initializeList() {
ArrayList<Object> objects= new ArrayList<>();
objects.add(new Object(...));
return objects;
}
}
Ich kann die Werte des @ erhaltObject
Attribute (Name, Titel, was auch immer), und klicken Sie auf dieCardView
und so weiter, aber ich bin nicht in der Lage, das @ zu machImageButton
have ihre eigenen onClick.
Ich weiß nicht, ob ich @ benutandroid:onClick()
Es wäre möglich, die Informationen einer bestimmten Karte anzuzeigen, aber das ist eine andere Sache.
Also meine Frage ist, wie kann ich machen, dass diese beiden Tasten ihre eigenen @ habOnClickListener
, wo sollte ich es deklarieren und wie kann ich mit den Informationen jedes Elements des @ umgeheRecyclerView
danach (dieser Teil ist fast erreicht).
Irgendeine Idee? Danke vielmals