Ce sera une question théorique.Reliure dans ViewHolder
Comme tout le monde, nous utilisons RecyclerView dans de nombreuses parties de l'application. Parfois, RecyclerView contient des éléments différents, pas seulement de l'image par exemple, mais des publicités, des conseils, etc. Et c'est pourquoi nous pouvons utiliser la méthode getViewType() dans Adapter.
Mais le problème se produit lorsque nous avons plusieurs viewTypes et que la liaison dans Adapter n'est pas élégante. Donc, voici la question, est-il agréable et bon modèle pour lier des données dans ViewHolder?
Disons que nous avons une liste d'applications.
Chaque application a un nom pour plus de simplicité. Notre ViewHolder ressemble à ceci:
class AppViewHolder extends RecyclerView.ViewHolder {
public TextView nameText;
AppViewHolder(View itemView) {
super(itemView)
nameText = (TextView) itemView.findViewById(R.id.text_name);
}
}
Maintenant, on pourrait ajouter méthode bind:
public void bind(App app) {
nameText.setText(app.getName());
}
Est-il bon modèle?
Une autre solution serait d'utiliser ViewModel. Parce que nous avons différents éléments dans RecyclerView, notre adaptateur peut contenir une liste de classe qui est la classe de base pour chaque ViewModel.
classe de base est donc:
class RecyclerViewItem {}
Maintenant classe qui est ViewModel pour App.
class AppRecyclerViewItem extends RecyclerViewItem {
App app;
...
}
et notre adaptateur a juste la liste des RecyclerViewItems:
class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<RecyclerViewItem> items;
...
}
Donc, avec cette approche (je veux dire en utilisant ViewModel) est-il préférable d'ajouter la méthode de liaison à ViewHolder, ou ViewModel?
Je pense que la première méthode est bonne surtout parce que dans recyclerview onBindViewHolder w Appelez bind dans le viewholder, donc l'adaptateur ne gagnera pas beaucoup de lignes. Mais j'aime l'idée que tu as suggérée, je vais y plonger. – ThirdMartian
Utilisez-vous cette approche dans votre travail? Pouvez-vous partager votre expérience? – ThirdMartian