Листовий вигляд повертає виняток, коли адаптер змінений

У мене є ListView, який відображає певну кількість даних, і має кнопку в нижній частині, яку можна натиснути для завантаження додаткових даних. Це відбувається наступним чином:

CustomArrayAdapter a = GetInitialData();
LayoutInflater layoutInflater = 
   (LayoutInflater)context.getSystemService( Context.LAYOUT_INFLATR_SERVICE );
LinearLayout ll = 
   (LinearLayout)layoutInflater.inflate(R.layout.more_button_layout, null, false);
Button b = (Button)ll.findViewById(R.id.more_button);

b.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
    a.loadNextPage();
  }
});

lv.addFooterView(ll);
lv.setAdapter(a);

Проблема в тому, що кожного разу, коли я натискаю кнопку, я отримую ConcurrentModificationException в ітераторі, що володіє адаптером. Я вважаю, що це викликано тим фактом, що завантажується loadNextPage (), коли щось повторюється через список, але я не можу зрозуміти, як зробити це не таким.

1

1 Відповіді

See the following URL http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html

або Спробуйте за допомогою CopyOnWriteArrayList

Це виняток може бути викинутим методами, які виявили одночасну модифікацію об'єкта, коли така модифікація не допускається.

Наприклад, для однієї нитки взагалі неможливо змінити колекцію, а інша гілка - або те ж нитка - повторюється над нею.

Зауважте, що це виняток не завжди вказує на те, що об'єкт одночасно був змінений іншим потоком. Якщо жодна гілка видає послідовність викликів методу, що порушує договір об'єкта, об'єкт може викинути це виняток. Наприклад, якщо потік модифікує колекцію безпосередньо, коли він повторюється над колекцією з невдалою ітерацією, ітератор виведе це виключення.

Приклад:

for (Iterator it = myCollection.iterator(); it.hasNext()) {
Object myObject = it.next();
if (someConditionIsTrue) {
// myCollection.remove(myObject);//wrong can throw ConcurrentModificationException
it.remove(myObject);//right
}
} 
0
додано
Проблема в тому, що я постійно повторюю список, щоб його показати - я знаю, що це відбувається, я просто не знаю, як обійти це. Я не думаю, що потрібно використовувати CopyOnWriteArrayList, щоб зробити щось так просто, як динамічно розширюється ListView.
додано Автор Slubb, джерело
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.