2012-09-17 2 views
2

J'implémente ListView avec la section dans laquelle je montre les en-têtes de section personnalisés en dehors des alphabets conventionnels comme en-tête. Afin de mettre en œuvre correctement la coutume SectionIndexer, je souhaite comprendre la différence entre les deux méthodes getSectionForPosition et getPositionForSection.Différence entre getPositionForSection et getSectionForPosition

Je comprends (je ne sais pas si c'est correct) que getSectionForPosition renvoie l'alphabet que nous voulons afficher dans l'en-tête de la section.

Je ne comprends pas l'autre méthode. En outre, sont-ils similaires dans tous les sens (du tout) et de quelle manière ils diffèrent (s'ils le font, ce que je pense qu'ils font :))

Toute personne ayant une compréhension à ce sujet peut donner une réponse à ce sujet. Appréciez votre temps en passant par la question.

Mise à jour:

Je suis passé par la documentation à ce official page; Je cherche une idée élaborée en ce qui concerne la coutume SectionIndex mise en œuvre

Répondre

0

La méthode getPositionForSection(int section) vous renvoie l'index de départ dans la liste pour section

alors que la méthode getSectionForPosition(int position) vous renvoie l'index de la section qui contient l'article à position

5

getPositionForSection(section) renvoie la première position à laquelle les données de curseur dans la colonne indexée commencent avec la section.

Par exemple, si l'index de la section B est 1 et la colonne indexée du curseur comporte les données suivantes

Position  Data    getSectionForPosition(position) 

_________  __________   ______________________________ 

0    Abhfdf    0 

1    Achahtkh   0 

2    Ahtjlarej   0 

3    Bchatkd    1 

4    Bjklhdsfoi   1 

5    Bzhafdlsfk   1 

6    Cj fadsfkj   2 

puis getPositionForSection(1) renvoie 3

également getPositionForSection(2) rendements 6

Hope this vous aide

+0

est-il possible que nous obtenions jamais la position en utilisant 'getPositionForSection (1)' comme 4 ou 5? –

+0

@Mahendra Non. Il retournera toujours la première position –

1

Voici un exemple d'implémentation que j'ai créé. Peut-être cela clarifie-t-il un peu le SectionIndexer.

Pour la tenue de vos données, vous pouvez utiliser des classes privées internes:

private class Item { 
    public int sectionNumber; 

    public Long id; 
    public String name; 
} 

private class Section { 
    public int startPosition; 

    public String header; 

    @Override 
    public String toString(){ 
     return header; 
    } 
} 

Utilisez une liste pour vos articles et une pour vos sections:

private List<Item> items = new ArrayList<Item>(); 
private List<Section> sections = new ArrayList<Section>(); 

La mise en œuvre dans l'adaptateur de liste pour SectionIndexer pourrait être comme le suivant maintenant:

@Override 
public int getPositionForSection(int sectionNumber) { 
    return sections.get(sectionNumber).startPosition; 
} 

@Override 
public int getSectionForPosition(int itemPosition) { 
    return items.get(itemPosition).sectionNumber; 
} 

@Override 
public Object[] getSections() { 
    return sections.toArray(); 
} 

Bien sûr, vous devriez mettre en œuvre un méthode maintenant pour remplir les listes de données de votre adaptateur.