2016-06-25 65 views
2

我在我的項目中有一個ViewHolder的Recyclerview。對於這個RecyclerView,我有很多項目要填充,但爲了簡單起見,我添加了100個項目。但是,對於這100個項目,onCreateViewHolder被稱爲100個項目,即對於它正在被調用的每個項目,因此對於每個項目視圖正在變得成熟。如果我將使用所有項目(可能是1000或2000),我得到OOM。那麼我怎樣才能避免這個電話onCreateViewHolder爲每個項目。真的需要幫助!爲每個項目調用recyclerview的Viewholder

public static final int HEADER = Integer.MIN_VALUE; 
public static final int FOOTER = Integer.MIN_VALUE + 1; 
public static final int ADAPTER_OFFSET = 2; 

@Override 
    public int getItemViewType(int position) { 
     if (position == 0 && useHeader()) { 
      return HEADER; 
     } 

     if (useHeader() && position > getBasicItemCount() && useFooter()) 
      return FOOTER; 
     else if (!useHeader() && position >= getBasicItemCount() && useFooter()) 
      return FOOTER; 

     int basicItemType = getBasicItemType(position - (useHeader() ? 1 : 0)); 

     if (basicItemType >= Integer.MAX_VALUE - ADAPTER_OFFSET) { 
      new IllegalStateException(
        ""); 
     } 

     return basicItemType + ADAPTER_OFFSET; 
    } 

@Override 
    public int getBasicItemType(int position) { 
     return position; 
    } 
+0

張貼您的美女。你重寫了'getItemViewType'嗎? – Blackbelt

+0

@Blackbelt,謝謝你,但我的適配器我不能張貼在這裏。對不起。但它是簡單的適配器。我不知道我做錯了什麼。請如果你能幫助我看到適配器 –

+0

@Blackbelt是的,我已覆蓋getItemViewType。 –

回答

4

getItemViewType更換次數onCreateViewHolder數被調用。該文件指出它

返回位置上的項目的視圖類型,用於查看 回收的目的。

這意味着每次getItemViewType返回一個不同的值,Android認爲你正在處理一個新的不同類型,並且你想要一個不同的視圖。你的實現,正在返回position。這意味着getItemCount不同意見

相關問題