IllegalStateException: фрагмент уже добавлен;невозможно определить точную причину и местоположение из журнала ткани - PullRequest
0 голосов
/ 01 февраля 2019

Я получаю следующий журнал из инструмента Google Crashlytics, который показывает, почему происходит сбой приложения в производственной среде.

Fatal Exception: java.lang.IllegalStateException: Fragment already added: ProductsFragment{1e716898 #1 id=0x7f0a11fb android:switcher:2131366395:0}
   at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1891)
   at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:760)
   at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
   at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
   at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2215)
   at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:649)
   at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:145)
   at android.support.v4.view.ViewPager.populate(ViewPager.java:1238)
   at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
   at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2190)
   at android.view.View.dispatchTouchEvent(View.java:8472)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369)
   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719)
   at android.app.Activity.dispatchTouchEvent(Activity.java:2786)
   at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
   at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2330)
   at android.view.View.dispatchPointerEvent(View.java:8667)
   at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4558)
   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4425)
   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3937)
   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3990)
   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3956)
   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4073)
   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3964)
   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4130)
   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3937)
   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3990)
   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3956)
   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3964)
   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3937)
   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6269)
   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6219)
   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6190)
   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6359)
   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:143)
   at android.os.Looper.loop(Looper.java:122)
   at android.app.ActivityThread.main(ActivityThread.java:5254)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

Я и моя команда пытаемся воспроизвести этот сбой, но не можем этого сделать, и мы не можемВыясните, где именно происходит сбой приложения, так как номер строки или имя активности не упоминается в журналах.Мы используем ProductsFragment на многих экранах.

Может кто-нибудь помочь мне с этой проблемой.

1 Ответ

0 голосов
/ 01 февраля 2019

Это огорчительная ошибка при запуске.У меня было то же самое в прошлом.

Как вы добавляете фрагмент?Используете «добавить» или «заменить» с диспетчером фрагментов?

Вы всегда можете увидеть, существует ли фрагмент в стеке:

 YourFrag f = (YourFrag) fragmentManager.findFragmentByTag("MY_AWESOME_FRAG");

 if (f != null) {
     fm.beginTransaction()
       .replace(R.id.bottomContainer, f, "MY_AWESOME_FRAG")
       .commit();
 } else {
      fm.beginTransaction()
       .add(R.id.bottomContainer, f, "MY_AWESOME_FRAG")
       .commit();
 }
...