2011-02-04 11 views
1

私は2つの配列を持っています(実際には1つですが、各列に2つずつ作成されています)。私は、ListViewコントロールの値をハッシュマップを移入したいが、リストビューのすべての要素は、配列の最後の要素である:配列からハッシュマップを取り込む方法

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
HashMap<String, String> map = new HashMap<String, String>(); 

    for (int i=0; i<13; i++) 
    { 
     map.put("left1", date[i]); 
     map.put("right1", name[i]); 
     mylist.add(map); 
    } 


SimpleAdapter simpleAdapter = new SimpleAdapter(this, mylist, R.layout.row, 
     new String[] {"left1", "right1"}, new int[] {R.id.left, R.id.right}); 
lv1.setAdapter(simpleAdapter); 

任意のアイデア? ありがとう

+1

具体的な実装に制限するのではなく、インターフェイスを使用して変数を宣言することを検討する必要があります。 'List > myList'が良いでしょう。 – rfeak

+0

実際には、おそらく 'List <? Map > myList'(およびMap map')を拡張します。しかし、すべての変数は、それが知られている最も具体的な型として宣言されるべきだという議論があります。その基準の下では、関数宣言は関数にローカルなので宣言は良好です。 (パラメータとして、同じ基準で、最も一般的な型であると宣言されなければならないということが指示されています。それは、それらについてすべてが仮定される必要があるからです)。 :) –

答えて

6

アレイのすべてのスロットに同じマップを追加しています。

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

for (int i=0; i<13; i++) 
{ 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("left1", date[i]); 
    map.put("right1", name[i]); 
    mylist.add(map); 
} 
+0

+1:これは、変数の宣言をどこに置くか注意する必要がある理由です。 – Powerlord

+0

どういう意味ですか?私は両方のoncreateメソッドで、両方の配列を宣言しようとしました。\t String [] date = new String [13]; – erdomester

+0

@erdomester:元の実装では、既に1つのマップが作成されています。その後、ループを通過して別の値を入れますが、毎回同じキーが上書きされます(もちろん上書きされます)。そのため、配列の最後の値で終了します。 @Ted Hoppのメソッドは、ループが実行されるたびに新しいマップを作成し、そのマップにキーと値を配列に追加します。 – kcoppock

関連する問題