您的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;
}
}
更新您的適配器
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