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

Antworten auf die Frage(8)

Ihre Antwort auf die Frage