Как поставить все значения в HashMap в ArrayList для Андроид?



У меня есть ArrayList, и я хочу поместить все данные массива в мою хэш-карту, но проблема в том, что все, что я получаю, - это последнее значение индекса списка массивов.
Вот мой код



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);
633   3  

3 ответов:

Вы должны поставить

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

Внутри блока for

У вас есть только один экземпляр "карты", и вы только меняете значение этой карты.

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

 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);
 }

Comments

    Ничего не найдено.