报错信息如下:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.cloudelevator.cloudElevator, PID: 32446
java.lang.IndexOutOfBoundsException: Index: 4, Size: 3
at java.util.ArrayList.get(ArrayList.java:411)
at com.androidkun.xtablayout.XTabLayout.getTabAt(XTabLayout.java:573)
at net.cloudelevator.cloudElevator.fragment.FeaturesFragment$6.onPageSelected(FeaturesFragment.java:187)
at androidx.viewpager2.widget.CompositeOnPageChangeCallback.onPageSelected(CompositeOnPageChangeCallback.java:73)
at androidx.viewpager2.widget.CompositeOnPageChangeCallback.onPageSelected(CompositeOnPageChangeCallback.java:73)
at androidx.viewpager2.widget.ScrollEventAdapter.dispatchSelected(ScrollEventAdapter.java:432)
at androidx.viewpager2.widget.ScrollEventAdapter.onScrolled(ScrollEventAdapter.java:190)
at androidx.recyclerview.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:5173)
at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5338)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
at android.view.Choreographer.doCallbacks(Choreographer.java:686)
at android.view.Choreographer.doFrame(Choreographer.java:618)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6198)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
不知道为什么会出现这样的场景,嵌套后还都是fragment,最后到了我的手上,这里两个ViewPager还是不一样的一,外层是QMUI的QMUIViewPager,内层使用的是androidx中的ViewPager2
在滑动过程中直接闪退,查看错误信息发现是越界的问题,在对应的Adapter回调中打Log发现了问题的原因: 由于外层的QMUIViewPager没有设置页面缓存的数量默认缓存2个,在外层执行后,内层的被多次添加数据
解决方法:1:外层设置缓存页面数为对应数据的数量(页面不多的情况下)
2:添加数据前先清空