Сортировка моего ArrayAdapter не меняет мой источник данных - PullRequest
3 голосов
/ 14 сентября 2010

У меня странная проблема.У меня есть ArrayAdapter, который я сортирую.Это правильно отображается на моем экране, однако, когда я проверяю фактический источник данных, содержимое не было отсортировано.Как я могу гарантировать, что сортировка моего ListAdapter будет также сортировать мой источник данных?

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.

Например: если мой источник данных [10,9,1,20]

после сортировки, мой ListView покажет [1,9,10,20]

но источником данных по-прежнему будет [10,9,1,20]

Как я могу решить эту проблему?

1 Ответ

4 голосов
/ 14 сентября 2010

И наоборот: сортировка источника данных приведет к упорядочению ArrayAdapter.

Полагаю, вы уже делали что-то подобное раньше.

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

Затем, если вы отсортировали кавычки, уведомление адаптера об изменении набора данных должно отсортировать список

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

Это работает для меня, надеюсь, это поможет.

Одна важная вещь: если вы воссоздаете исходный массив ( в кавычках в этом конкретном примере), адаптер не будет читать дальнейшие изменения. Таким образом, если вам нужно изменить содержимое вашего ListView, выполните:

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

Кроме того, убедитесь, что вы правильно внедрили Компаратор. Если вы выполните это

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

и кавычки не отсортированы, тогда проблема связана не с адаптером, а с компарацией.

...