IllegalStateException: фрагмент, уже добавленный в фрагмент tabhost

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

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

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

Существует исключение, если я запускаю так:

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

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

Solutions Collecting From Web of "IllegalStateException: фрагмент, уже добавленный в фрагмент tabhost"

Это происходит, когда мы пытаемся добавить один и тот же фрагмент или DialogFragment дважды до отклонения,

просто позвони

 if(mFragment.isAdded()) { return; //or return false/true, based on where you are calling from } 

Вам просто нужно проверить одно условие в вашем фрагменте, упомянутом ниже:

 if(!isAdded()) { return; } 

IsAdded = Возвращает true, если фрагмент в настоящее время добавлен к его активности. Взято из официального документа. Это не добавит этот фрагмент, если он уже добавлен

Проверьте ссылку ниже для ссылки:
http://developer.android.com/reference/android/app/Fragment.html#isAdded ()

Вам просто нужно проверить одно условие перед транзакцией фрагмента

  if (!fragmentOne.isAdded()){ transaction = manager.beginTransaction(); transaction.add(R.id.group,fragmentOne,"Fragment_One"); transaction.commit(); } 

Это работает для меня …

Иногда это случается для того, чтобы не найти правильный идентификатор из соответствующего макета. Я столкнулся с этой проблемой. Затем, спустя много часов, я обнаружил, что я установил неправильный идентификатор recyclerview. Я меняю его и отлично работаю для меня.

Итак, дважды проверьте макет фрагмента.