2013-07-04 61 views
5

我有一個ArrayList,我想把所有的數組數據放在我的哈希映射中,但問題是我得到的只是數組列表的最後一個索引值。 這裏是我的代碼如何把所有值在ArrayList中的hashmap在android中?

ArrayList<String> imagesFileName = new ArrayList<String>(); 
public String[] filename; 

public static final String FILE_NAME = "filename"; 
public static final String DESCRIPTION = "filename1"; 
public static final String UPLOADEDBY = "filename2"; 
public static final String DATE_UPLOAD = "filename3"; 
public static final String ACTION = "filename4"; 
public static final String ID = "1"; 
ArrayList<HashMap<String, String>> mylist; 

    filename = new String[imagesFileName.size()]; 
    for (int i = 0; i < imagesFileName.size(); i++) { 
     filename[i] = imagesFileName.get(i); 
    } 


     mylist = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> map = new HashMap<String, String>(); 
     for (int i = 0; i < imagesFileName.size(); i++) { 
      map.put(FILE_NAME, filename[i]); 
      map.put(DESCRIPTION, "desc"); 
      map.put(UPLOADEDBY, "uploadby"); 
      map.put(DATE_UPLOAD, "date_upload"); 
      map.put(ACTION, "delete"); 
      map.put(ID, "1"); 
      mylist.add(map); 
    } 


    adapter = new CustomArrayAdapter(getApplicationContext(), mylist, R.layout.attribute_ireport_list, 
      new String[]{FILE_NAME, DESCRIPTION, UPLOADEDBY, DATE_UPLOAD, ACTION, ID}, 
      new int[]{R.id.tv_File, R.id.txt_Desc, R.id.tv_UploadedBy, R.id.tv_DateUploaded, R.id.tv_Action, R.id.txt_id}, true); 

     lv_iReport.setAdapter(adapter); 
+1

luisZavaleta的回答是正確的,但是當你真的應該使用POJO時,你仍然在濫用/濫用Map。 –

+0

@MattBall爲什麼這應該被視爲濫用地圖? – Sebastialonso

回答

9

你必須把

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

內的塊

你的「地圖」只是一個實例,你只改變了該值地圖。

2

問題是你如何使用地圖對象。將地圖添加到列表中時,不會添加它的新副本。而是將參考複製到地圖。所以你真的每次都添加相同的地圖。在循環的最後一次運行中,用數組中最後一個對象的值覆蓋映射中的所有值。這就是爲什麼它看起來只添加了最後一個元素。當我寫這個luisZavaleta剛發佈你需要做的,所以聽他說。

2
for (int i = 0; i < imagesFileName.size(); i++) { 
    HashMap<String, String> map = new HashMap<String, String>();//put in it 
    map.put(FILE_NAME, filename[i]); 
    map.put(DESCRIPTION, "desc"); 
    map.put(UPLOADEDBY, "uploadby"); 
    map.put(DATE_UPLOAD, "date_upload"); 
    map.put(ACTION, "delete"); 
    map.put(ID, "1"); 
    mylist.add(map); 
} 
+0

我已經這樣做了,並感謝@luisZavaleta。 – NewDroidDev

相關問題