2016-12-14 60 views
1

我正在實現與多個layouts的recyclerview。通常我們有不同的佈局的多個視圖,並根據所需的佈局覆蓋其他方法。我已成功實現this.But現在我有一個不同的場景例如:回收視圖,顯示一些視頻(比如說3),然後是另一個佈局(比如佈局x),再3個視頻,然後再佈局x等等。假設我有10個視頻,那麼在這種情況下,itemcount將是10 + 3 3佈局x將顯示。但視頻在滾動時加載。因此,如何確定要在getItemCount()中返回的視圖數量;
我的意思是Android:獲得recyclerview中的視圖數

@Override 
public int getItemCount() { 

     return ListofVideos.size() + "WHAT??" 
} 

佈局是這樣
enter image description here

如果所有的視頻都在加載後,它很容易計算的若干意見一樣,如果我有21個視頻,我將有共有27個視圖(即21個視頻和6個佈局X視圖)。但是當列表被加載滾動時,我如何確定視圖的數量?

回答

0

您的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

相關問題