Я не понимаю, где твоя проблема? Можете ли вы дать больше объяснений, чего вы хотите достичь?
// редактировать
В своем коде вы определяете, что только первый элемент будет элементом типа VIEW0, а остальные - VIEW1. Это в функции getItemViewType(int position)
.
Если вы хотите определить, какой ViewHolder выбрать, вы должны выбрать его, прежде чем заполнять список. Создайте enum в вашем адаптере:
enum TYPE {
VIEW0,
VIEW1
}
затем создайте переменную enum:
private TYPE itemType;
и передайте его в свой конструктор:
public Test(ArrayList<MyDataProvider> _arrayList, TYPE itemType) {
this.arrayList = new ArrayList<>();
this.arrayList = _arrayList;
this.itemType = itemType;
}
и проверьте, какой у вас тип (на основе переменной itemType
) в вашем переключателе в функции onCreateViewHolder
. Обратите внимание, что переменная в switch - это itemType, а не viewType из метода переопределения.
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (itemType) {
case VIEW0:
return new NotificationsAdapter.ReferralTriggerViewHolder(inflater.inflate(R.layout.row_referral_trigger, parent, false));
case VIEW1:
return new NotificationsAdapter.UserNotificationViewHolder(inflater.inflate(R.layout.row_layout_user_notification, parent, false));
default:
return new NotificationsAdapter.UserNotificationViewHolder(inflater.inflate(R.layout.row_layout_user_notification, parent, false));
}
}