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 аламын. Бұл жүктемеNextPage() тізімде бір нәрсе болып жатқанда, қоңырау шалып жатқандығынан туындайды деп ойлаймын, бірақ мен мұны қалай жасауға болатынын түсінбеймін.

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
қосылды
Мәселе мынада, бұл тізім үнемі оны көрсету үшін оны қайталайды - мен мұның қалай жүретінін білемін, мен оны қалай айналдыру керектігін білмеймін. Динамикалық түрде кеңейтілетін ListView сияқты қарапайым нәрсе жасау үшін CopyOnWriteArrayList пайдалану қажет деп ойламаймын.
қосылды автор Slubb, көзі