问题
使用ViewPager,动态加载页面,尽管修改了数据后,已经在主线程中调用了notifyDataSetChanged,还是出现以下错误
1 | java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 6, found: 3 Pager id: ... |
原因
在调用 mAdapter.notifyDataSetChanged 之前,先调用了 viewPager.setOffscreenPageLimit 方法
此方法会调用 ViewPager 的 populate(); 方法,就是在这里出现了问题:Adapter.getCount() 已经改变,而 mExpectedAdapterCount 由于还没有调用 notifyDataSetChanged 所以没有更新。所以抛出异常。
解决方法
先调用 notifyDataSetChanged, 再调用 viewPager.setOffscreenPageLimit 即可。