2017-02-18 6 views
0

Я хочу создать файловый менеджер. Этот алгоритм хорошо работал с ArrayAdapter, но когда я его переделал в SimpleAdapter, он переставал работать правильно. Основная проблема: когда я добавляю элемент в ArrayList, он дублируется. Я не знаю, в чем проблема. Помоги мне. Thaks.Проблема с SimpleAdapter

onActicityCreated метод:

private final String ATTRIBUTE_NAME_TEXT = "text"; 
private final String ATTRIBUTE_NAME_IMAGE = "image"; 

private String[] from = {ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_IMAGE}; 
private int[] to = {R.id.currPath, R.id.imageView}; 


@Override 
public void onActivityCreated(Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState); 

    Log.d(TAG, "Tab created"); 
    if (savedInstanceState == null) { 
     Log.d(TAG, "SIS == null"); 
     paths.add("/storage/emulated/0/"); 
     paths.add("/storage/extSdCard/"); 

     Map<String, Object> m = new HashMap<>(); 
     ArrayList<Map<String, Object>> data = new ArrayList<>(); 
     for(int i = 0; i < paths.size(); i++){ 
      m.put("text", paths.get(i)); 
      m.put(ATTRIBUTE_NAME_IMAGE, R.mipmap.ic_launcher); 
      data.add(m); 
     } 
     MySimpleAdapter adapter = new MySimpleAdapter(getActivity(), data, R.layout.item, from, to); 
     setListAdapter(adapter);//Creating a primary form of application 
    } 
    else{ 
     Log.d(TAG, "SIS != null"); 
     currentPath = savedInstanceState.get(KEY_PATH).toString(); 
     paths = savedInstanceState.getStringArrayList(KEY_LIST); 

     Map<String, Object> m = new HashMap<>(); 
     ArrayList<Map<String, Object>> data = new ArrayList<>(); 
     for(int i = 0; i < paths.size(); i++){ 
      m.put(ATTRIBUTE_NAME_TEXT, paths.get(i)); 
      m.put(ATTRIBUTE_NAME_IMAGE, R.mipmap.ic_launcher); 
      data.add(m); 
     } 
     MySimpleAdapter adapter = new MySimpleAdapter(getActivity(), data, R.layout.item, from, to); 
     setListAdapter(adapter); 
    } 
} 
+1

Каждый раз, используя этот цикл 'for', вы используете один и тот же экземпляр' Карта'. Вероятно, вы хотите создать новый каждый раз в верхней части цикла. –

+1

о, дерьмо. Спасибо. Как я не заметил? –

ответ

1

Просто, чтобы закрыть этот вопрос, как уже упоминалось в комментариях Mike, вам нужно создать новый экземпляр карты для каждой итерации цикла.

for(int i = 0; i < paths.size(); i++){ 
    Map<String, Object> m = new HashMap<>(); 
    m.put(ATTRIBUTE_NAME_TEXT, paths.get(i)); 
    m.put(ATTRIBUTE_NAME_IMAGE, R.mipmap.ic_launcher); 
    data.add(m); 
}