Come faccio a creare una ListView che non è in uno ScrollView, o ha lo ScrollView disabile?
-
19-09-2019 - |
Domanda
Voglio un po 'delle chicche in un ListView, come essere in grado di utilizzare un ListAdapter, e selezione della voce, ecc, ma non voglio che la parte ScrollView di esso. Voglio realizzare quella parte io stesso, in un modo diverso (perché o come faccio questo non è davvero il punto di questa domanda, quindi per favore non chiedere "perché").
C'è un modo per avere un controllo ListView che non è in uno ScrollView o ha disattivato lo scorrimento?
Soluzione
Un ListView
non è in un ScrollView
. Un ListView
non scorrimento intrinsecamente. Io non credo che si possa disattivare lo scorrimento attraverso una semplice API. Se è così, le scelte sono o sottoclasse ListView
e cercare di trovare il modo di ignorare lo scorrimento comportamenti, clone ListView
ed eliminare lo scorrimento comportamenti, o lascia la tua AdapterView
che rende le cose nel modo desiderato.
Altri suggerimenti
Un altro modo per farlo è quello di avvolgere il ListView
in qualsiasi soluzione di scorrimento personalizzato che hai cucinato. Se è sufficiente impostare l'altezza della ListView
ad essere esattamente come alto come tutte le righe (utilizzando LayoutParams
della visualizzazione elenco), allora sarà agire come una vista normale e non sarà in grado di scorrere; pertanto è possibile aggiungerlo ad un'altra vista di scorrimento. La difficoltà di questo metodo è che si deve conoscere l'altezza della vostra lista prima del tempo, in modo da avere per conoscere l'altezza di ogni riga. Inoltre, questo creerà tutte le righe in una sola volta e quindi non sarà in grado di sfruttare la funzionalità di visualizzazione-riciclaggio.
Se non si dispone di un modo semplice per calcolare l'altezza prima del tempo, si può ingannare il ListView
a fare per voi sovrascrivendo onMeasure
e dandogli il proprio spec Altezza:
// Calculate height of the entire list by providing a very large
// height hint. But do not use the highest 2 bits of this integer;
// those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);