KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I believe that FragmentStatePagerAdapter does not behave correctly when overriding getItemPosition(Object object) with the purpose of reordering the pages. Below is a simple example. In the initial state, the order of the pages is {A, B, C}. Upon calling toggleState() , the order of the pages changes to {A, C, B}. By overriding getItemPosition(Object object) , we ensure that the current page being viewed (A, B, or C) does not change. public static class TestPagerAdapter extends FragmentStatePagerAdapter { private boolean mState = true; public TestPagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override public int getCount() { return 3; } private void toggleState() { mState = !mState; notifyDataSetChanged(); } private String getLabel(int position) { switch (position) { case 0: return "A"; case 1: return mState ? "B" : "C"; default: return mState ? "C" : "B"; } } @Override public int getItemPosition(Object object) { String label = ((TestFragment) object).getLabel(); if (label.equals("A")) { return 0; } else if (label.equals("B")) { return mState ? 1 : 2; } else { return mState ? 2 : 1; } } @Override public CharSequence getPageTitle(int position) { return getLabel(position); } @Override public Fragment getItem(int position) { return TestFragment.newInstance(getLabel(position)); } } I have encountered two separate behaviours which seem incorrect. If I immediately call toggleState() (while viewing page A, before swiping to any other page), the app crashes. java.lang.IndexOutOfBoundsException: Invalid index 2, size is
Tags (comma-separated)
Save Edits
Cancel