When using androidx.fragment.app.FragmentContainerView
as a navHost instead of a regular fragment
app is not able to navigate to a destination afte
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.frag_splash, container, false)
}
Maybe you forgot the 3rd "false" parameter above. Only this three parameters onCreateView
fun can be accept.
android developer website
pic from : https://developer.android.com/reference/androidx/fragment/app/FragmentContainerView
The no current navigation node
error occurs when there's no graph set and you attempt to call navigate()
. If it only occurs when you're using FragmentContainerView
and after a configuration change, then this would be related to this bug, which is fixed and scheduled for release with Navigation 2.2.0-rc03.
To work around this issue, you can either switch back to <fragment>
or remove app:navGraph="@navigation/nav_simple"
and instead call navController.setGraph(R.navigation.nav_simple)
.
I do not see any explanation why replace Fragment view with FragmentContainerView. This is why add this answer:
One of the common patterns to host fragments in an activity is to use a FrameLayout. The Android community have been doing this for years but this is going to change now. The androidx team introduced this new view called FragmentContainerView to do this for you.
All you have to do is replace your FrameLayout with FragmentContainerView and everything should work out of the box, you won’t need to change anything on the way you handle fragment transactions.
The benefits gained here is the improved handling of what’s called the z-ordering for fragments. Here’s the example they used, but basically this means , for example, that the exit and enter transitions between two fragments will not overlap each other. Instead this FragmentContainerView is going to start the exit animation first then the enter animation.
If you are asking can this replace tag? then the answer is yes. All you have to do is to add android:name="your_class_name" when defining FragmentContainerView and it will use a FragmentTransaction under the hood to build and show your fragment. This mean you can use fragment transactions later on to replace it.
Source
Android Docs