Co zrobić, jeśli mam 50 typów widoków? Czy powinienem mieć 50 statycznych klas wewnętrznych w moim adapterze? Zgodnie z this answer, tak.Jak obsługiwać wiele różnych typów widoku w przeglądarce widoku recyklerów
Moja pierwsza myśl polegała na tym, aby przenieść każdą wewnętrzną klasę widoku do oddzielnej klasy publicznej, ale muszą one być statyczne. Więc zamknij każdą z nich w klasie publicznej, aby klasa wewnętrzna stała się statyczna? Czy są jakieś fajniejsze alternatywy?
edytuj: kod przykładowy: To byłoby dobre rozwiązanie? Czy to też nie zabija wydajności?
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: próbki, na kiedy nowa instancja jest zwracany z viewholder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new MainViewHolder(...);
case 2: return new MainViewHolderOther(...);
...
}
}
Dlaczego sądzisz klasy najwyższego poziomu nie jest statyczny? Czy możesz dodać przykłady kodu, aby wyjaśnić, co masz na myśli? – nhaarman
dlaczego muszą być statyczne? – Blackbelt
@NiekHaarman klasa publiczna najwyższego poziomu nie może być statyczna w java. – Tamas