首页 > 解决方案 > 更改权限给出错误:您必须在调用 getGraph() 之前调用 setGraph()

问题描述

我在相机应用程序中工作,如果我从设置中手动更改我的权限并再次恢复活动,会给我这个错误/崩溃。

您必须在调用 getGraph() 之前调用 setGraph()。

我正在使用导航库中的活动/片段。

导航图:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/guard_nav_graph"
    app:startDestination="@id/cameraFragment">
    <fragment
        android:id="@+id/cameraFragment"
        android:name="guard.camera.CameraFragment"
        android:label="Camera"
        tools:layout="@layout/fragment_guard_camera">

        <action
            android:id="@+id/action_cameraFragment_to_LocationFragment"
            app:destination="@id/LocationFragment"
            app:popEnterAnim="@anim/enter_from_left"
            app:popExitAnim="@anim/exit_to_right">

            <argument
                android:name="isLocationAllowed"
                app:argType="boolean" />

        </action>
        <argument
            android:name="isEdit"
            android:defaultValue="false"
            app:argType="boolean" />

    </fragment>
</navigation>

Gradle 库版本:

implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.1.0'

警卫活动:

class GuardActivity : ActivityBase() {

    private lateinit var binding: ActivityGuardBinding

    private val navController: NavController by lazy {
        findNavController(R.id.nav_host_fragment)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setTheme(R.style.AppTheme_NoActionBar)
        binding = DataBindingUtil.setContentView(this, R.layout.guard)

        setSupportActionBar(binding.incToolbar.toolBar)

        NavigationUI.setupWithNavController(binding.incToolbar.toolBar, navController)

    }

    override fun onSupportNavigateUp(): Boolean {
        return navController.navigateUp() || super.onSupportNavigateUp()
    }

}

活动的 XML 文件:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".v2.guard.GuardActivity">

    <include
        android:id="@+id/inc_toolbar"
        layout="@layout/fl_toolbar" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inc_toolbar"
        app:navGraph="@navigation/guard_nav_graph" />

</androidx.constraintlayout.widget.ConstraintLayout>

标签: androidgraphnavigationandroid-navigation-graph

解决方案


您应该使用最新版本的导航组件。他们修复了 2.3.0 中与此相关的问题。

https://developer.android.com/guide/navigation/navigation-getting-started


推荐阅读