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:
- Fragmento con ViewPager dentro de Fragmento y FragmentStatePagerAdapter resultados en Excepción (con ejemplo completo)
- ViewPager en un Layout detrás de un ScrollView sin escuchar gestos
- Pager centrado de la visión con la previsualización siguiente y anterior y pagetransformer
- FragmentStatePageAdapter duplica elementos del menú ActionBar
- RecyclerView + ViewPager NullPointerException en 'boolean android.support.v7.widget.RecyclerView $ LayoutManager.canScrollHorizontally ()'
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
- ¿Es posible hacer esta animación de pantalla Android con un ViewPager?
- Fragmento vuelto a crear cuando cambia la pestaña con ViewPager
- Widget de página de Viewpager más ancho de pantalla en Android
- Sincronizar todo el ListView en un ViewPager
- Android: desplazamiento ViewPager basado en la velocidad
- No se muestran los elementos de acción del fragmento inicial de Viewpager
- División de texto a través de múltiples TextViews / Fragmentos con ViewPager
- Dimensión de ViewPager de Android
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
- Manejo de excepciones API en RxJava
- Cómo utilizar el centro de una vista como un punto de referencia dentro de un RelativeLayout