android - Android 架构导航 - onSupportNavigateUp()
问题描述
finish()
在使用导航库时,可以用in完成内部活动onSupportNavigateUp()
吗?或者我们应该使用从堆栈NavController
中删除它?Activity
而且,我无法使用 NavController 删除Activity
.
我的导航图如下所示:
<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"
app:startDestination="@id/home_frag">
<fragment
android:id="@+id/home_frag"
android:name="com.yamikrish.app.slicedemo.ui.home.HomeFragment"
android:label="home_frag"
tools:layout="@layout/home_fragment">
<action
android:id="@+id/open_details"
app:destination="@id/details_fragment" />
</fragment>
<activity
android:id="@+id/details_fragment"
android:name="com.yamikrish.app.slicedemo.ui.detail.DetailActivity"
android:label="@string/post_detail"
tools:layout="@layout/detail_page">
<argument
android:name="id"
app:type="integer" />
</activity>
<fragment
android:id="@+id/profile_frag"
android:name="com.yamikrish.app.slicedemo.ui.profile.ProfileFragment"
android:label="@string/profile"
tools:layout="@layout/profile_fragment" />
</navigation>
我尝试使用如下:
(i) 在 DetailActivity 中使用 NavController
override fun onSupportNavigateUp(): Boolean {
val nav = NavController(this)
return nav.navigateUp()
}
但得到例外,
java.lang.IllegalArgumentException:NavController 回栈为空
(ii) 在 BaseActivity 中使用 NavController
override fun onSupportNavigateUp(): Boolean {
return findNavController(R.id.container).navigateUp()
}
那也行不通。我做错了吗??
解决方案
在这种情况下,您的详细活动没有父导航图的概念。你的例子二是正确的。因为 BaseActivity 包含一个导航图。我不知道 DetailActivity 在做什么,但如果它还包含导航图,那么您应该使用与 BaseActivity 相同的代码。您收到该错误并动态创建新的 NavController 的事实告诉我 DetailActivity 没有使用导航图(创建新的 NavController 并且不为其提供图将默认使用空的回栈进行初始化) .
总之,DetailActivity 的 onSupportNavigateUp 应该表现得像一个正常的向上导航。如果有明确的父级,您应该启动它,否则,只需完成()。
推荐阅读
- powershell - 分发列表中接受的发件人、ManagedBy 和 ModeratedBy 需要 SMTP 地址
- javascript - 等待数组被填充,然后渲染这些组件
- kotlin - 在 Kotlin 中将列表中的项目相互配对
- azure - 如何确保我的 Azure Devops Pipeline YAML 与我通过 Pipeline UI 所做的更改同步?
- c# - 使用 Core 3.1 Razor 提交带有长文本字段(大约 3000 个字符)的表单时出现 404.15 错误
- azure-ad-b2c - 受邀来宾用户能否使用 Azure AD B2C 登录?
- mysql - MySql:加载产品目录:在 Windows 7 上加载产品目录时遇到错误
- audio - 合并 2 个文件(音频和视频),在 FFMPEG 中带有 BITC 和水印
- android - Kotlin 在应用函数中分配属性后返回具有未分配属性的对象
- cakephp - 如何在 CakePHP 1.3 中修改 $content_for_layout