java - 对我的 ArrayAdapter 进行排序不会更改我的数据源

标签 java android sorting android-arrayadapter

我有一个奇怪的问题。我有一个正在排序的 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]

我该如何解决?

最佳答案

相反:对数据源进行排序将对 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());

quotes 没有排序,那么问题与 Adapter 无关,而是与比较有关。

关于java - 对我的 ArrayAdapter 进行排序不会更改我的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3706019/

相关文章:

Java客户端服务器,多线程

java - 从段落中分离单词并插入到树结构中

java - 我如何停止 Runnable 线程或 "interface"

java - Android 媒体播放器通知

string - 如何在 Dart 中对字符串列表进行排序?

java - 无法使用 spring boot jpa 构建 Hibernate SessionFactory

android - EditText maxLines 不起作用 - 用户仍然可以输入比设置更多的行

javascript - 如何在 WebView 中扩展 JavaScript 控制台(以匹配 ConsoleMessage.MessageLevel)

bash - 帮助使用 sort 对文件进行排序

javascript - 如何将对象(及其属性/值)打印到 DOM