2016-06-25 9 views
2

私のプロジェクトでは、ViewHolderが1つあります。このRecyclerViewでは、私は多くのアイテムを設定していますが、簡単にするために100個のアイテムを追加しました。しかし、これらの100個のアイテムについては、onCreateViewHolderは、呼び出されているアイテムごとに100アイテム、つまりアイテムビューごとに呼び出されています。私はすべての項目を使用する場合(1000または2000かもしれない)、私はOOMを取得しています。だから、どのように私はonCreateViewHolderの各項目の呼び出しを避けることができます。本当に助けが必要です!!recyclerviewのビューアが各項目に対して呼び出されています

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

あなたのadaterを投稿してください。 'getItemViewType'をオーバーライドしましたか? – Blackbelt

+0

@Blackbelt、ありがとう、しかし、私のアダプターはここに投稿できません。そのために残念。しかし、それはまっすぐ前方シンプルなアダプターです。私は何が間違っているのか分からない。あなたがアダプタを見るのを助けることができるならば、 –

+0

@Blackbeltはい、私はgetItemViewTypeをオーバーライドしました。 –

答えて

4

getItemViewTypeonCreateViewHolderの数が呼び出された変更。ドキュメントには、

の の の
の の

ビューの目的のための表示の目的のためのアイテムのビュータイプを返します リサイクル。

これは、getItemViewTypeが別の値を返すたびに、Androidはあなたが新しいタイプの新しいものを扱っていると思っています。あなたの実装はpositionです。これは、getItemCountの異なるビューを意味します。

関連する問題