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:

  • Impossible d'exécuter dex: plusieurs fichiers dex définissent Lbolts / AggregateException
  • Crash webview NullPointerException android.webkit.WebViewDatabase.initDatabase (WebViewDatabase.java:234)
  • Décoder les codes de télécommande via l'entrée audio
  • Android Studio avec gradle et Google Maps v2
  • Comment puis-je attraper SIGSEGV (défaut de segmentation) et obtenir une trace de pile sous JNI sur Android?
  • Jouer HLS sur Android (comparer les alternatives)
  • 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

  • Comment développer le backend de Google App Engine à l'aide d'Android Studio
  • Comment faire une icône de lanceur Android
  • Lecture Visa payWave Détails de la carte de crédit via NFC sur Android
  • Android ViewFlipper Animation
  • Comment réparer: android.app.RemoteServiceException: mauvaise notification postée dans le package *: Impossible de créer l'icône: StatusBarIcon
  • Android Systrace: Erreur inattendue (Conversion = ';')
  • 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.