【问题标题】:You must call setGraph() before calling getGraph()您必须在调用 getGraph() 之前调用 setGraph()
【发布时间】:2019-12-11 17:19:04
【问题描述】:

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

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" /

寻找片段

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)

【问题讨论】:

    标签: android android-fragments bottomnavigationview orientation-changes


    【解决方案1】:

    这是根据2.2.0-rc03 release notes 修复的:

    NavHostFragment 现在与FragmentContainerView 一起使用时,可以在配置更改后正确恢复图形。 (b/143752103)

    所以请确保您使用的是2.2.0-rc03

    【讨论】:

    【解决方案2】:

    如果你像我一样忘记添加到你的FragmentContainerView,你会得到同样的错误

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

    【讨论】:

    • 这对我有用。其他解决方案无效。
    【解决方案3】:

    使用 Navigation UI 的最新版本:

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

    它已在新版本中修复

    【讨论】:

    • 添加类路径“androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0-alpha02”
    【解决方案4】:

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

    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"
    

    这解决了我的问题..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多