illegalstateexception-the-specified-child-already-has-a-parent inside nested fragment on fragmenStatePagerAdapter

218 views Asked by At

I have a material tab layout and androidx view pager inside a nested fragment. When i navigate to a different fragment or activity and then come back to my fragment with tablayot, it crashes with the below trace

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
            at android.view.ViewGroup.addViewInner(ViewGroup.java:5106)
            at android.view.ViewGroup.addView(ViewGroup.java:4935)
            at androidx.viewpager.widget.ViewPager.addView(ViewPager.java:1485)
            at android.view.ViewGroup.addView(ViewGroup.java:4875)
            at android.view.ViewGroup.addView(ViewGroup.java:4848)
            at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:326)
            at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
            at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
            at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
            at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
            at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
            at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
            at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
            at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
            at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
            at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
            at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
            at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
            at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
            at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
            at android.os.Handler.handleCallback(Handler.java:883)
            at android.os.Handler.dispatchMessage(Handler.java:100)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7356)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Here is my fragment where i use tablayot and fragment viewPager

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val adapter=ViewPagerAdapter(childFragmentManager)
    adapter.addFragment(TabOneFragment)
    adapter.addFragment(TabTwoFragment)
    adapter.addFragment(TabThreeFragment)
    viewPager.adapter = adapter
    tabLayout.setupWithViewPager(viewPager)
}

i tried all answers pointing to that trace but none of them has worked. If i pass activity's fragmentManager to ViewPagerAdapter crash doesn't happen but it leaks memory at this case. Any idea?

1

There are 1 answers

0
Bob Steve On

Have you tried removing the views in onDestroyView? (Like this)

  • sorry for the short answer, I don't have enough rep to write comments