java - Android java:如何正确将排序数据发送到listView?
问题描述
我以 Map<Integer, FindedUser> 格式对数据进行排序,其中 Integer 是 System.currentTimeMillis()/1000 和 FindedUser 类中的时间戳
Map<Integer, FindedUser> reverseSortedMap = new TreeMap<>(Collections.reverseOrder());
reverseSortedMap.putAll(addedUsersMap);
for (Map.Entry<Integer, FindedUser> entry : reverseSortedMap.entrySet()) {
FindedUser user = entry.getValue();
System.out.println(entry.getKey()+" "+entry.getValue());
helperMap.put(entry.getKey(), new FindedUser(user.getId(), user.getName(), user.getTimestamp()));
}
并得到正确的数据
1609093171 FindedUser{name='ccc', id='11', timestamp='1609093171'}
1609092871 FindedUser{name='bbb', id='10', timestamp='1609092871'}
1609092015 FindedUser{name='aaa', id='9', timestamp='1609092015'}
但是当我将它发送到 listView 时:
MyAdapterHash addedUsersAdapter = new MyAdapterHash(helperMap);
addedUsersListView.setAdapter(addedUsersAdapter);
addedUsersAdapter.notifyDataSetChanged();
结果排序不正确:
1609092015 FindedUser{name='aaa', id='9', timestamp='1609092015'}
1609093171 FindedUser{name='ccc', id='11', timestamp='1609093171'}
1609092871 FindedUser{name='bbb', id='10', timestamp='1609092871'}
问题出在哪里?
解决方案
它看起来像是不维护插入顺序helperMap
的类型。HashMap
将类型更改helperMap
为LinkedHashMap
which 为您提供可预测的迭代顺序。
推荐阅读
- air - 将两个 Adobe Air Mac 应用程序以一个包形式提交到 App Store
- azure - 访问 Azure 容器实例中的 IP 表
- javascript - 如何查询一些与此字段具有相同字段的 API 请求?
- javascript - 延迟显示和隐藏表格中的行
- javascript - 如何将 JavaScript 变量作为属性存储在对象内部
- css - 没有伪元素的 div 动画
- java - Fxml 需要获得与它所在的 fxml 相同的控制器
- wpf - PowerShell 在事件中更新 WPF 窗口
- android - 如何知道回收站视图在 23 版之前的 api 中是向上还是向下滚动
- javascript - 删除引用的 JS 对象中的属性