您必须先调用setGraph(),然后再调用getGraph()

时间:2019-12-11 17:19:04

标签: android android-fragments bottomnavigationview orientation-changes

我在底部导航中也用<fragment>替换了FragmentContainerView标签,这给我关于没有设置NavController的错误,然后我被发布了this问题并已解决问题,但是在更改方向并在底部导航中选择项目时出现以下错误

  

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

FragmentContainer

<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 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)

4 个答案:

答案 0 :(得分:6)

使用导航UI的最新版本:

// navigation
implementation "androidx.navigation:navigation-fragment:2.3.0-alpha02"
implementation "androidx.navigation:navigation-ui:2.3.0-alpha02"

已在新版本上修复

答案 1 :(得分:5)

点击此链接可解决此问题 https://developer.android.com/jetpack/androidx/releases/navigation 简而言之,将您的依赖项升级到应用程序模块中的依赖项

def nav_version = "2.3.0-alpha05"

// Java

implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"

//科特林

implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

//动态功能模块支持

implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

//测试导航

androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

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

  def nav_version = "2.3.0-alpha05"
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

解决了我的问题。

答案 2 :(得分:2)

如果您像我一样,也会遇到同样的错误,并且忘记添加到您的FragmentContainerView

app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"

答案 3 :(得分:1)

此问题已根据2.2.0-rc03 release notes进行了修复:

  

NavHostFragment现在与FragmentContainerView一起使用后,在配置更改后可以正确地还原图形。 (b/143752103

因此请确保您使用的是2.2.0-rc03