2011-01-09 10 views
13

Im un po 'di perdita su questo su come produrre sezioni in un ListView quando si utilizza sia Cursori e Custom SimpleCursorAdapter.SimpleCursorAdapter con sezioni in Android

Molti dei documenti là fuori fanno riferimento usando getView() ecc., Oppure creando diversi adattatori e aggiungendo intestazioni di sezione.

Ma questi tutti sembrano basarsi su BaseAdapters, ListAdapters, e ArrayAdapters ecc

Qualcuno ha affrontato qualcosa di simile in precedenza?

In caso negativo, qualche consiglio su come farlo funzionare?

Grazie Simon

risposta

9

ho seguito this tutorial e ha funzionato abbastanza bene. Il codice consente di utilizzare qualsiasi tipo di Adapter, quindi funziona perfettamente con ArrayAdapter o CursorAdapter.

+0

Grazie per quello. Ho dovuto riassumere il fatto che avevo bisogno di usare SeparatedListAdapter, essenzialmente come un wrapper per i miei adattatori personalizzati esistenti. – Simon

9

Se si utilizza un CursorAdapter, è possibile utilizzare il mio SectionCursorAdapter.

+0

Cheers, questo ha funzionato alla perfezione con SimpleCursorAdapters per avere sezioni alfabetiche nel mio ListView. Questo è stato molto più lavoro di quanto pensassi, penso che SimpleCursorAdapter mi abbia viziato nella sua semplicità! – georgiecasey

+0

Non è efficiente per il database SimpleCursorAdapter con un lungo elenco di elementi poiché è necessario iterare su tutti gli elementi per calcolare l'intestazione. Se il cursore viene restituito con una query GROUP BY, è molto meglio confrontare l'intestazione (il valore raggruppato) dell'elemento corrente con quello degli articoli precedente e successivo per determinare se abbiamo una nuova sezione o meno. –

+0

È possibile utilizzare AlphabetIndexer per calcolare le sezioni. – ycagri

2

Un altro grande che è in sviluppo attivo è SectionCursorAdapter e supporta gradle. Il creatore di questo ha anche promesso che sarà aggiornato per supportare RecyclerView quando viene rilasciato ufficialmente. Puoi anche controllare il post sul blog al numero ToastDroid