Ваш Adapter
несет ответственность за заполнение вида, поэтому у него есть все виды вашего RecyclerView
, в то время как ваши ListofVideos
(может) имеют только видео ссылки.
Всякий раз, когда вы прокручиваете RecyclerView
, Adapter
несет ответственность за раздувание просмотров.
Что вы должны делать?
Создать интерфейс
public interface BaseItem {
int ITEM_TYPE_HEADER = 0;
int ITEM_TYPE_SUB_HEADER = 1;
int ITEM_TYPE_ROW_NORMAL = 2;
int getItemType();
}
И реализует этот интерфейс с пунктом видео вашего адаптера, как
public class YourAdapterVideoItem implements BaseItem {
// rest of your code
@Override
public int getItemType() {
return ITEM_TYPE_ROW_NORMAL;
}
}
Создания элемент заголовка вашего адаптера
public class YourAdapterHeaderItem implements BaseItem {
// rest of your code
@Override
public int getItemType() {
return ITEM_TYPE_HEADER;
}
}
Update адаптер с
public class YourAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<BaseItem> items = new ArrayList<BaseItem>();
@Override
public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
BaseRecyclerViewHolder holder;
switch (viewType) {
case BaseItem.ITEM_TYPE_ROW_NORMAL:
default:
// inflate your default items
break;
case BaseItem.ITEM_TYPE_HEADER:
// inflate your default items
break;
}
return holder;
}
@Override
public void onBindViewHolder(BaseRecyclerViewHolder viewHolder, int position) {
BaseItem base = getItemAt(position);
switch (base.getItemType()) {
case BaseItem.ITEM_TYPE_HEADER:
// populate your header view
break;
case BaseItem.ITEM_TYPE_ROW_NORMAL:
// populate your actual view
break;
}
}
@Override
public int getItemCount() {
return items == null ? 0 : items.size();
}
@Override
public int getItemViewType(int position) {
return getItemAt(position).getItemType();
}
public BaseItem getItemAt(int position) {
return items == null ? null : items.get(position);
}
}
Если вы хотите добавить заголовок, используйте YourAdapterHeaderItem
для ваших видеороликов, используйте YourAdapterVideoItem
.
Надеется, что это помогает
Редактировать
Для добавления заголовков в GridLayoutManager
посмотреть на RecyclerView GridLayoutManager with full width header