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
Post a Comment