2013-07-04 41 views
5

Tôi có một ArrayList và tôi muốn đặt tất cả các dữ liệu mảng trong bản đồ băm của tôi nhưng vấn đề là tất cả tôi nhận được là giá trị chỉ số cuối cùng của danh sách mảng. Dưới đây là mã của tôiLàm thế nào để đặt tất cả giá trị trong arraylist vào hashmap trong 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 câu trả lời là đúng, nhưng bạn vẫn đang lạm dụng/lạm dụng Bản đồ khi bạn thực sự đang sử dụng POJO. –

+0

@MattBall lý do tại sao điều này nên được coi là lạm dụng bản đồ? – Sebastialonso

Trả lời

9

Bạn phải đặt

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

bên trong cho khối

Bạn chỉ có một thể hiện của "bản đồ" và bạn chỉ thay đổi giá trị đó bản đồ.

2

Vấn đề là cách bạn sử dụng đối tượng bản đồ. Khi bạn thêm bản đồ vào danh sách, bạn không thêm bản sao mới của bản đồ. Thay vào đó bạn đang sao chép tham chiếu đến Bản đồ. Vì vậy, thực sự bạn đang thêm cùng một bản đồ mỗi lần. Trong lần chạy cuối cùng của vòng lặp, bạn ghi đè lên tất cả các giá trị trong bản đồ với các giá trị của đối tượng cuối cùng trong mảng của bạn. Đó là lý do tại sao có vẻ như chỉ có phần tử cuối cùng được thêm vào. Khi tôi viết luisZavaleta này chỉ cần đăng những gì bạn cần làm, vì vậy hãy lắng nghe anh ấy.

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

Tôi đã làm điều đó và cảm ơn vì @luisZavaleta. – NewDroidDev