Ich habe einen ViewPager mit den 10 Bildern kommt durch Webservices (JSON), auf den ersten ViewPager funktioniert reibungslos (gut).ViewPager funktioniert beim ersten Mal, aber beim erneuten Laden, Fehler java.lang.IllegalStateException?
aber Wenn aus der Tätigkeit zurück und öffnen Sie es wiederIch habe diesen Fehler:
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
In Hauptaktivitätsklasse
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();
}
}
Für Lösung, habe ich versucht:
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
//And
slideShowPager.getAdapter().notifyDataSetChanged();
die Lösung, die ich von Stackoverflow bekam, konnte aber nicht.
was muss ich ändern, um zu arbeiten?
Lösung
earlier I am Passing the ArrayList But this time String Array **(working)** Really I don't know whats the problem with the ArrayList
Sie sollten mehr Code zeigen. Vielleicht modifizierst du den Adapter auch woanders. Wenn Sie einen 'ArrayAdapter' verwenden, modifizieren Sie vielleicht die' List', die Sie an den Adapter übergeben haben, ohne es zu merken. –
Ich verwende keinen Arrayadapter dafür. "PagerAdapter" benutzt für alle Bilder auf dem ViewPager @MichaelButscher –
@MichaelButscher + 1 Das war das Problem in meinem Fall, vielen Dank für den Hinweis! – AgentKnopf