-2

我正在開發具有四個頁面滑塊的android應用程序。我有一個包含viewpager和四個片段的活動。當我第二次打開幻燈片時,它只加載了前四張幻燈片和showX無效索引error.I使用了fragmentstatepageradapter,因爲我的幻燈片有很多圖片。 我的活動類具有自定義適配器。Viewpager不正確重繪內容IndexOutOfBoundsException:索引3無效,大小爲2

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

歡迎堆棧溢出!你已經在你的問題中發佈了很多代碼,這使得我們(以及未來的讀者)不清楚問題出在哪裏。請將您的問題代碼減少到10行或更少。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)和[如何調試小程序](https://ericlippert.com/2014/03/05 /如何調試的小程序/)。 –

+0

也給你的適配器類 –

+0

適配器類是在mainactivity類裏面好心檢查 – Mudassir

回答

0

我調試我的應用程序,並會回答我自己的問題。 修正爲

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

代碼工作得很好,現在滑塊工作fine.can誰能解釋更

相關問題