Не уверен, чего вы ожидаете достичь. onCreateViewHolder вызывается один раз для каждого объекта в вашей коллекции, чтобы связать раздутый необходимый макет и найти все виды. Вы можете раздувать различные макеты и связывать разные ViewHolders на основе целого числа:onCreateViewHolder(ViewGroup parent, int viewType)
Если у вас разные типы просмотров, вам необходимо переопределить метод getItemViewType, который будет вызываться с позиции позиции, чтобы вы могли определить, какой тип вида вам нужен. Этот метод возвращает int, который вы получите в onCreateViewHolder.
Вот хороший пример:
@Override
public int getItemViewType(int position) {
final Object dataObj = mDataSet.get(position);
if (dataObj instanceof String) {
return 0;
}
if (dataObj instanceof User) {
return 1;
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch(viewType) {
case 0:
return new StringViewHolder(...);
case 1:
return new UserViewHolder(...);
}
}
Я вижу в вашем коде, что вы отправляете данные в конструкторе ViewHolder. Это побеждает цель этого класса, потому что у вас будет только один экземпляр ViewHolder для типа объекта, и ему нужно только удерживать информацию о представлении макета, поэтому вам не нужно искать представления каждый раз, когда вам нужно связать объект. Вам действительно нужно использовать onBindViewHolder для привязки вашего объекта, например:
public void onBindViewHolder(UsersGroupsAdapter.ViewHolder holder, int position) {
// or something similar
holder.bind(mData.get(position));
}
Надеюсь это поможет.