Closed LiuDongCai closed 3 years ago
更新下版本,最新版本是1.1.3
好的,新版本已经解决了是吗
对的
升级1.1.3之后
Process Name: 'com.addcn.android.house591' Thread Name: 'main' Back traces starts. java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 21, found: 30 Pager id: ffffffff Pager class: class com.stx.xhb.androidx.XBannerViewPager Problematic adapter: class com.stx.xhb.androidx.XBanner$XBannerPageAdapter at androidx.viewpager.widget.ViewPager.populate(SourceFile:1143) at androidx.viewpager.widget.ViewPager.populate(SourceFile:1092) at androidx.viewpager.widget.ViewPager.onMeasure(SourceFile:1622) at android.view.View.measure(View.java:24567) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure(View.java:24567) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:24567) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure(View.java:24567) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(SourceFile:143) at android.view.View.measure(View.java:24567) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:24567) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:24567) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:24567) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:753) at android.view.View.measure(View.java:24567) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3007) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1834) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2123) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1722) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7621) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029) at android.view.Choreographer.doCallbacks(Choreographer.java:852) at android.view.Choreographer.doFrame(Choreographer.java:787) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1014) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:235) at android.app.ActivityThread.main(ActivityThread.java:7441) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) Back traces ends.
你的调用方式是啥
上面是初始化
下面是调用
每次移动地图,都会重新设置dataList,然后重新调用
每次刷新后就会报这个错么,正常调用这个方法,viewpager已经重新创建了应该不会导致这个问题
我这边调试没出现,但是线上用户会出现
1.1.2版本不会,升级1.1.3之后就出现了
出现问题的设备型号是啥,我复现看看
感觉是刷新设置不同数目的data进去导致的?
对,这样,你在调用setbannerData方法之后获取viewpager的适配器调用notify试试,我一直没复现出来,因为本身这个方法里面已经重建viewpager,再次设置数据已经是新的适配器了
好,不过我也没复现,不知道这样设置有无效果,你那边sdk也加一个notifydata?这样好像比较保险。 目前线上我是降到了1.1.2的,后面我再看下改一下。
作者你好,我是楼上提问题人的同事,最近发现还是会出现这个问题 Process Name: 'com.addcn.android.house591' Thread Name: 'main' Back traces starts. java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 15, found: 16 Pager id: ffffffff Pager class: class com.stx.xhb.androidx.XBannerViewPager Problematic adapter: class com.stx.xhb.androidx.XBanner$XBannerPageAdapter at androidx.viewpager.widget.ViewPager.populate(SourceFile:1143) at androidx.viewpager.widget.ViewPager.populate(SourceFile:1092) at androidx.viewpager.widget.ViewPager.onMeasure(SourceFile:1622) at android.view.View.measure(View.java:27131) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure(View.java:27131) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:27131) at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:2362) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.widget.ScrollView.onMeasure(ScrollView.java:701) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:27131) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure(View.java:27131) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(SourceFile:143) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:27131) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:1173) at android.view.View.measure(View.java:27131) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4139) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2893) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3156) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2575) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9910) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010) at android.view.Choreographer.doCallbacks(Choreographer.java:809) at android.view.Choreographer.doFrame(Choreographer.java:744) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8506) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) Back traces ends.
代码方面我已经是setBannerData for(int i =0;i<mDetailPhotoList.size();i++){ BannerImgInfo bannerImgInfo = new BannerImgInfo(mDetailPhotoList.get(i)); bannerImgInfoArrayList.add(bannerImgInfo); } mPager.setBannerData(R.layout.fragment_house_detail_pic_other,bannerImgInfoArrayList);
版本是最新的吗
com.github.xiaohaibin:XBanner:androidx_v1.1.2',
作者 能看看是什么问题导致的吗 还是报这个错
更新到最新的版本试试呢,偶现还是必现的,这个,本地能复现嘛
现在用的是V1.1.2我在自己代码里面加了 notifyDataSetChanged 如下代码 for(int i =0;i<mDetailPhotoList.size();i++){ BannerImgInfo bannerImgInfo = new BannerImgInfo(mDetailPhotoList.get(i)); bannerImgInfoArrayList.add(bannerImgInfo); }
mPager.setBannerData(R.layout.fragment_house_detail_pic_other,bannerImgInfoArrayList);
if(mPager.getViewPager()!=null && mPager.getViewPager().getAdapter()!=null) {
mPager.getViewPager().getAdapter().notifyDataSetChanged();
}
for(int i =0;i<mDetailPhotoList.size();i++){ BannerImgInfo bannerImgInfo = new BannerImgInfo(mDetailPhotoList.get(i)); bannerImgInfoArrayList.add(bannerImgInfo); }
mPager.setBannerData(R.layout.fragment_house_detail_pic_other,bannerImgInfoArrayList);
if(mPager.getViewPager()!=null && mPager.getViewPager().getAdapter()!=null) {
mPager.getViewPager().getAdapter().notifyDataSetChanged();
}
拿到数据集合 bannerImgInfoArrayList 然后 setBannerData 然后在判断 后notifyDataSetChanged
这样设置还是不行么
是的 还是在一直报错 友盟统计的崩溃率一直有 我此时此刻在公司看的数据
作者你好 方便加你微信吗 针对这个问题一直在报错 有点困扰我们,我能复现出这个崩溃bug
已处理
xbanner版本:com.github.xiaohaibin:XBanner:androidx_v1.1.2
java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 at java.util.ArrayList.get(ArrayList.java:437) at com.stx.xhb.androidx.XBanner$XBannerPageAdapter.instantiateItem(SourceFile:845) at androidx.viewpager.widget.ViewPager.addNewItem(SourceFile:1010) at androidx.viewpager.widget.ViewPager.populate(SourceFile:1224) at androidx.viewpager.widget.ViewPager.populate(SourceFile:1092) at androidx.viewpager.widget.ViewPager.onMeasure(SourceFile:1622) at android.view.View.measure(View.java:22002) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) at android.view.View.measure(View.java:22002) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(SourceFile:143) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:721) at android.view.View.measure(View.java:22002) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2422) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1506) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1763) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1394) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6770) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966) at android.view.Choreographer.doCallbacks(Choreographer.java:778) at android.view.Choreographer.doFrame(Choreographer.java:713) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:169) at android.app.ActivityThread.main(ActivityThread.java:6578) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Back traces ends.