ViewPager fonctionne bien à la première fois, mais en rechargeant à nouveau, obtenant l'erreur java.lang.IllegalStateException?

J'ai un ViewPager avec les 10 images à travers les services Web (JSON), Au premier ViewPager fonctionne en douceur (bien).

Mais Quand il est rentré de l'activité et le rouvre de nouveau, j'ai cette erreur:

  • Comment obtenir la couleur du texte de la vision de texte?
  • Application trop grande? Impossible d'exécuter dex: Impossible de fusionner un nouvel index dans une instruction non jumbo
  • Android: l'application de démarrage à partir de "applications récentes" démarre avec le dernier ensemble d'extras utilisé dans une intention
  • SVG vs PNG sur Android
  • Comment faire un bip sur Android?
  • Utilisation des icônes du lanceur mipmap avant Android 4.2?
  • java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 10, found: 0 Pager id: com.akm.demo.activities:id/slideShowPager Pager class: class android.support.v4.view.ViewPager 

    En classe d'activité principale

     if (mSlideShowData != null) { // mSlideShowData is An ArrayList of the Images Which I pass to ImagePagerAdapter adapter = new ImagePagerAdapter(getContext(), mSlideShowData); slideShowPager.setAdapter(adapter); //slideShowPager.invalidate(); ((PagerAdapter)slideShowPager.getAdapter()).notifyDataSetChanged(); } else{ Toast toast = Toast.makeText(getContext(), "No Record Found", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); 

    ImagePagerAdapter.java

     public class ImagePagerAdapter extends PagerAdapter { private Context mContext; private ImageLoader mImageLoader; // It's use for downloading the image from server private ArrayList<SlideShowData> slideShowImages; // In this I have all the detail of the image from API public ImagePagerAdapter(Context context, ArrayList<SlideShowData> mSlideShowData) { mContext = context; slideShowImages = mSlideShowData; mImageLoader = new ImageLoader(mContext); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } @Override public int getCount() { return slideShowImages.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == ((ImageView) object); } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageViewSlideShow = new ImageView(mContext); int padding = mContext.getResources().getDimensionPixelSize(R.dimen.padding_medium); imageViewSlideShow.setPadding(padding, padding, padding, padding); imageViewSlideShow.setScaleType(ImageView.ScaleType.CENTER_INSIDE); mImageLoader.DisplayImage(ServiceURLs.URL+"/photos/"+slideShowImages.get(position).photo_name, R.drawable.loading, imageViewSlideShow); ((ViewPager) container).addView(imageViewSlideShow, 0); return imageViewSlideShow; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((ImageView) object); } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); } } 

    Pour la solution, j'ai essayé:

     @Override public int getItemPosition(Object object) { return POSITION_NONE; } //And slideShowPager.getAdapter().notifyDataSetChanged(); 

    La solution que j'ai obtenue de stackoverflow mais ne pouvait pas fonctionner.

    Qu'est-ce que j'ai besoin de changer pour travailler ?

    Solution

    earlier I am Passing the ArrayList But this time String Array **(working )** Really I don't know whats the problem with the ArrayList

  • AdMob: "l'activité a échoué ServiceConnection" et "AdvertisingIdClient unbindService a échoué".
  • Gradle version 1.8 est requis. La version actuelle est 1.6
  • Bouton dans la liste extensible android
  • Obtenir DrawerLayout pour glisser sur la barre d'action
  • Appareil "inconnu-sdk" lors de l'exécution de tests à Jenkins
  • Comment puis-je définir la couleur de texte de résumé des préférences Android?
  • 2 Solutions collect form web for “ViewPager fonctionne bien à la première fois, mais en rechargeant à nouveau, obtenant l'erreur java.lang.IllegalStateException?”

    Raison du problème que le Pager peut être actualisé pendant une mesure et, dans ce cas, actualisera le compte de votre adaptateur, si ce compte ne correspond pas au compte enregistré, vous verrez l'erreur. Donc, ma solution ressemble:

     public abstract class ViewPagerCursorAdapter extends PagerAdapter { private int mCount; public ViewPagerCursorAdapter(Context ctx, Cursor cursor, int resource) { super(); ... mCount = cursor.getCount(); ... } @Override public int getCount() { return mCount; } public Cursor swapCursor(Cursor newCursor) { ... mCount = newCursor.getCount(); notifyDataSetChanged(); } } 

    Bonne chance.

    La réponse qu'ils ont donné a fonctionné pour un problème similaire à moi … Je suis juste en production, je ne sais pas comment fonctionnent tous ces codes, mais ce qu'ils ont dit m'a aidé dans l'autre fil de votre part. Vous devez notifier comme ils l'ont dit, dans les endroits où vous avez défini ou supprimé vos images.

    Donc, je pense que votre problème est que vous devez notifier après vous surCreateView () et aussi dans votre destroyItem () .. J'ajouterais la solution déjà suggérée ici … Je suppose que cela devrait le faire … j'espère que je suis Ne vous dérange pas … bonne chance …

      slideShowPager.getAdapter().notifyDataSetChanged(); 

    Td: lr; Cette ligne dans deux de vos fonctions surCreateView () et destroyItem () à la fin pourrait faire le tour

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.