Как вызвать FragmentManager.popBackStack, когда активность приостановлена?

У меня следующая ситуация

Давайте возьмем пример:

У меня есть FirstActivity, которая содержит два фрагмента. Fragment-A по умолчанию загружается в FirstActivity. При нажатии на кнопку на экране Fragment-A перемещается в Fragment-B и он добавляется в задний стек. Из Fragment-B есть кнопка, откуда я посещаю второе действие. Теперь, если происходит какое-либо событие, я вызываю метод FragmentManager.popBackStack, чтобы переместить Fragment-B в Fragment-A(это требование приложения) в то время, когда мое приложение аварийно завершилось. Потому что я нахожусь на SecondActivity и FragmentManager.popBackStack вызов из FirstActivity.

Теперь мой код

При переходе от Фрагмента-А к Фрагменту-Б

 MenuFragment menuFragment = MenuFragment.newInstance(orderObject.getOrderTableName(), orderObject.getTableSize(), arraySeatCount[k], arrayTableCode[k], arrayTableId[k], floorDetailObject.getId(), TabRabbitConstant.OrderType.DINEIN.orderType, "", "", false);
                            menuFragment.setTargetFragment(FloorFragment.this, UserDefault.ORDER_MENU);
                            FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
                                                       fragmentTransaction.replace(R.id.frameContainer, menuFragment, getResources().getString(R.string.M_MENU));
                            fragmentTransaction.addToBackStack(getResources().getString(R.string.M_MENU));
                            fragmentTransaction.commit();

Когда происходит какое-либо событие, я вызываю popbackstack на FirstActivity.

FragmentManager manager = getSupportFragmentManager();
                                manager.popBackStack();

Исключение я получаю, когда происходит сбой приложения

 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
                                                                          at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1842)
                                                                          at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1860)
                                                                          at android.support.v4.app.FragmentManagerImpl.popBackStack(FragmentManager.java:770)
                                                                          at com.app.tabrabbitpos.MainActivity.parseResponseInMain(MainActivity.java:691)
                                                                          at com.app.tabrabbitpos.base.BaseActivity$3.run(BaseActivity.java:192)
                                                                          at android.os.Handler.handleCallback(Handler.java:739)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                          at android.os.Looper.loop(Looper.java:135)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at java.lang.reflect.Method.invoke(Method.java:372)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Документация FragmentManager.popBackStack написала, что

Эта функция является асинхронной - она ​​ставит запрос на выдвижение, но действие не будет выполнено, пока приложение не вернется в свой цикл обработки событий.

Таким образом, согласно документации, я думал, что это должно работать, но это дает мне исключение, и мое приложение падает.

Я уже проверил эту ссылку для моей проблемы, но не получил никакого решения

Безопасно ли вызывать FragmentManager.popBackStack, когда действие приостановлено

Короче, мой вопрос: как вызвать FragmentManager.popBackStack, когда активность приостановлена? (Имеется в виду, когда я нахожусь на втором действии, и FirstActivity на Паузе)

1 ответ

Создайте логическое значение, чтобы проверить, выполняется ли действие в первый раз, как это

приватный логический mFirstRun=false;

Затем в первом действии onResume проверьте, выполняется ли действие в первый раз, и выполните действие.

@Override
protected void onResume() {
    super.onResume();
    if(!mFirstRun){
        mFirstRun=true;
    }else {
        FragmentManager manager = getSupportFragmentManager();
        manager.popBackStack();
        mFirstRun=false;
    }
}

Когда событие происходит во втором действии, не забывайте звонить finish() во втором действии, которое возобновит первое действие снова.

Другие вопросы по тегам