Reputation: 189
App getting crash with following stack trace on some device with some OS version. I have tried some other suggestion none of them work. I don't know where exactly crash occur.
ViewGroup.java AddViewInner issue
compileSdkVersion 28
minSdkVersion 17
targetSdkVersion 28
Always Inflating Layout like below for all screen:
if (mainView == null) {
mainView = inflater.inflate(R.layout.fragment_main, container, false);
}
Committing Fragment:
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.fragment_slide_in_left, R.anim.fragment_slide_out_left, R.anim.fragment_slide_in_right, R.anim.fragment_slide_out_right);
ft.replace(R.id.main_content, fragment, fragment.getTagText());
ft.addToBackStack(fragment.getTagText());
ft.commit();
Crash 1:
java.lang.IllegalStateException:
at android.view.ViewGroup.addViewInner (ViewGroup.java:5008)
at android.view.ViewGroup.addView (ViewGroup.java:4833)
at android.view.ViewGroup.addView (ViewGroup.java:4773)
at android.view.ViewGroup.addView (ViewGroup.java:4746)
at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1466)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManagerImpl.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1852)
at android.support.v4.app.BackStackRecord.executePopOps (BackStackRecord.java:860)
at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java:2622)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManagerImpl.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManagerImpl.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run (FragmentManagerImpl.java:733)
at android.os.Handler.handleCallback (Handler.java:790)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:171)
at android.app.ActivityThread.main (ActivityThread.java:6656)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873)
Crash 2:
java.lang.IllegalStateException:
at android.view.ViewGroup.addViewInner (ViewGroup.java:5122)
at android.view.ViewGroup.addView (ViewGroup.java:4953)
at android.view.ViewGroup.addView (ViewGroup.java:4893)
at android.view.ViewGroup.addView (ViewGroup.java:4866)
at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1466)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManagerImpl.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1852)
at android.support.v4.app.BackStackRecord.executePopOps (BackStackRecord.java:860)
at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java:2622)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManagerImpl.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManagerImpl.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run (FragmentManagerImpl.java:733)
at android.os.Handler.handleCallback (Handler.java:789)
at android.os.Handler.dispatchMessage (Handler.java:98)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6940)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
How to fix this crash?
Upvotes: 1
Views: 1569
Reputation: 3053
Remove that null check and inflate view in onCreateView
.
When you are returning old view (mainView != null)
fragment tries to add it again to the view hierarchy. The exception is thrown as the old view already has a parent and cannot be added again.
source of ViewGroup.addViewInner:
if (child.getParent() != null) {
throw new IllegalStateException("The specified child already has a parent. " +
"You must call removeView() on the child's parent first.");
}
Upvotes: 1