web-dev-qa-db-ja.com

findNavControllerを使用したFragmentContainerView

私は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)
}
6
Jimale Abdi

受け入れられた答えに加えて、使用できる小さなショートカットは次のとおりです。

supportFragmentManager.findFragmentById(R.id.navHostMain)?.findNavController()

よろしく

0
Joao Gavazzi

この行を置き換えます:

_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();
    }
_
0
friederbluemle