Questo è il mio primo tentativo di implementare lo RecyclerView
. Ho implementato un'interfaccia Callback
tra Adapter
e la classe ViewHolder
per gestire gli eventi di clic sugli elementi dell'interfaccia utente (pulsanti). Sto riscontrando problemi nel trovare un riferimento allo ViewHolder
in cui si è verificato il clic. Posso fare clic sullo Button
per il primo elemento nell'elenco, tuttavia l'azione che ho definito viene eseguita sull'ultimo viewholder
nella mia visualizzazione del riciclatore. Alla fine ho capito di passare la posizione attraverso la mia interfaccia, ma mi sto sforzando di capire come ottenere un riferimento a quello spettatore.Ottenere un riferimento a ViewHolder su RecyclerView Fare clic su
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);
}
}
Vorrei che non solo io ottenere un ref al pulsante al posto del ViewHolder stessa? – gsueagle2008
heh ... non ho letto attentamente la domanda ... pensavo che avessi bisogno di una posizione (dato che non ho visto il corpo di getPosition() nel tuo codice) ... ma sì, puoi mettere lì ViewHolder invece ... ma poi non conoscerai la posizione, dal momento che ... beh, è RecyclerView e view/viewholder può essere ... riciclato ... – Selvin
Sì, ho perso l'implementazione della funzione getPosition() nel mio codice. Questo probabilmente non ha aiutato. Non sono ancora completamente chiaro sull'impostazione e sul recupero dei tag e sulla conversione in un ViewHolder che posso manipolare. – gsueagle2008