您的位置:首页 > 移动开发

使用ViewPager时报出The application’s PagerAdapter changed the adapter’s contents without calling PagerAda

2014-11-27 23:00 344 查看
当你使用ViewPager来显示网络图片时,为了用户体验良好,所以你会一边下载一边更新Adapter。这个时候如果你的ADT版本是22以上的时候,你一定很纠结:我明明调用了adapter.notifyDataSetChanged,但是这货竟然还是报出

java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged!

下面我们来先看看问题:(定位问题)



在ADT22中,上面的代码肯定会报错的。为什么?看下官方文档对 support/v4/view/PagerAdapter 的一个解释:

PagerAdapter supports data set changes. Data set changes must occur on the main thread and must end with a call to
notifyDataSetChanged()
similar
to AdapterView adapters derived from
BaseAdapter
.

出错原因:数据更新必须在main thread进行更新!!结束前还得调用 notifyDataSetChanged() !!

解决方法:

把你往集合里面添加数据的代码写到main thread 里面。

如果你使用asynctask
那么你更新集合的代码
一定不能在 doInBackground
方法里面。

如果你使用new Thread , 你的更新集合的代码一定不能在run 里面,要在Handler 里面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐