2010-03-21 2 views
5

Ho un ListView con più voci a scelta dove alcuni vengono controllati dall'inizio utilizzandoArticolo errato verificato durante il filtraggio ListView in Android

setItemChecked(position, true); 

unisco questo con l'opzione di filtraggio

setTextFilterEnabled(true) 

quindi è facile trovare una voce specifica nella lista.

Il problema è che quando filtro l'elenco le voci cambiano posizione nella visualizzazione elenco. Prendiamo ad esempio tre voci: "A", "B" e "C" in cui "C" viene controllato in anticipo (cioè la voce nella posizione 3 nell'elenco). Quando digito una "C" sulla tastiera, viene visualizzata solo la voce "C" (come previsto). Ora 'C' non è più controllato, poiché la voce è stata spostata dalla posizione controllata 3 alla posizione 1 non selezionata nell'elenco.

Questo comportamento causa alcuni effetti non molto graditi nell'app. C'è un modo per "spostare la selezione con il filtro", cioè legare lo stato controllato alla voce e non alla sua posizione iniziale nella lista? O devo trovare un nuovo approccio?

Grazie,

Linus

+0

Soffrendo dello stesso problema. So che è stato lungo, ma sei riuscito a risolvere questo problema? –

+0

@liorry: Non ricordo davvero, ma penso di aver seguito il suggerimento nella risposta accettata. Troppo tempo fa :) – aspartame

+0

haha ​​OK. Anche se forse puoi condividere il codice ... Ho usato il suggerimento ma qualcosa non funziona per me ... oh, beh, grazie comunque;) –

risposta

3

mantenere un elenco degli elementi selezionati, e ogni volta che l'elenco viene ripopolato controllo se id (non posizionare) esiste nell'elenco, e impostare come selezionato.

+0

Puoi spiegarlo usando un codice? – user2699728

0

Sì, questo comportamento è dovuto al fatto che ListView mantiene la posizione come riferimento agli elementi selezionati. Ciò significa che anche per gli adattatori con ID stabili la selezione è vincolata alla posizione (che è stata filtrata nel tuo caso). Come suggerito, implementare alcune mappe/set personalizzati per conservare gli ID che vengono controllati e alimentarli all'adattatore.