导航体系结构:不推荐使用不推荐使用clearTask的情况下如何管理正确的导航

时间:2018-11-15 07:43:20

标签: android android-fragments android-architecture-components android-architecture-navigation

尽管从here开始使用导航架构,但here中的clearTask已被弃用。

我的情况是这样的:“登录”和“注册”共有2个屏幕,两者都有相互链接。因此,您可以从“登录名”转到“注册”,也可以从“注册名”登录。 但背面应关闭Press App。

只需在以下两个动作中添加clearTask即可完成

<?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/nv_auth_phase"
    app:startDestination="@id/fragment_login">

    <fragment
        android:id="@+id/fragment_login"
        android:name="com.jobhook.ui.auth.login.LoginFragment"
        android:label="LoginFragment"
        tools:layout="@layout/fragment_login">
        <action
            android:id="@+id/nv_action_login_to_registration"
            app:clearTask="true"
            app:destination="@id/fragment_registration" />

    </fragment>


    <fragment
        android:id="@+id/fragment_registration"
        android:name="com.jobhook.ui.auth.registration.RegistrationFragment"
        android:label="RegistrationFragment"
        tools:layout="@layout/fragment_registration">


        <action
            android:id="@+id/nv_action_registration_to_login"
            app:clearTask="true"
            app:destination="@id/fragment_login" />
    </fragment>
</navigation>

但是不建议使用,我尝试了其他解决方案,例如添加 popUpTo->导航图的ID ,在两个操作中将 launchSingleTop设置为true 。在我的情况下,似乎什么都不起作用。

我也检查了this question,但没有找到解决方法。

3 个答案:

答案 0 :(得分:2)

您需要在操作中使用下一个代码

app:popUpTo="@+id/fragment_login"
app:popUpToInclusive="true"

答案 1 :(得分:0)

将NavHostFragment的默认NavHost值设置为false,

<fragment
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:defaultNavHost="false"
    app:navGraph="@navigation/nav_graph"
    ... />

app:defaultNavHost =“ true”属性可确保NavHostFragment拦截系统的“后退”按钮。注意,只有一个NavHost可以是默认值。如果您在同一布局中有多个主机(例如,两窗格布局),请确保仅指定一个默认NavHost。

答案 2 :(得分:-1)

简单有效的解决方案:


fun signOut(activity: Activity) = activity.finish()

附注。 Vel_daN:爱​​你所做的?。