title: Backstack management : Restarter must be created only during owner's initialization stage
body: <p>I am using a bottom navigation bar in my MainActivity to handle some fragments. This is the code used for switching between them:</p>
  
  <pre><code>private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -&gt;
      if (item.isChecked &amp;&amp;
          supportFragmentManager.findFragmentById(R.id.act_main_fragment_container) != null
      )
          return@OnNavigationItemSelectedListener false
      val fragment =
          when (item.itemId) {
              R.id.navigation_home      -&gt; fragments[0]
              R.id.navigation_bookings  -&gt; fragments[1]
              R.id.navigation_messages  -&gt; fragments[2]
              R.id.navigation_dashboard -&gt; fragments[3]
              R.id.navigation_profile   -&gt; fragments[4]
              else                      -&gt; fragments[0]
          }
      this replaceWithNoBackStack fragment
      return@OnNavigationItemSelectedListener true
  }
  </code></pre>
  
  <p>the method replaceWithNoBackstack is just a short-hand for this:</p>
  
  <pre><code>supportFragmentManager
      ?.beginTransaction()
      ?.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
      ?.replace(containerId, fragment)
      ?.commit()
  </code></pre>
  
  <p>The problem is that when i switch faster between them, my app crashes with the following exception: </p>
  
  <blockquote>
    <p>java.lang.IllegalStateException: Restarter must be created only during owner's initialization stage
            at androidx.savedstate.SavedStateRegistryController.performRestore(SavedStateRegistryController.java:59)
            at androidx.fragment.app.Fragment.performCreate(Fragment.java:2580)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:837)
            at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1237)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1302)
            at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
            at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2075)
            at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1865)
            at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1820)
            at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1726)
            at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
            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:6709)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
    I've been searching a lot and couldn't find an answer.</p>
  </blockquote>
  
  <p>I also got this error if I do an API call, put the app in background, wait for the response, and at the time I go back to the app, the app crashes because I am trying to display a dialog fragment immediately (the reason I think this is happening is that the transaction of recreating the fragment when coming back from the background is still in progress at the time of displaying the dialog fragment). I solved this in a hacky way by setting a 500ms delay for the dialog because I couldn't figure out other solutions.</p>
  
  <p>Please ask if you need more details regarding this.
  Thank you in advance!</p>
  
  <p><strong>POSSIBLE TEMP SOLUTIONS</strong></p>
  
  <p><strong>EDIT</strong>
  I solved this issue by downgrading the app compat depedency to <code>androidx.appcompat:appcompat:1.0.2</code> but this is just a temporary solution, since i will have to update it in future. I'm hoping someone will figure it out.</p>
  
  <p><strong>EDIT 2</strong>
  I solved the issue by removing setTransition() from fragment transactions. At least I know the reason why android apps does not have good transitions in general</p>
  
  <p><strong>EDIT 3</strong>
  Maybe the best solution to avoid this issue and also make things work smoothly is just to use ViewPager to handle bottom bar navigation</p>