最近项目中出现了一个很奇葩的事情,在修改完数据后,调用自定义的notify方法竟然出现error,提示没有执行notify方法,找了很多资料,没发现问题,最后发现一个网站上有人同样碰到过这种问题,借鉴了他的解决思路,目前正在研究其原理,下做个笔记,以防以后会用到。
解决办法就是在执行更新,要对getcount()方法处理一下,在getcount以前先notify一下,感觉应该问题就是出在这里,两边数据不一致导致的问题,遇到同样问题的胖友不仿也试一下。
错误代码
FATAL EXCEPTION: main
Process: com.soufun.app, PID: 32581
java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 3, found: 2 Pager id: com.soufun.app:id/myviewpager Pager class: class com.soufun.app.view.homeslideview.HomeSlideViewPager Problematic adapter: class com.soufun.app.view.homeslideview.HomeSlideViewPager$1
at android.support.v4.view.ViewPager.populate(ViewPager.java:962)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
at android.view.View.measure(View.java:19138)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
at android.view.View.measure(View.java:19138)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
at android.view.View.measure(View.java:19138)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
at android.view.View.measure(View.java:19138)
at android.widget.ListView.setupChild(ListView.java:1991)
at android.widget.ListView.makeAndAddView(ListView.java:1912)
at android.widget.ListView.fillSpecific(ListView.java:1376)
at android.widget.ListView.layoutChildren(ListView.java:1690)
at android.widget.AbsListView.onLayout(AbsListView.java:2201)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2743)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.layout(ViewGroup.java:5550)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16980)
at android.view.ViewGroup.l
解决方案:
getCount()中添加如下 并及时将值更改:
if(updateData){
updateData =false ;
notifyDataSetChanged();
}
在自己的upadate方法中先执行一下updateData =true;
参考问题:点击这里跳转