私はAndroidナビゲーションコンポーネントと下部ナビゲーションを使用しています。lintは<fragment>
タグにFragmentContainerView
を付けたが、置換されたfindNavController
が機能しない場合、NavControllerがオンに設定されていないというエラーが表示される
断片
<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/mobile_navigation" />
アクティビティ
val navController = findNavController(R.id.nav_Host_fragment)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_classes, R.id.navigation_schedule, R.id.navigation_settings
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
受け入れられた答えに加えて、使用できる小さなショートカットは次のとおりです。
supportFragmentManager.findFragmentById(R.id.navHostMain)?.findNavController()
よろしく
この行を置き換えます:
_NavController navController = Navigation.findNavController(this, R.id.nav_Host_fragment);
_
と
_NavController navController = getNavController();
_
getNavController()
は次のようになります。
_ // 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();
}
_