java - Android ArrayList - Adding items one by one results in IndexOutOfBoundsException -


i use following function animate filtering list (actually once found somewhere, don't know anymore):

 public void animateto(list<t> items) {     applyandanimateremovals(items);     applyandanimateadditions(items);     applyandanimatemoveditems(items); }  private void applyandanimateremovals(list<t> newitems) {     (int = mlistitems.size() - 1; >= 0; i--) {         final t item = mlistitems.get(i);         if (!newitems.contains(item)) {             removeitem(i);         }     } }  private void applyandanimateadditions(list<t> newitems) {     (int = 0, count = newitems.size(); < count; i++) {         final t item = newitems.get(i);         if (!mlistitems.contains(item)) {             additem(i, item);         }     } }  private void applyandanimatemoveditems(list<t> newitems) {     (int toposition = newitems.size() - 1; toposition >= 0; toposition--) {         final t item = newitems.get(toposition);         final int fromposition = mlistitems.indexof(item);         if (fromposition >= 0 && fromposition != toposition) {             moveitem(fromposition, toposition);         }     } }   public t removeitem(int position) {     final t item = mlistitems.remove(position);     notifyitemremoved(position);     return item; }  public void additem(int position, t item) {     mlistitems.add(position, item); // <- exception thrown here     notifyiteminserted(position); }  public void moveitem(int fromposition, int toposition) {     final t model = mlistitems.remove(fromposition);     mlistitems.add(toposition, model);     notifyitemmoved(fromposition, toposition); } 

sometimes exception following in additem function:

java.lang.indexoutofboundsexception: invalid index 203, size 201 

actually, how can happen? loop in applyandanimateadditions begins @ 0, adds items 1 one if not in list. how can index exception occur?

you can add check if position equal or larger(>=) arraylists size add item end of arraylist.

public void additem(int position, t item) {     if(position >= mlistitems.size())         mlistitems.add(mlistitems.size()-1, item);     else         mlistitems.add(position, item);     notifyiteminserted(position); } 

so here's problem iterating through newitems adding mlistitems


Comments