2016-06-25 8 views
2

Ich habe Recyclerview in meinem Projekt, das einen ViewHolder hat. Für diesen RecyclerView habe ich viele Gegenstände zu besetzen, aber der Einfachheit halber habe ich 100 Artikel hinzugefügt. Aber für diese 100 Elemente wird onCreateViewHolder 100 Elemente aufgerufen, d. H. Für jedes Element, das aufgerufen wird, daher wird für jede Elementansicht eine Infusion erhalten. Wenn ich alle Elemente (1000 oder 2000) verwenden werde, erhalte ich OOM. SO wie kann ich diesen Anruf von onCreateViewHolder für jeden Artikel vermeiden. Brauche wirklich Hilfe !!Viewholder von recyclerview, das für jedes Einzelteil angerufen wird

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

poste deinen Adater. Haben Sie 'getItemViewType' überschrieben? – Blackbelt

+0

@Blackbelt, Danke Mann, aber mein Adapter kann ich hier nicht posten. Das tut mir leid. Aber es ist einfach einfacher Adapter. Ich weiß nicht, was ich falsch mache. Bitte, wenn Sie helfen können, ohne den Adapter zu sehen –

+0

@Blackbelt ja, ich habe getItemViewType überschrieben. –

Antwort

4

getItemViewType ändert sich die Anzahl der Male onCreateViewHolder genannt wird. Die Dokumentation gibt an, dass es

Geben Sie den Ansichtstyp des Artikels an der Position für die Sicht Recycling zurück.

bedeutet dies, dass jedes Mal, getItemViewType einen anderen Wert zurückgeben, Android denkt, dass Sie mit einer neuen anderen Art zu tun hat, und Sie wollen eine andere Ansicht für sie. Ihre Implementierung gibt position zurück. Es bedeutet getItemCount verschiedene Ansichten