2013-07-04 20 views
5

Ich habe eine ArrayList und ich möchte alle Array-Daten in meine Hash-Map, aber das Problem ist alles, was ich bekomme ist der letzte Index-Wert der Array-Liste. Hier ist mein CodeWie alle Werte in Arraylist auf hashmap in Android setzen?

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

luisZavaletas Antwort ist korrekt, aber Sie missbrauchen immer noch eine Karte, wenn Sie wirklich einen POJO verwenden sollten. –

+0

@MattBall Warum sollte dies als Missbrauch der Karte betrachtet werden? – Sebastialonso

Antwort

9

Sie

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

innerhalb der

für Block

Sie haben nur eine Instanz von „Karte“ und Sie ändern nur den Wert, dass setzen müssen Karte.

2

Das Problem ist, wie Sie das Kartenobjekt verwenden. Wenn Sie die Karte zur Liste hinzufügen, fügen Sie keine neue Kopie hinzu. Stattdessen kopieren Sie den Verweis auf die Karte. Also fügen Sie jedes Mal die gleiche Karte hinzu. Beim letzten Durchlauf der Schleife überschreiben Sie alle Werte in der Karte mit den Werten des letzten Objekts in Ihrem Array. Daher sieht es so aus, als ob nur das letzte Element hinzugefügt wurde. Während ich dies schreibe, hat luisZavaleta gerade geschrieben, was du tun musst, also hör ihm zu.

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

Ich habe das schon getan und danke für @luisZavaleta. – NewDroidDev

Verwandte Themen