I am developing android app that has four pages slider.I have one activity that contains viewpager and four fragments. When i open slide second time it loads only first two slides out of four and showX Invalid index error.I used fragmentstatepageradapter because my slides have many pictures. My activity class that has custom adapter.
public class AddKeyActivity extends FragmentActivity
implements ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener{
private static final int NUMBER_OF_PAGES = 4;
private RadioGroup radioGroup;
ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_key);
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
pager.addOnPageChangeListener(this);
radioGroup = (RadioGroup)findViewById(R.id.radiogroup);
radioGroup.setOnCheckedChangeListener(this);
}
@Override
public void onPageScrolled(int position, float v, int i) {
}
@Override
public void onPageSelected(int position) {
switch(position) {
case 0:
radioGroup.check(R.id.radioButton1);
break;
case 1:
radioGroup.check(R.id.radioButton2);
break;
case 2:
radioGroup.check(R.id.radioButton3);
break;
case 3:
radioGroup.check(R.id.radioButton4);
break;
default:
radioGroup.check(R.id.radioButton1);
}
}
@Override
public void onPageScrollStateChanged(int position) {
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId) {
case R.id.radioButton1:
pager.setCurrentItem(0);
break;
case R.id.radioButton2:
pager.setCurrentItem(1);
break;
case R.id.radioButton3:
pager.setCurrentItem(2);
break;
case R.id.radioButton4:
pager.setCurrentItem(3);
break;
}
}
private class MyPagerAdapter extends FragmentStatePagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return FirstSlide.newInstance("FirstSlide, Instance 1");
case 1:
return SecondSlide.newInstance("SecondSlide, Instance 1");
case 2:
return ThirdSlide.newInstance("ThirdSlide, Instance 1");
case 3:
return FourthSlide.newInstance("FourthSlide, Instance 1");
default:
return FirstSlide.newInstance("FirstSlide, Default");
}
}
@Override
public int getCount() {
return NUMBER_OF_PAGES;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
notifyDataSetChanged();
}
}
}