Tencent / QMUI_Android

提高 Android UI 开发效率的 UI 库
http://qmuiteam.com/android
Other
14.4k stars 2.67k forks source link

QMUITabSegment+ViewPager #1125

Open justaap opened 2 years ago

justaap commented 2 years ago

运行环境

具体问题描述

为了实现在设置中更改状态后返回后fragment改变tab文案,在onResume中添加了更新adapter中tabTitle的逻辑,发布后统计到了非必现的闪退bug,日志显示是调用了notifyDataSetChanged后导致的,由于自己无法复现bug,目前难以定位到具体原因。

问题截图

Layout Inspector 文件(如何获取)

异常日志(堆栈)

# main(2)

java.lang.ArrayIndexOutOfBoundsException

length=10; index=-1

1java.lang.RuntimeException:Unable to resume activity {}: java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1 2android.app.ActivityThread.performResumeActivity(ActivityThread.java:4531) 3...... 4Caused by: 5java.lang.ArrayIndexOutOfBoundsException:length=10; index=-1 6java.util.ArrayList.get(ArrayList.java:439) 7com.qmuiteam.qmui.widget.QMUITabSegment.updateIndicatorPosition(QMUITabSegment.java:770) 8com.qmuiteam.qmui.widget.QMUITabSegment$TabLayoutOnPageChangeListener.onPageScrolled(QMUITabSegment.java:1035) 9androidx.viewpager.widget.ViewPager.dispatchOnPageScrolled(ViewPager.java:1930) 10androidx.viewpager.widget.ViewPager.onPageScrolled(ViewPager.java:1904) 11androidx.viewpager.widget.ViewPager.pageScrolled(ViewPager.java:1842) 12androidx.viewpager.widget.ViewPager.completeScroll(ViewPager.java:1988) 13androidx.viewpager.widget.ViewPager.scrollToItem(ViewPager.java:692) 14androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:670) 15androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631) 16androidx.viewpager.widget.ViewPager.dataSetChanged(ViewPager.java:1086) 17androidx.viewpager.widget.ViewPager$PagerObserver.onChanged(ViewPager.java:3097) 18androidx.viewpager.widget.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:291) 19com.g.adapter.ReceiveFragmentAdapter.updateTab(ReceiveFragmentAdapter.java:97 20com.g.martin.ReceiveFragment.onResume(ReceiveFragment.java:1986) 21androidx.fragment.app.Fragment.performResume(Fragment.java:2747) 22androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:373) 23androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199) 24androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356) 25androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434) 26androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497) 27androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625) 28androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:2589) 29androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:269) 30androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:478) 31androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:467) 32androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:204) 33android.app.Activity.performResume(Activity.java:8058) 34android.app.ActivityThread.performResumeActivity(ActivityThread.java:4521) 35android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4563) 36android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 37android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 38android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 39android.app.ActivityThread$H.handleMessage(ActivityThread.java:2267) 40android.os.Handler.dispatchMessage(Handler.java:107) 41android.os.Looper.loop(Looper.java:230) 42android.app.ActivityThread.main(ActivityThread.java:7876) 43java.lang.reflect.Method.invoke(Native Method) 44com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) 45com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)