2010-09-14 3 views
3

J'ai un problème étrange. J'ai un ArrayAdapter que je suis en train de trier. Cela s'affiche correctement sur mon écran, mais lorsque je vérifie la source de données réelle, le contenu n'a pas été trié. Comment puis-je m'assurer que le tri de mon ListAdapter triera aussi ma source de données?Le tri de mon ArrayAdapter ne change pas ma source de données

Collections.sort(quotes, new PercentChangeComparator()); //sort my data source (this isn't necessary) 
quotesAdapter.sort(new PercentChangeComparator()); //sort my ListAdapter 
Toast toast = Toast.makeText(getApplicationContext(),quotes.get(0).getSymbol(), Toast.LENGTH_SHORT); 
toast.show(); //this shows that my data source hasn't been updated, even though my ListAdapter presents my ListView in the correctly sorted order. 

Par exemple: Si ma source de données est [10,9,1,20]

après le tri mon ListView montrera [1,9,10,20]

mais la source de données sera toujours [10,9,1,20]

Comment puis-je résoudre ce problème?

Répondre

4

C'est l'inverse: le tri de votre source de données ordonnera ArrayAdapter. Je suppose que vous avez déjà fait quelque chose comme ça auparavant.

ArrayList<PercentChangeComparator> quotes = getQuotesFromSomewhere(); 
QuotesAdapter quotesAdapter = new QuotesAdapter(this, R.layout.xxx, quotes); 

Ensuite, si vous triées entre guillemets, informer l'adaptateur que le DataSet a changé devrait trier la liste

Collections.sort(quotes, new PercentChangeComparator()); 
quotesAdapter.notifyDataSetChanged(); 

Cela fonctionne pour moi, j'espère que cela aide.

Une chose importante: si vous recréer le tableau source (cite dans cet exemple spécifique), l'adaptateur ne lira plus les modifications. Ainsi, si vous avez besoin de modifier le contenu de votre ListView, faites:

quotes.clear(); 
quotes.add(...); 
quotes.add(...); 

Aussi, assurez-vous correctement implémenté la Comparator. Si vous exécutez ce

Collections.sort(quotes, new PercentChangeComparator()); 

et citations ne sont pas triées, le problème est pas lié à l'adaptateur, mais à la comparation.