0

Ich verwende SectionedRecyclerViewAdapter von luizgrp/SectionedRecyclerViewAdapter als Adapter für meine RecyclerView.Android SectionedRecyclerViewAdapter implementieren getItemId

Mit RecyclerViewAdapter, wenn ich will jede Zeile eindeutig identifizieren, werde ich diese Methode überschreiben:

@Override 
public long getItemId(int position) { 
    return this.dataList.get(position).getId(); 
} 

Aber wie mache ich das mit SectionedRecyclerViewAdapter? I Abschnitt Code haben, wie unten, habe ich getId() -Methode:

public class Section1 extends Section { 
     ..... 

     public long getItemId(int position) { 
     if (position == 0) { 
      return 0; 
     } 

     return this.openPosList.get(position - 1).getId(); 
     } 
} 

Ich denke, ich werde SectionedRecyclerViewAdapter & Überschreibung getItemId() erstreckt. Aber ich habe Probleme, die position in Abschnitt Zeilenposition hier zu konvertieren.

public class PositionRecylerViewAdapter extends SectionedRecyclerViewAdapter { 
    ...... 

    @Override 
    public long getItemId(int position) { 
      // ???? 
      // transform position here into Section's item position, considering multiple Sections with Header & Footer 
      // ???? 
    } 

} 

Wer implementiert ähnlichen Code zuvor mit jedem Beispielcode? Vielen Dank!

+0

Sie wollen also die getID() Methode der Sektion aufrufen? – aborocz

+0

@aborocz ja, irgendwann werde ich Abschnitt getID() –

Antwort

0

Ich finde es heraus & dies in meinem PositionRecylerViewAdapter implementieren.

public class PositionRecyclerViewAdapter extends SectionedRecyclerViewAdapter { 

    public PositionRecyclerViewAdapter() { 
     super(); 
     ...... 

     this.setHasStableIds(true); 
    } 

    ....... 

    @Override 
    public long getItemId (int index) { 
     int viewType = this.getSectionItemViewType(index); 
     Section1 section1 = (Section1) this.getSection(POSITION_SECTION); 

     if (viewType == SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER) { 
      return section1.getHeaderId(); 
     } else if (viewType == SectionedRecyclerViewAdapter.VIEW_TYPE_ITEM_LOADED) { 
      int sectionItemIndex = this.getPositionInSection(index); 
      return section1.getItemId(sectionItemIndex); 
     } 

     return -1; 
    } 

} 

In Section1 Klasse:

public class Section1 extends Section { 
    ..... 

    public long getHeaderId() { 
     return headerId; 
    } 

    public long getItemId(int index) { 
     return this.openPosList.get(index).getId(); 
    } 
} 

Posted meine eigene Antwort & hoffentlich jemand es sinnvoll, das nächste Mal findet, Dank!

Verwandte Themen