-2

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();
                }
            }
        }
Mudassir
  • 69
  • 1
  • 8
  • Welcome to Stack Overflow! You have posted way to much code in your question, which makes it unclear to us (and to future readers) exactly where the problem is. Please reduce your problem code to 10 lines or less. See: [How to create a Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve) and [How to Debug Small Programs](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). – Joe C Aug 13 '17 at 20:22
  • give your adapter class too – Shahadat Hossain Shaki Aug 13 '17 at 20:36
  • adapter class is inside the mainactivity class kindly check – Mudassir Aug 13 '17 at 20:41

1 Answers1

0

I debug my app and will answer my own question. Correction was

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");
                    }
                }

Change into

 public Fragment getItem(int position) {
            switch(position) {
                case 0:
                    return new FirstSlide();
                case 1:
                    return new SecondSlide();
                case 2:
                    return new ThirdSlide();
                case 3:
                    return new FourthSlide();
                default:
                    return new FirstSlide();
            }
        }

Code worked fine now slider is working fine.can anyone explain it more

Mudassir
  • 69
  • 1
  • 8