2012-10-03 6 views
0

ListView에 잘못된 값이 표시됩니다. 내 코드는 아래와 같습니다.ArrayList의 값이 잘못되었습니다. <HashMap <String, String >>

final ArrayList<HashMap<String, String>> placesListItems = new ArrayList<HashMap<String, String>>(); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       try { 
        HashMap<String, String> map = new HashMap<String, String>(); 

        for (int i = 0; i < dealList.size(); i++) { 
         map.put(DealItem.DEAL_ID, dealList.get(i).deal_id); 
         map.put(DealItem.DEAL_NAME, dealList.get(i).deal_name); 
         System.out.println("DEAL NAME = "+dealList.get(i).deal_name); 
         placesListItems.add(map); 

        } 

        new PlacesMapActivity(SinglePlaceActivity.this, lon, lat, name, add); 

        ListView lv = (ListView) findViewById(R.id.listView); 
        simpleAdapter = new SimpleAdapter(SinglePlaceActivity.this, placesListItems, R.layout.list_item_deal, new String[] { 
          DealItem.DEAL_ID, DealItem.DEAL_NAME }, new int[] { R.id.reference, R.id.name }); 
        lv.setAdapter(simpleAdapter); 

나는이

10-03 18:37:29.429: I/System.out(3957): DEAL NAME = Sinbad Cafe 
    10-03 18:37:52.369: I/System.out(3957): DEAL NAME = Coffee,Tea, Hot Milk 
    10-03 18:37:55.189: I/System.out(3957): DEAL NAME = Httpss 

같은 대답을 얻고있다하지만 아래처럼 ListView

에서 잘못된 값을 얻고 왜 이해가 안이 코드를 실행하면

Httpss 
    Httpss 
    Httpss 
+0

@Shark : simpleAdapter is * made * maps * 어떻게 놀랍 니? – njzk2

+0

아, 내 잘못. 그것이 BaseAdapter와 같다고 생각했습니다 ... – Shark

답변

0
+-------- HashMap<String, String> map = new HashMap<String, String>(); 
    | 
    |   for (int i = 0; i < dealList.size(); i++) { 
    +---------------> 
        map.put(DealItem.DEAL_ID, dealList.get(i).deal_id); 
        map.put(DealItem.DEAL_NAME, dealList.get(i).deal_name); 
        System.out.println("DEAL NAME = "+dealList.get(i).deal_name); 
        placesListItems.add(map); 

       } 

, 당신은 실제로 같은 덮어 쓰기된다 해시 맵과의 ArrayList에 다시 넣어 ..

에 ..에 대한 루프 당신의 HashMap의 초기화 내부를 이동 하려고

1

동일한 맵이 여러 번 목록에 추가됩니다.

...> 새로운 HashMap의 <에게 옮겨보십시오 - 라인에 대한 루프 :

   for (int i = 0; i < dealList.size(); i++) { 
     -->  HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(DealItem.DEAL_ID, dealList.get(i).deal_id); 
        map.put(DealItem.DEAL_NAME, dealList.get(i).deal_name); 
        System.out.println("DEAL NAME = "+dealList.get(i).deal_name); 
        placesListItems.add(map); 

       } 
당신이 당신의 루프 외부에서 "HashMap의"초기화를 가지고 있기 때문에
0

코드를 다음 코드로 변경하면 ..... 오류를 해결할 것입니다 .....

try { 


       for (int i = 0; i < dealList.size(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(DealItem.DEAL_ID, dealList.get(i).deal_id); 
        map.put(DealItem.DEAL_NAME, dealList.get(i).deal_name); 
        System.out.println("DEAL NAME = "+dealList.get(i).deal_name); 
        placesListItems.add(map); 

     } 
관련 문제