2013-07-04 4 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. –

+0

@MattBall почему это следует считать злоупотреблением картой? – Sebastialonso

ответ

9

Вы должны положить

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

внутри для блока

У вас есть только один экземпляр «карту», ​​и вы только изменив значение, что карта.

2

Проблема заключается в том, как вы используете объект карты. Когда вы добавляете карту в список, вы не добавляете ее новую копию. Вместо этого вы копируете ссылку на карту. Так что вы каждый раз добавляете одну и ту же карту. При последнем запуске цикла вы переписываете все значения на карте со значениями последнего объекта в вашем массиве. Вот почему это похоже, что добавлен только последний элемент. Когда я пишу это, Луис Завалета только что написал, что вам нужно сделать, так что слушайте его.

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

Смежные вопросы