Android java:如何正确将排序数据发送到listView?

Posted

技术标签:

【中文标题】Android java:如何正确将排序数据发送到listView?【英文标题】:Android java: How correct send sorted data to listView? 【发布时间】:2021-04-04 17:33:13 【问题描述】:

我以 Map 格式对数据进行排序,其中 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 FindedUsername='ccc', id='11', timestamp='1609093171'
1609092871 FindedUsername='bbb', id='10', timestamp='1609092871'
1609092015 FindedUsername='aaa', id='9', timestamp='1609092015'

但是当我将它发送到 listView 时:

MyAdapterHash addedUsersAdapter = new MyAdapterHash(helperMap);
        addedUsersListView.setAdapter(addedUsersAdapter);
        addedUsersAdapter.notifyDataSetChanged();

结果排序不正确:

1609092015 FindedUsername='aaa', id='9', timestamp='1609092015'
1609093171 FindedUsername='ccc', id='11', timestamp='1609093171'
1609092871 FindedUsername='bbb', id='10', timestamp='1609092871'

问题出在哪里?

【问题讨论】:

地图是一个无序的集合。你的MyAdapterHash 是如何实现的? 我看不到在哪里可以编辑我的帖子,也不知道 NyAdaptedHash 是否正确实施,但地图类型存在问题。 @Live 和 Let Live 给了我 LinkedHashMap 类型。谢谢 【参考方案1】:

看起来helperMapHashMap 类型,它不维护插入顺序。

helperMap 的类型更改为LinkedHashMap,这将为您提供可预测的迭代顺序。

【讨论】:

谢谢!这正是我所需要的。

以上是关于Android java:如何正确将排序数据发送到listView?的主要内容,如果未能解决你的问题,请参考以下文章

如何将java json对象数据发送到android api请求

将实时 Android 音频流式传输到服务器

在UDP Socket java android上发送和接收数据

Java Android - 将数据从活动发送到片段

如何将 SQL 数据映射到 Java JSON 对象和 JSON 数组?

如何将数据从客户端(android-java 应用程序)发送到解析服务器,对其进行处理,将其保存在 parse-dashboard 中并将结果发送回客户端?