我试图从具有1个键的多个值的hashmap中检索数据并将其设置为listview但是我得到错误java.util.hashmap无法转换为java.util.list。 代码如下:
ListView lv = (ListView)findViewById(R.id.list);
//hashmap of type `HashMap<String, List<String>>`
HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
for (int i = 0; i < j; i++) {
values.add(value1);
values.add(value2);
hm.put(key, values);
}
并检索值并放入列表视图
ListAdapter adapter = new SimpleAdapter(
MainActivitty.this, (List<? extends Map<String, ?>>) hm,
R.layout.list_item, new String[] { key,
value1,value2},
new int[] { R.id.id, R.id.value1,R.id.value2 });
// updating listview
lv.setAdapter(adapter);
我该如何解决这个问题?
答案 0 :(得分:2)
将Map
换成List
以匹配构造函数SimpleAdapter的预期类型List<? extends Map<String, ?>
:
ListAdapter adapter = new SimpleAdapter(
MainActivitty.this, Arrays.asList(hm),
R.layout.list_item, new String[] { key,
value1,value2},
new int[] { R.id.id, R.id.value1,R.id.value2 });
请参阅此example
答案 1 :(得分:0)
您必须更改添加数据的顺序。根据{{3}},您必须创建一个地图列表,其中列表的每个条目代表一行数据。映射必须包含列名作为键,列值必须包含值。
所以要创建包含3列的3行:
List<? extends Map<String, ?>> data = new ArrayList<? extends Map<String, ?>>();
for (int i=0; i < 3; i++) {
Map<String, String> row = new HashMap<String, String>();
row.put(key, "key in row " + i);
row.put(value1, "value1 in row " + i);
row.put(value2, "value2 in row " + i);
data.add(row);
}
然后创建SimpleAdapter实例:
ListAdapter adapter = new SimpleAdapter(
MainActivitty.this, data,
R.layout.list_item, new String[] { key,
value1,value2},
new int[] { R.id.id, R.id.value1,R.id.value2 });