Android 架构导航 - onSupportNavigateUp()

标签 android kotlin android-architecture-components android-jetpack android-architecture-navigation

在使用导航库时,是否可以在 onSupportNavigateUp() 中使用 finish() 完成内部 Activity ?或者我们应该使用 NavController 从 Stack 中删除那个 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 back stack is empty

(ii) 在 BaseActivity 中使用 NavController

 override fun onSupportNavigateUp(): Boolean {
            return  findNavController(R.id.container).navigateUp()
    }

那也行不通。我做错了吗??

最佳答案

在这种情况下,您的详细信息 Activity 没有父导航图的概念。你的例子 ii 是正确的。由于 BaseActivity 包含导航图。我不知道 DetailActivity 在做什么,但如果它还包含导航图,那么您应该使用与 BaseActivity 相同的代码。您收到该错误并即时创建新的 NavController 的事实告诉我 DetailActivity 没有使用导航图(创建新的 NavController 并且不为其提供图将默认初始化为空的返回堆栈) .

总而言之,DetailActivity 的 onSupportNavigateUp 应该表现得像一个正常的向上导航。如果有明确的 parent ,您应该启动它,否则,只需 finish()。

关于Android 架构导航 - onSupportNavigateUp(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50364598/

相关文章:

java - 无法使用 gradle 构建滑动菜单,在 lint 上失败

android - polymer TogglePanel 在 iphone 上闪烁

android - Kotlin This Cursor 在使用#close 后应该被释放

kotlin - Spring Cloud Stream Kotlin消费者问题

android - 具有自定义 View 的 MVVM 架构

在横向模式下锁定和解锁后,Android Lifecycle ViewModel 不会保留

java - PhoneGap 1.0 android facebook 插件登录失败

android - 如何从具有 NestedScrollView 的 fragment 中的 AppBarLayout 禁用 "expand"?

android - Unresolved reference :build.gradle.kts中的grgit

android - PagedListAdapter 中的通用列表