Cosa succede se ho 50 tipi di visualizzazioni? Devo avere 50 classi interne statiche nel mio adattatore? Secondo this answer, sì.Come gestire molti tipi di visualizzazione diversi nel viewholder Recyclerview
Il mio primo pensiero è stato quello di spostare ogni classe interna dell'osservatore in una classe pubblica separata, ma devono essere statici. Quindi incapsulare ognuno in una classe pubblica, per rendere statica la classe interiore? Esistono alternative più carine?
modifica: codice di esempio: Quindi questa sarebbe una buona soluzione? Questo non uccide anche le prestazioni?
public class MainViewHolder extends DragSortAdapter.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
View container;
TextView title;
//called in onCreateViewHolder in adapter
public MainViewHolder(DragSortAdapter adapter, View itemView) {
super(adapter, itemView);
container = itemView.findViewById(R.id.card_root);
title = container.findViewById(R.id.text);
}
//called by onBindViewHolder in adapter
public void setData(Data data) {
title.setText(data.title);
}
}
EDIT2: campione, perché quando una nuova istanza viene restituita del viewholder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new MainViewHolder(...);
case 2: return new MainViewHolderOther(...);
...
}
}
Perché pensi che una classe di livello superiore non è statico? Puoi aggiungere alcuni esempi di codice per chiarire cosa intendi? – nhaarman
perché devono essere statici? – Blackbelt
@NiekHaarman public class di livello superiore non può essere statico in java. – Tamas