В моем случае транзакция фрагмента происходит в onCreate () и при нажатии на элемент нижней панели навигации (ввод пользователя). Большинство ответов указывают на этот блог , который указывает, что можно совершать транзакции в onCreate или пользовательском вводе. Все, что делает мое приложение, это загружает фрагмент в onCreate и переключает фрагмент, когда пользователь щелкает пункты меню нижней навигационной панели.
Трассировка стека:
java.lang.IllegalStateException
Can not perform this action after onSaveInstanceState
FragmentManagerImpl.java in android.support.v4.app.FragmentManagerImpl.checkStateLoss at line 2053
FragmentManagerImpl.java in android.support.v4.app.FragmentManagerImpl.enqueueAction at line 2079
BackStackRecord.java in android.support.v4.app.BackStackRecord.commitInternal at line 678
BackStackRecord.java in android.support.v4.app.BackStackRecord.commit at line 632
MainActivity.java ? in com.myapp.MainActivity.loadFragment at line 510 (application)
MainActivity.java ? in com.myapp.MainActivity$onNavigationItemSelectedListener$1.onNavigationItemSelected at line 110 (application)
BottomNavigationView.java in android.support.design.widget.BottomNavigationView$1.onMenuItemSelected at line 182
MenuBuilder.java in android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected at line 822
MenuItemImpl.java in android.support.v7.view.menu.MenuItemImpl.invoke at line 171
MenuBuilder.java in android.support.v7.view.menu.MenuBuilder.performItemAction at line 973
BottomNavigationMenuView.java in android.support.design.internal.BottomNavigationMenuView$1.onClick at line 95
View.java in android.view.View.performClick at line 6897
View.java in android.view.View$PerformClick.run at line 26100
Handler.java in android.os.Handler.handleCallback at line 789
Handler.java in android.os.Handler.dispatchMessage at line 98
Looper.java in android.os.Looper.loop at line 164
ActivityThread.java in android.app.ActivityThread.main at line 6944
java.lang.reflect.Method in invoke
Zygote.java in com.android.internal.os.Zygote$MethodAndArgsCaller.run at line 327
ZygoteInit.java in com.android.internal.os.ZygoteInit.main at line 1374
Я не хочу использовать commitWithStateLoss () и не хочу также использовать переменную состояния. Другие варианты включают в себя:
- проверить менеджер фрагментов isStateSaved () перед коммитом ()
- check isFinishing (), чтобы проверить, уничтожается ли активность перед commit ()
Учитывая, что он вызывается из onCreate или пользовательского прослушивателя ввода, есть ли идеальное решение, чтобы избежать этого сбоя?