Ho provato a utilizzare il metodo ListView.indexOfChild (Visualizzazione vista) per verificare se ListView contiene una vista di intestazione specificata, ma a volte restituisce -1 quando ListView contiene effettivamente un'intestazione specificata. C'è un modo migliore per verificare questo?Come si controlla se un ListView contiene un'intestazione specificata?
risposta
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.
- 1. Controlla se l'elenco contiene un tipo?
- 2. Controlla se l'elemento è nella lista (contiene)
- 3. Javascript - controlla se div contiene una parola?
- 4. Controlla stringa se contiene solo caratteri latini?
- 5. Controlla se un elenco contiene già un articolo o no?
- 6. Controlla se una stringa contiene asterisco (*)
- 7. PHP Controlla se l'ora corrente è prima dell'ora specificata
- 8. Controlla se una variabile contiene un valore numerico in Javascript?
- 9. Controlla se una stringa contiene solo un set di lettere
- 10. Controlla se un nodo xml contiene sub figlio
- 11. Controlla se una stringa contiene un indirizzo email?
- 12. Django - controlla se l'elenco contiene qualcosa in un modello
- 13. controlla se div contiene un elemento in jQuery
- 14. Come si controlla se esiste Record
- 15. Controlla se la stringa non contiene un'altra stringa
- 16. controlla se la stringa contiene un'interruzione di riga
- 17. Objective-C controlla se la matrice con ints contiene int
- 18. Come si controlla se un file è aperto usando Perl?
- 19. Come si controlla se è caricato un elemento audio HTML5?
- 20. Espresso - controlla se il TextView esiste in ListView
- 21. Controlla se una casella di testo contiene solo numeri
- 22. Actionscript 3: controlla se la stringa contiene un'altra stringa
- 23. controlla se la stringa dell'ora della data contiene l'ora
- 24. Python: controlla se una stringa contiene caratteri cinesi?
- 25. jQuery: Controlla se l'oggetto jQuery contiene (include) l'elemento DOM esatto
- 26. Numpy: controlla se l'array float contiene numeri interi
- 27. Controlla se due volte si sovrappongono
- 28. Come si controlla se una riga è bloccata per l'aggiornamento?
- 29. Come si controlla se la lista è vuota?
- 30. Come verificare se un TextView contiene una determinata stringa
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
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. –
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