InfiniteViewPager icon indicating copy to clipboard operation
InfiniteViewPager copied to clipboard

InfinteViewPager crashing when updating viewpager with new set of content

Open SumiGhosh opened this issue 10 years ago • 4 comments

Hi,

When i am updating the viewpager with new set of content and calling notifyDataSetChanged, the app getting crashed.

Below is the logcat details:

java.lang.IndexOutOfBoundsException: Invalid index 10, size is 4
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
        at java.util.ArrayList.set(ArrayList.java:481)
        at android.support.v4.app.FragmentStatePagerAdapter.destroyItem(FragmentStatePagerAdapter.java:137)
        at in.jackson.goopa.MainActivity$CustomViewPagerAdapter.destroyItem(MainActivity.java:771)
        at in.jackson.goopa.customlib.InfinitePagerAdapter.destroyItem(InfinitePagerAdapter.java:70)
        at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:417)
        at in.jackson.goopa.customlib.InfiniteViewPager.setAdapter(InfiniteViewPager.java:78)
        at in.jackson.goopa.MainActivity$DilBackgroundService$1.run(MainActivity.java:435)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5304)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
        at dalvik.system.NativeStart.main(Native Method)

SumiGhosh avatar Jul 01 '15 11:07 SumiGhosh

How to update new set of data with the library?

SumiGhosh avatar Jul 01 '15 11:07 SumiGhosh

For now, i just cloned the FragmentStatePagerAdapter and changed the code as below for destroyItem

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    Fragment fragment = (Fragment)object;

    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }
    /*if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
            + " v=" + ((Fragment)object).getView());*/
    while (mSavedState.size() <= position) {
        mSavedState.add(null);
    }
    if(mFragments.size()>position){
        mSavedState.set(position, mFragmentManager.saveFragmentInstanceState(fragment));
        mFragments.set(position, null);

        mCurTransaction.remove(fragment);
    }
}

Currently it just working as it required.

SumiGhosh avatar Jul 02 '15 08:07 SumiGhosh

Thanks!, this review help me a lot.

daviwiki avatar Jun 19 '17 09:06 daviwiki

Thanks! This method inspired me.

caizhixing avatar Oct 17 '18 09:10 caizhixing