android - 更改权限给出错误:您必须在调用 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>
解决方案
您应该使用最新版本的导航组件。他们修复了 2.3.0 中与此相关的问题。
https://developer.android.com/guide/navigation/navigation-getting-started
推荐阅读
- outlook-addin - 如何使用 OneDrive for Business 中的 addFileAttachmentAsync 添加文件
- c# - 在 C# 中通过 tcp/ip 连接发送图像
- php - 将自定义 WooCommerce 结帐字段导出到 ShipStation 自定义字段 2
- prestashop-1.7 - 如何将文本添加到微型列表块
- database - 单属性主键和第二范式(2NF)
- apostrophe - 撇号输入字段验证
- python - 如何将 Ariba 与 Python 连接起来?我正在寻找用 Python 阅读 Ariba 的文档,然后在它们上使用文本分析
- docker - Nexus 私有 docker pull 映像失败并出现 x509:无法验证证书错误
- java - dlopen() 中的 BUS_ADRERR
- reactjs - 使用react和redux删除后如何重新渲染相同的组件?