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();
}
}
}
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 /). –
donnez votre classe d'adaptateur aussi –
classe d'adaptateur est à l'intérieur de la classe de la mainactivité – Mudassir