1

1 つのキーに対して複数の値を持つハッシュマップからデータを取得してリストビューに設定しようとしていますが、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);

どうすればこれを修正できますか?

4

2 に答える 2

2

コンストラクタSimpleAdapterの予想される型と一致するようMapに a でラップします。ListList<? 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 });

この例を参照してください

于 2013-06-23T12:54:54.517 に答える
0

データを追加する順序を変更する必要があります。SimpleAdapterのドキュメントによると、リストの各エントリが 1 行のデータを表すマップのリストを作成する必要があります。マップには、列名をキーとして、列の値を値として含める必要があります。

したがって、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 });
于 2013-06-23T13:10:08.573 に答える