Domanda

Ho un ListActivity che ottiene i suoi dati da una query sul database. Ho anche un adattatore personalizzato che estende l'adattatore del cursore semplice.

Per mostrare il contenuto personalizzato, ho sovrascritto i metodi newView e bindView.

Ogni elemento della vista ha:

  1. TextView contenente un titolo
  2. ImageView contenente il numero di stelle - l'immagine mostrata viene modificata in base a un valore ottenuto dal database
  3. Un pulsante: il testo del pulsante cambia ai clic (Preferito / Crea preferito) e attiva un evento di aggiornamento del database.

Il mio problema è questo: quando scorro il ListView, le modifiche che ho apportato sembrano scomparire .. ad esempio, il primo elemento è contrassegnato come preferito e l'elenco viene fatto scorrere ... quando torno al primo elemento, il testo ritorna al suo valore precedente, sebbene internamente il db sia stato aggiornato.

Ho letto che notifyDatasetChanged() non è corretto in questo caso poiché l'adattatore dovrebbe essere informato delle modifiche al database. Sto cercando di utilizzare il metodo reQuery(), ma non so dove posizionarlo.

Devo inserire reQuery() nel metodo onClick del pulsante? In caso contrario, dove dovrebbe essere posizionato?

È stato utile?

Soluzione

Qualunque sia l'adattatore che stai usando deve avere il metodo getView. Ogni volta che viene fatto scorrere un elenco, questo metodo getView viene chiamato per tutti gli elementi listItem nella vista.Assicurati nel metodo getView.Che la visualizzazione viene generata in modo dinamico.


Dovrebbe controllare il valore cliccato o modificato.


per aggiornare l'elenco senza scorrere devi chiamare listView.getAdapter (). notifyDataSetChanged ()

Controlla il seguente link.qui ho citato un codice completo per utilizzare correttamente listview.Usando questo possiamo ottenere qualsiasi comportamento listview.Possiamo anche incorporare l'animazione.

Modifica lo sfondo di ListView - comportamento strano

Spero che questo aiuto :)

Altri suggerimenti

Se hai BaseAdapter esteso, dopo che i dati sono stati modificati chiama, listView.setAdapter () e in getView (), aggiorna anche i dati della vista.

Utilizza SetListAdapter con ArrayAdapter per visualizzare l'elenco.Utilizza ConvertView per evitare di gonfiare View.

if (convertView==null)
{
     //inflate your list
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top