在调用 getGraph() 之前必须先调用 setGraph()

Jim*_*bdi 12 android orientation-changes android-fragments bottomnavigationview

我有底部导航,我也<fragment>FragmentContainerView它替换了标签,这给了我关于它没有设置 NavController 的错误,然后我发布了这个问题并解决了这个问题,但是当方向改变并选择项目时,我得到了以下错误在底部导航

java.lang.IllegalStateException: 在调用 getGraph() 之前必须先调用 setGraph()

片段容器

<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" /
Run Code Online (Sandbox Code Playgroud)

寻找片段

val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
    val navController = navHostFragment.navController
    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    val appBarConfiguration = AppBarConfiguration(
        setOf(
            R.id.navigation_classes, R.id.navigation_schedule, R.id.navigation_settings
        )
    )
    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 13

这是根据2.2.0-rc03 发行说明修复的

NavHostFragment现在在与FragmentContainerView. ( b/143752103 )

因此,请确保您正在使用2.2.0-rc03.


Fax*_*yev 7

使用导航 UI 的最新版本:

// navigation
implementation "androidx.navigation:navigation-fragment:2.3.0-alpha02"
implementation "androidx.navigation:navigation-ui:2.3.0-alpha02"
Run Code Online (Sandbox Code Playgroud)

它修复了新版本


tir*_*r38 7

如果您像我一样忘记添加到您的 FragmentContainerView

app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
Run Code Online (Sandbox Code Playgroud)


Mos*_*ism 5

按照此链接解决此问题 https://developer.android.com/jetpack/androidx/releases/navigation 简单来说,将您的依赖项升级到以下应用模块中的依赖项

def nav_version = "2.3.0-alpha05"
Run Code Online (Sandbox Code Playgroud)

// 爪哇

implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
Run Code Online (Sandbox Code Playgroud)

// 科特林

implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
Run Code Online (Sandbox Code Playgroud)

// 动态特征模块支持

implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
Run Code Online (Sandbox Code Playgroud)

// 测试导航

androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"
Run Code Online (Sandbox Code Playgroud)

如果您使用的是安全参数,则在依赖项下的项目模块中

  def nav_version = "2.3.0-alpha05"
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
Run Code Online (Sandbox Code Playgroud)

解决了我的问题..