-2

Je développe l'application android qui a quatre pages slider.I a une activité qui contient viewpager et quatre fragments. Quand j'ouvre la diapositive la deuxième fois, elle ne charge que les deux premières diapositives sur quatre et showX Erreur d'index invalide. J'ai utilisé fragmentstatepageradapter parce que mes diapositives ont beaucoup d'images. Classe d'activité avec adaptateur personnalisé.Viewpager ne redessine pas le contenu correctement IndexOutOfBoundsException: l'index 3 est invalide, la taille est 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

Bienvenue sur Stack Overflow! Vous avez posté beaucoup de code dans votre question, ce qui nous empêche de savoir exactement où se situe le problème (et aux futurs lecteurs). Veuillez réduire votre code de problème à 10 lignes ou moins. Voir: [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) et [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-petits-programmes /). –

+0

donnez votre classe d'adaptateur aussi –

+0

classe d'adaptateur est à l'intérieur de la classe de la mainactivité – Mudassir

Répondre

0

Je débogue mon application et réponds à ma propre question. Correction était

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

changement dans

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 a bien fonctionné maintenant curseur fonctionne à tout le monde fine.can expliquer plus