java - ArrayList<HashMap<String, Object> 按 ListView 单元格的 KEY 值排序

标签 java android

我有一个 ListView,显示时间和日期以及一些与问题无关的其他信息。它们存储在 ArrayList Hashmap 中。当加载到 ListView 中时,它们默认按 ID 组织,而是需要按日期和时间组织。这是我到目前为止的代码。

public void loadListView() {
   productsList = new ArrayList<HashMap<String, Object>>();
    lv = (ListView) getActivity().findViewById(R.id.listview);
    lv.setTextFilterEnabled(true);
    DatabaseHandler db = new DatabaseHandler(getActivity());
    List<SalesCall> salescall = db.getAllSalescalls();
    lv = (ListView) getActivity().findViewById(R.id.listview);
    for (SalesCall cn : salescall) {
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put(KEY_ID, cn.getID());
        map.put(KEY_NAME, cn.getDoctor());
        map.put(KEY_TIME, cn.getScheduled_time());
        map.put(KEY_DATE, cn.getScheduled_Date());
        map.put(KEY_ALL, cn.getAccount() + ":" + cn.getDoctor());
       productsList.add(map);

    }

    adapter = new ExtendedSimpleAdapter(
            getActivity(), productsList,
            R.layout.listview_item_layout_salescall,
            new String[]{KEY_ID, KEY_NAME, KEY_TIME, KEY_DATE, KEY_ALL},
            new int[]{R.id.id, R.id.fname, R.id.Time, R.id.Date, R.id.All});
    // updating listview

    lv.setAdapter(adapter);
    db.close();
}

我将如何相应地对数据进行排序?

编辑: 比较代码

  @Override
      public int compare(SalesCall lhs, SalesCall rhs) {
        if (lhs.getScheduled_Date() == null || rhs.getScheduled_Date() == null)
            return 0;
        return lhs.getScheduled_Date().compareTo(rhs.getScheduled_Date());
    }

最佳答案

HashMap 的实现不提供任何项目的顺序。 ArrayList 保持添加数据的顺序。您应该更改流程以获得预期的结果。

这是您需要的流程:

  1. 按有效顺序获取数据
  2. 创建映射
  3. 显示

在您的代码中使用方法

List<SalesCall> salescall = db.getAllSalescalls();

如果您按要求的顺序提供了这些数据,那么您无需在映射之前对它们进行排序

List<SalesCall> salesCallByDate = db.getSalesCallsAndSortBy(R.id.Date, R.id.Time);

然后,当您遍历此列表并创建映射到存储在新列表中的 map 时,顺序将保持不变。

关于java - ArrayList<HashMap<String, Object> 按 ListView 单元格的 KEY 值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25704677/

相关文章:

java - 如何安全存储SecretKey?

android - 有没有办法在 Android 上升级应用程序后重新启动服务?

java - Android,Imageview,几个问题

android - 如何在 Android XML 中引用可绘制类

java - 上传具有共享首选项的多个图像

java - 使用正则表达式解析文本适用于在线测试,但不适用于此代码

Java代码 - 线程相互阻塞

java - Dropwizard 1.0.0-rc2 registerDefaultExceptionMappers 无法识别的字段

java - 在 Java 中通过一次调用(如 JSON.stringify)打印整个结构?

android - NotificationCompat android - 如何只显示大图标而不显示小图标