Ecco lo scenario: ho una semplice ListView che mostra un feed di Twitter. Ho un CursorAdapter che sta recuperando tweet da sqlite. Quando chiamo requery() sul mio cursore, mi aspetto che vengano caricati nuovi tweet che sono stati aggiunti al database. Funziona tutto bene e i nuovi elementi sono visibili anche in ListView dopo che questo è successo.Android ListView con CursorAdapter ha una scorretta posizione di scorrimento dopo che la richiesta viene chiamata quando vengono aggiunti nuovi articoli
Il problema è che la posizione di scorrimento sembra essere salvata in base all'offset di posizione dell'elemento. Quindi diciamo che la prima posizione visibile nel mio ListView è 4. Quando eseguo la query e 2 nuovi elementi vengono aggiunti in cima all'elenco, il ListView mantiene la posizione di scorrimento del primo oggetto visibile come 4, tuttavia dal momento che ci sono due nuovi elementi nell'elenco , Ora vedo un oggetto diverso in posizione 4 rispetto a prima che mi aggiornassi. Questa immagine illustra il prima e il dopo:
Notate come Prima, Tweet D è il primo elemento visibile e poi, Tweet B ora diventa il primo elemento visibile.
La mia domanda è, come posso mantenere la stessa posizione di scorrimento in base alla posizione del cursore quando si chiama la richiesta, in modo che in questo esempio, Tweet D sarebbe ancora il primo elemento visibile dopo una richiesta?
Il mio problema principale con questo è che tutti i miei articoli non hanno la stessa altezza, quindi lo scorrimento come questo potrebbe non ottenere la posizione 'esatta' che era in precedenza, ad esempio se un oggetto è metà visibile ... – Redth
Hai provato? Perché anche la mia lista ha file di altezze variabili. Ma funziona perfettamente. 'int top = v == null? 0: v.getTop(); 'Questa parte gestisce effettivamente il caso quando un elemento è parzialmente visibile. – Enigma