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

             当你使用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 里面




       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值