IllegalStateException: Фрагмент уже добавляется в tabhost фрагменте

FATAL EXCEPTION: main
Process: com.example.loan, PID: 24169
java.lang.IllegalStateException: Fragment already added: FormFragment{428f10c8 #1 id=0x7f050055 form}
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1192)
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1533)
    at android.support.v4.app.FragmentManagerImpl$2.run(FragmentManager.java:489)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5068)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
    at dalvik.system.NativeStart.main(Native Method)

Так, у меня есть приложение для Android, которые создают с tabhost. Существует три вкладки всего в tab2, существует кнопка для создания транзакции фрагмента в tab2 (который вызывает функцию в действии фрагмента),

FragmentTransaction t = getSupportFragmentManager().beginTransaction();
        t.replace(R.id.realtabcontent, mFrag);
        t.addToBackStack(null);
        t.commit();

Существует исключение, если я работаю как это:

  1. В tab2 я нажимаю кнопку для изменения фрагмента
  2. Перейдите к другой вкладке (например, вкладке 1 или вкладке 3)
  3. Нажмите кнопку "Назад"
  4. Выдайте исключение

Как зафиксировать это? Спасибо за помощь

61
задан 8 July 2019 в 16:49

3 ответа

К моему удивлению я сделал глупую ошибку путем вызова транзакции фрагмента дважды:

if (!FirebaseManager.isClientA && !FirebaseManager.isClientB) {
      fragment = new FragmentA();
      getFragmentManager().beginTransaction().add(R.id.fragment_frame, fragment, null).addToBackStack("").commit();
} else if (FirebaseManager.isClientB) {
      fragment = new FragmentB();
} else {
      fragment = new FragmentC();
}
getFragmentManager().beginTransaction().add(R.id.fragment_frame, fragment, null).addToBackStack("").commit();

Удостоверяются, что Вы не делаете ту же ошибку.

0
ответ дан 31 October 2019 в 15:21

Добавьте Фрагмент как ниже

FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.replace(R.id.realtabcontent, mFrag);
    t.addToBackStack(null);
    t.commitNowAllowingStateLoss();
0
ответ дан 31 October 2019 в 15:21

Можно попробовать это:

 if (dialogFolderGallery.isAdded()) {
                dialogFolderGallery.dismiss();
            } else { //bla...bla..
}
0
ответ дан 31 October 2019 в 15:21

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

Похожие вопросы: