Referenz auf ViewHolder in RecyclerView abrufen Klicken Sie auf

Dies ist mein Erster Versuch der Umsetzung der RecyclerView. Ich habe implementiert eine Callback Schnittstelle zwischen den Adapter und die ViewHolder Klasse zu handhaben, Klicken Sie auf Ereignisse auf der UI-Elemente (buttons). Ich habe Probleme bekommen einen Verweis auf die ViewHolder dass der Klick aufgetreten ist. Ich kann auf die Button für das erste Element in der Liste, aber die Aktion, die ich hatte definiert, erfolgt auf der letzten viewholder in meine recycler anzeigen. Ich fand schließlich heraus, übergeben Sie die position durch mein interface, aber ich habe Mühe zu verstehen wie man eine Referenz auf das viewholder`.

    public class RoomAdapter extends RecyclerView.Adapter<RoomAdapter.RoomViewHolder>
{
    List<Room> mRooms;
    public RoomAdapter(List<Room> rooms) {
        mRooms = rooms;
    }

    @Override
    public RoomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        final View viewItem = LayoutInflater
                .from(viewGroup.getContext())
                .inflate(R.layout.room_rv_item,viewGroup,false);
        return vh = new RoomViewHolder(viewItem,new IRoomViewClick() {
            @Override
            public void editname(int pos) {

            }
        });
    }

    @Override
    public void onBindViewHolder(RoomViewHolder roomViewHolder, int i) {
        Room r = getItem(i);
        roomViewHolder.label.setText(r.name);


    }
    public Room getItem(int position)
    {
        return mRooms.get(position);
    }
    @Override
    public long getItemId(int position) {
        return mRooms.get(position).getId();
    }

    @Override
    public int getItemCount() {
        return mRooms.size();
    }

    public static class RoomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
    {
        TextView label;
        Button editBtn;
        LinearLayout labelView;
        Button saveBtn;
        Button deleteBtn;
        EditText editNameET;
        IRoomViewClick mListener;
        public RoomViewHolder(View itemView, IRoomViewClick listener) {
            super(itemView);
            labelView = (LinearLayout) itemView.findViewById(R.id.labelview);
            mListener = listener;
            editBtn =(Button) itemView.findViewById(R.id.editbtn);
            editBtn.setOnClickListener(this);
            label = (TextView) itemView.findViewById(R.id.room_listitem_label);

        }

        @Override
        public void onClick(View view) {
            int pos = getPosition();
            mListener.editname(pos);



        }
    }
    public static interface IRoomViewClick
    {
        public void editname(int pos);
    }

}

Referenz auf ViewHolder in RecyclerView abrufen Klicken Sie auf

InformationsquelleAutor der Frage gsueagle2008 | 2014-11-12

Schreibe einen Kommentar