arrayAdapter.add не сохраняет предыдущие объекты

Борюсь с проблемой и перечитал почти все темы по этой ситуации, но правильного решения для своего случая не нашел. Я буду признателен за все предложения. В моем случае я создаю тестовое приложение и записываю результаты в базу данных, а затем пытаюсь получить сводку результатов в ListView. Сначала с пустым списком в качестве глобальной переменной я инициирую ArrayList

ArrayList<Results> updatedList = new ArrayList<>();

Затем в onCreateView я запускаю адаптер с пустым списком. У меня есть обычный CustomAdapter.

ProfileArrayAdapter arrayAdapter = новый ProfileArrayAdapter (getContext(), 0, updatedList);

А в другом методе я обновляю свой объект новыми данными и добавляю в arrayAdapter, но, к сожалению, я перепробовал все возможные способы, но в адаптер добавляются только последние значения, а предыдущие удаляются. Я даже использую notifyDataSetChanged. Возможно, цикл for может быть решением, но с увеличением количества элементов это станет проблемой. Пожалуйста, дайте мне несколько советов по этому вопросу.

    Results aResults = new Results (testIdString, testTypeString, numberOfCorrectAnswers, numberOfFalseAnswers, numberOfEmptyAnswers);
    arrayAdapter.add(aResults); 
    arrayAdapter.notifyDataSetChanged();

Изменить: Решение. Проблема заключалась в том, что каждый раз, когда фрагмент вызывается TabAdapter для fragmentPager, список обновляется. В Tabadapter я изменил новый StatisticalFragment на

СтатистикаFragment = StatisticsFragment.newInstance(StatisticsFragment.updatedList);

Затем в FragmentActivity я использовал putParcelableArrayList для передачи массива в новый фрагмент. Для этого я реализовал класс Parcelable в своем классе результатов. Я надеюсь, что это решение поможет кому-то еще.


person Ömer Faruk    schedule 22.12.2016    source источник


Ответы (1)


Слм Омер Кардес,

Вы должны сначала добавить новый объект Result aResult в свой глобальный ArrayList updatedList. После того, как вы добавите это, просто позвоните arrayAdapter.notifyDataSetChanged();.

Это должно выглядеть примерно так:

ArrayList<Results> updatedList = new ArrayList<>();
ProfileArrayAdapter arrayAdapter;
...

public View onCreateView(...){
  arrayAdapter = new ProfileArrayAdapter(getContext(), 0, updatedList);
  ...
}

public void updateList (Result newResult){
  updatedList.add(newResult);
  arrayAdapter.notifyDataSetChanged();
}
person Ahmet Kazaman    schedule 22.12.2016
comment
Спасибо за ответ, но снова та же проблема, насколько я понимаю, во время запуска действия вместо добавления новых данных в arrayList он создает новый ArrayList и добавляет новые данные в этот список. Поэтому никогда не создаются новые строки. - person Ömer Faruk; 22.12.2016
comment
Можете ли вы поделиться с нами своим ProfileArrayAdapter, пожалуйста? - person Ahmet Kazaman; 22.12.2016
comment
Пожалуйста, найдите добавленный адаптер. - person Ömer Faruk; 22.12.2016
comment
На самом деле я решил проблему с помощью одного моего друга. Я думаю, это может помочь в подобных случаях, проверьте отредактированный ответ. - person Ömer Faruk; 23.12.2016