【发布时间】:2014-03-01 11:40:45
【问题描述】:
我通过 JSON 获取一些数据,这些数据存储在 Hashmap 地图 中,例如map.put(KEY_TITLE, parser.getString("title")) 然后将地图添加到 ArrayList> bookList。这显示在一个列表视图中,其中 bookList 作为适配器的源。此外,我还将地图的所有书籍信息(标题、作者、出版日期)存储在 Arraylist arrTitles、arrAuthors、arrDates 中,因为我需要将这些值传递给我的下一个活动。我的问题是,当我使用比较器根据标题对 bookList 进行排序时,bookList 的排序就很好了。但是,我想根据 bookList 的新排序对我的 arrTitles、arrAuthors 和 arrDates 进行排序,以便我的 arrTitles.getItem(position) 将正确的值发送到下一个活动。知道我该怎么做吗?下面是 hashmap、arraylist、onItemClick 和比较器代码:
for (int i = 0; i < json.Length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(KEY_ID, json.getString("id"));
map.put(KEY_TITLE, json.getString("title"));
map.put(KEY_AUTHOR, json.getString("author"));
map.put(KEY_DATE, json.getString("date"));
arrTitles.add(json.getString("title");
arrAuthors.add(json.getString("author");
arrDates.add(json.getString("date");
//add map to ArrayList
booksList.add(map);
}
list=(ListView)findViewById(R.id.list);
Collections.sort(booksList, mapComparator);
adapter=new LazyAdapter(this, booksList);
list.setAdapter(adapter);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(this, editList.class);
intent.putExtra("title", arrTitles.getItem(position));
intent.putExtra("date", arrDates.getItem(position));
startActivity(intent);
}
});
}
public Comparator<Map<String, String>> mapComparator = new Comparator<Map<String, String>>() {
public int compare(Map<String, String> m1, Map<String, String> m2) {
return m1.get(KEY_TITLE).compareTo(m2.get(KEY_TITLE));
}
};
【问题讨论】:
-
很难分辨上下文,因为您在方法的中途发布了代码。这段代码是循环的吗?目前尚不清楚我们将如何最终获得多个项目,尤其是当您在添加到列表后立即开始一项新活动时。此外,使用地图而不是创建具有
title属性等的Book类有什么好的理由吗?后者通常会更干净,IMO。 -
很抱歉。是的,booksList 会循环更新。已更新我的代码以反映相同的情况。
-
循环前集合是空的吗?
-
是的,在循环之前集合是空的。
标签: java android sorting arraylist hashmap