2013-07-04 8 views
5

Mam ArrayList i chcę umieścić wszystkie dane tablicy w mojej mapie mieszania, ale problem jest wszystko, co otrzymuję, to ostatnia wartość indeksu z listy tablic. Oto mój kodJak umieścić wszystkie wartości w tablicy listy do hashmap w systemie 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

Odpowiedź luisZavaleta jest poprawna, ale nadal nadużywasz/niewłaściwie używasz Mapy, kiedy naprawdę powinieneś używać POJO. –

+0

@MattBall, dlaczego to powinno być uznane za nadużycie mapy? – Sebastialonso

Odpowiedz

9

Musisz umieścić

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

wewnątrz dla bloku

mieć tylko jedną instancję „map” i jesteś tylko zmianę wartości, które mapa.

2

Problem polega na sposobie korzystania z obiektu mapy. Po dodaniu mapy do listy nie dodaje się jej nowej kopii. Zamiast tego kopiujesz odniesienie do mapy. Więc za każdym razem dodajesz tę samą mapę. W ostatnim przebiegu pętli nadpisujesz wszystkie wartości na mapie wartościami ostatniego obiektu w twojej tablicy. Dlatego wygląda na to, że dodawany jest tylko ostatni element. Kiedy piszę ten luisZavaleta właśnie napisałem, co musisz zrobić, więc posłuchaj go.

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

Już to zrobiłem i dziękuję za @luisZavaleta. – NewDroidDev

Powiązane problemy