ListView Вяртае выключэнне, калі адаптар Мадыфікаваны

У мяне ёсць 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

Гэта выключэнне можа быць выкінута з дапамогай метадаў, якія выяўленых адначасовага змена аб'екта, калі такое змяненне не дапускаецца.

Напрыклад, як правіла, не permssible для аднаго струменя, каб змяніць калекцыю, а іншы паток - ці той жа паток - ітэрацыя над ім.

Звярніце ўвагу, што гэта выключэнне не заўсёды азначае, што аб'ект быў зменены адначасова іншым патокам. Калі адзін паток выдае паслядоўнасць выклікаў метадаў, якія парушаюць кантракт аб'екта, аб'ект можа выкінуць гэта выключэнне. Напрыклад, калі паток змяняе калекцыю непасрэдна ў той час як ітэрацыя па калекцыі з адмоваўстойлівасцю хуткім итератором, итератор будзе Скіньце гэта выключэнне.

прыклад:

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, крыніца