Oui et Non
Il n'y a rien de mal à avoir votre objet de données à l'intérieur du support de vue. J'ai même vu des cartes avant avec beaucoup de ViewTypes qui ont utilisé une ViewHolder de base avec un paramètre générique T et une méthode abstraite pour lier la vue aux données, comme ceci:
abstract BaseHolder<T> extends ViewHolder {
.... constructor...
private T t;
abstract void bindView(T t);
}
C'est un joli motif, isole le voir la liaison au ViewHolder et l'adaptateur distribue simplement ces données aux détenteurs de droits.
D'autre part, poignée directement cliquer/événements taper à l'intérieur de ces mêmes supports que je considère comme une mauvaise pratique, il ne devrait pas être la responsabilité de ViewHolder de le faire.
La navigation dans une application, la génération d'appels réseau ou l'insertion d'une base de données doivent être redirigées vers la couche de vue supérieure (activité ou fragment) ou vers un contrôleur capable de gérer correctement la logique isolée.
Normalement sur ces cas, l'on pourrait créer une interface OnEventHappened
, par exemple comme ceci:
public interface onEventHappen {
void onLikeTapped(MyData data);
}
et la classe qui implémente cette interface doit être transmis à l'adaptateur qui passera à la ViewHolder. ViewHolder implémente le View.OnClickListener
de base et transmet l'événement avec les données associées à l'objet responsable de gérer cet événement. Quelque chose comme ceci:
MyHolder extends ViewHolder implements View.OnClickListener {
private final EventListener listener;
private MyData data; // this will be set by adapter or "bind" like explained above
public MyHolder(View itemView, EventListener listener) {
super(itemView);
itemView.findVieById(R.id.button).setOnClickListener(this);
this.listener = listener;
}
@Override public void onClick(View view) {
listener.onEvent(data);
}
}
J'espère que cela aide.
Vous avez déjà une référence à l'élément de liste dans ViewHolder. Vous pouvez simplement utiliser itemView. Donc, votre question n'est pas claire. – Bob
Je veux dire l'objet Java – atabouraya