I\'m using Android Navigation Component with bottom navigation, lint gives a warning about replacing the tag with FragmentContainerView
Replace this line:
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
with
NavController navController = getNavController();
Where getNavController() looks like this:
// workaround for https://issuetracker.google.com/issues/142847973
@NonNull
private NavController getNavController() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
if (!(fragment instanceof NavHostFragment)) {
throw new IllegalStateException("Activity " + this
+ " does not have a NavHostFragment");
}
return ((NavHostFragment) fragment).getNavController();
}
As per this issue, when using FragmentContainerView, you need to find the NavController using findFragmentById() rather than using findNavController() when in onCreate():
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
This is because findNavController(R.id.nav_host_fragment) relies on the Fragment's View to already be created which isn't the case when using FragmentContainerView (as it uses a FragmentTransaction under the hood to add the NavHostFragment).
On top of the accepted answer, a little shortcut what could be used is:
supportFragmentManager.findFragmentById(R.id.navHostMain)?.findNavController()
Regards