【问题标题】:Viewpager does not redraw contents correctly IndexOutOfBoundsException: Invalid index 3, size is 2Viewpager 未正确重绘内容 IndexOutOfBoundsException: Invalid index 3, size is 2
【发布时间】:2017-08-13 20:20:50
【问题描述】:

我正在开发具有四个页面滑块的 android 应用程序。我有一个包含 viewpager 和四个片段的活动。当我第二次打开幻灯片时,它只加载四张幻灯片中的前两张并显示 X 无效索引错误。我使用了 fragmentstatepageradapter,因为我的幻灯片有很多图片。 我的具有自定义适配器的活动类。

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

【问题讨论】:

标签: java android android-viewpager fragment fragmentstatepageradapter


【解决方案1】:

我调试我的应用程序并回答我自己的问题。 更正了

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

换成

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

代码工作正常,现在滑块工作正常。谁能解释一下

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多