ViewPager funciona bien en la primera vez, pero en la recarga de nuevo, recibiendo el error java.lang.IllegalStateException?

Tengo un ViewPager con las 10 imágenes viene a través de webservices (JSON), Al principio ViewPager funcionan sin problemas (bien).

Pero cuando vuelvo de la actividad y la vuelvo a abrir otra vez consigo este error:

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 la clase de actividad principal

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

Para la solución, he intentado:

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

La solución que obtuve de stackoverflow pero no podía funcionar.

Lo que necesito cambios para trabajar ?

Solución

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

Razón del problema el Pager se puede actualizar durante alguna medición y en este caso se actualizará la cuenta de su adaptador, si este recuento no es igual a la cuenta guardada verá el error. Así que mi solución se ve:

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

Buena suerte.

La respuesta que dieron funcionó para un problema similar de la mía .. Estoy en producción, no tengo idea de cómo funcionan todos estos códigos, pero lo que me dijo me ayudó en el otro hilo de la suya. Usted tiene que notificar como ellos dijeron, en los lugares donde usted fija o suprime sus imágenes.

Por lo tanto, creo que aquí su problema es que usted tiene que hacer una notificación después de onCreateView () y también en su destroyItem () .. Añadiría la solución ya sugerida aquí .. Supongo que debería hacerlo .. espero que estoy No te malinterpreten .. buena suerte ..

  slideShowPager.getAdapter().notifyDataSetChanged(); 

Td: lr; Esa línea en dos de sus funciones onCreateView () y destroyItem () al final podría hacer el truco

  • ¿Cómo crear ViewPager de carrusel?
  • El buscapersonas de vista automática hace que los fotogramas se descarguen
  • Botón en ViewPager desplazarse a la página específica
  • Fijar las pestañas con android.support.v4.view.PagerTabStrip o ViewPagerIndicator
  • Los datos del fragmento se van nulos cuando otro fragmento se carga
  • ViewPager dentro de Fragmento con márgenes y el transformador de página no se representa correctamente
  • Cómo mantener el estado de ViewPager en un ListView?
  • Fragmentos que no se vuelven a crear por FragmentStatePagerAdapter después de volver a la instancia de Fragmento principal
  • Comprobación de ViewPager con Espresso. ¿Cómo funciona la acción a un botón de un elemento?
  • Ocultar pestañas viewPager dinámicamente
  • Navegación anterior separada para un buscador de vistas con pestañas en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.