Monday, 13 June 2022

Fragment getting initialised before Android 12 Splash screen ends

I have a FragmentContainerView in my MainActivity which uses a nav graph.

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav" />

I want my fragments to wait till I get some data from an API before I hide my splash screen. I am using android 12 Splash Screen. This is how I am trying to accomplishing it(from documentation):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    installSplashScreen()
    setContentView(R.layout.activity_main)
    //Set up an OnPreDrawListener to the root view.
    val content: View = findViewById(android.R.id.content)
    content.viewTreeObserver.addOnPreDrawListener(
        object : ViewTreeObserver.OnPreDrawListener {
            override fun onPreDraw(): Boolean {
                // Check if the initial data is ready.
                return if (mainActivityViewModel.isDataReady()) {
                    // The content is ready; start drawing.
                    Timber.tag("Splash").d("data ready")
                    content.viewTreeObserver.removeOnPreDrawListener(this)
                    true
                    } else {
                        Timber.tag("Splash").d("data not ready")
    
                        // The content is not ready; suspend.
                        false
                        }
                    }
                }
        )

The Splash screen is going away only after I get the data. But the issue is that my Fragments callbacks like onViewCreated gets invoked even before my data is ready. This is causing issues because I rely on data that I fetch during splash screen to do some tasks.

How can I make sure, my fragments won't get initialised before my Splash screen goes away??



from Fragment getting initialised before Android 12 Splash screen ends

No comments:

Post a Comment