首页 > 解决方案 > 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'}

问题出在哪里?

标签: javaandroidandroid-listview

解决方案


它看起来像是不维护插入顺序helperMap的类型。HashMap

将类型更改helperMapLinkedHashMapwhich 为您提供可预测的迭代顺序。


推荐阅读