2012-05-29 16 views

risposta

17

Se per "intestazione" si intende un'intestazione effettiva aggiunta utilizzando uno dei metodi addHeaderView(...), è possibile semplicemente recuperare il numero di intestazioni aggiunte utilizzando getHeaderViewsCount().

In alternativa, se ricordo correttamente, ListView avvolgerà il suo adattatore all'interno di HeaderViewListAdapter se contiene intestazioni e/o piè di pagina. È possibile utilizzare il suo getHeadersCount() per recuperare lo stesso numero di cui sopra.


Edit: Se si vuole verificare se si aggiunge un'intestazione specifica, si dovrebbe essere in grado di interrogare il HeaderViewListAdapter per questo. Avrai bisogno di una sorta di criteri da controllare.

Per esempio, se ci sono 3 intestazioni nel vostro ListView, è possibile scorrere nel corso dei primi tre elementi (probabilmente si può prenderli direttamente dal HeaderListViewAdapter, o utilizzare s' getItemAtPosition(...) metodo ListView) e vedere se uno le partite il criterio. Il modo più semplice per eseguire questa corrispondenza è probabilmente aggiungere intestazioni utilizzando il metodo addHeaderView(...) che accetta anche un parametro Object. È possibile fornire praticamente qualsiasi cosa per differenziare tra le intestazioni multiple, ovviamente a condizione che gli oggetti dati siano diversi. Per esempio. potresti semplicemente passare una stringa.

Con questi dati in posizione, è possibile chiamare getItem(...)/getItemAtPosition(...) per le prime 3 posizioni e controllare cosa viene restituito. Il vantaggio dell'utilizzo di una stringa per i dati è che ogni oggetto Java implementa un metodo toString(), che è quindi possibile sfruttare per un confronto diretto .

In alternativa, è possibile utilizzare la riflessione per ottenere la variabile membro effettiva mHeaderViewInfos (che è solo un ArrayList<ListView.FixedViewInfo>) e utilizzarla per la logica condizionale.

+0

Cool Non sapevo di questo metodo, utile sapere. Tuttavia, alcune delle mie ListViews conterranno più intestazioni. C'è un modo per capire se contengono un'intestazione specifica? – Matthew

+0

Giusto, in realtà avrei potuto capirlo dal titolo della domanda. Comunque, per favore vedi l'aggiunta alla mia risposta originale. Questo dovrebbe aiutarti per la tua strada. –

+0

Grazie per la risposta aggiornata. Sembra un buon modo per farlo. In alternativa, ho preso l'approccio molto semplice di impostare un flag booleano 'headerXAdded' su true ogni volta che chiamo addHeaderView (v) e cancellando quel flag ogni volta che rimuovo la vista dell'intestazione. – Matthew

Problemi correlati