我有一个 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 保持添加数据的顺序。您应该更改流程以获得预期的结果。
这是您需要的流程:
- 按有效顺序获取数据
- 创建映射
- 显示
在您的代码中使用方法
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/