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);
}
}
InformationsquelleAutor der Frage gsueagle2008 | 2014-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie einen tag für die
editBtn
imonBindViewHolder
:bekommen und es in
onClick
InformationsquelleAutor der Antwort Juude
Eigentlich können Sie es besser machen als
getTag
durch den AufrufgetChildViewHolder(View child)
auf die RecyclerView:InformationsquelleAutor der Antwort Shawn Lauzon
notifyItemChanged benachrichtigt Ihre onBindViewHolder, dann können Sie so etwas tun
Wenn Sie auf das Element, es wird sich ändern, pos-Wert und trigger //Etwas Tun
InformationsquelleAutor der Antwort jackconsolidated
Herausstellen, dass
RecycleView
speichert die position der Ansicht in der Ansicht params, also, wenn Sie wollen einfach nur die position der Ansicht aus, um den richtigen Eintrag aus der Liste aus, die Sie verwenden können:InformationsquelleAutor der Antwort shem