1

I have a ViewPager in my activity. The ViewPager shows different values on swiping the pager. But I get an IllegalStateException:

PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! 
Expected adapter item count: 0, found: 20 
Pager id: com.exalt.vts:id/summarypager Pager class: class android.support.v4.view.ViewPager 
Problematic adapter: class com.exalt.vts.DashBoard$MyPagerAdapter

This is my source code for PagerAdapter:

public class SamplePagerAdapter extends PagerAdapter{

    List<View> pages = null;

    public SamplePagerAdapter(List<View> pages){
        this.pages = pages;
    }

    @Override
    public Object instantiateItem(View collection, int position){
        View v = pages.get(position);
        ((ViewPager) collection).addView(v, 0);
        return v;
    }

    @Override
    public void destroyItem(View collection, int position, Object view){
        ((ViewPager) collection).removeView((View) view);
    }

    @Override
    public int getCount(){
        return pages.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object){
        return view.equals(object);
    }

    @Override
    public void finishUpdate(View arg0){
    }

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1){
    }

    @Override
    public Parcelable saveState(){
        return null;
    }

    @Override
    public void startUpdate(View arg0){
    }
}

This is the MainActivity:

public class MainActivity extends Activity {
    ViewPager viewPager;
    SamplePagerAdapter myPagerAdapter;
    private TextView  textView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        List<View> pages = new ArrayList<View>();
        viewPager = (ViewPager)findViewById(R.id.myviewpager);
        myPagerAdapter = new SamplePagerAdapter(pages);
        viewPager.setAdapter(myPagerAdapter);
        viewPager.setCurrentItem(1);     

        LayoutInflater inflater = LayoutInflater.from(this);
        View page = inflater.inflate(R.layout.mylayout, null);

        for (int i = 0; i < 20; i++) {
            page = inflater.inflate(R.layout.mylayout, null);
            textView = (TextView) page.findViewById(R.id.text_view);
            textView.setText("Страница "+i);
            pages.add(page);          
        }
}

I try to add 20 views in my ViewPager but I get an exception.

User42
  • 970
  • 1
  • 16
  • 27
BekaKK
  • 2,173
  • 6
  • 42
  • 80
  • I had the same problem and found solution here [My solution](http://stackoverflow.com/a/32185084/1239911) – Amt87 Aug 25 '15 at 07:41

1 Answers1

2

You either need to move the following code from where it is currently to after your for loop, so that the adapter is set after your data set is setup

myPagerAdapter = new SamplePagerAdapter(pages);
viewPager.setAdapter(myPagerAdapter);
viewPager.setCurrentItem(1);     

or alternatively, you can add the following after your for loop to notify the adapter that the data set has changed since you set it up

myPagerAdapter.notifyDataSetChanged();
HexAndBugs
  • 5,549
  • 2
  • 27
  • 36