Недопустимое исключение состояния: не удается выполнить это действие после onSaveInstanceState - PullRequest
0 голосов
/ 17 марта 2019

В моем случае транзакция фрагмента происходит в 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 () и не хочу также использовать переменную состояния. Другие варианты включают в себя:

  1. проверить менеджер фрагментов isStateSaved () перед коммитом ()
  2. check isFinishing (), чтобы проверить, уничтожается ли активность перед commit ()

Учитывая, что он вызывается из onCreate или пользовательского прослушивателя ввода, есть ли идеальное решение, чтобы избежать этого сбоя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...