在Android Navigation组件中清除返回栈

3

当主页片段被显示时,我尝试清除返回栈中的所有片段。 在导航图中,我添加了此操作。

<fragment
       android:id="@+id/loginFragment"
       android:name="com.test.navTest.ui.fragment.LoginFragment"
       android:label="fragment_login"
       tools:layout="@layout/login_fragment"
       >
       <action
           android:id="@+id/action_loginFragment_to_homeFragment"
           app:destination="@id/homeFragment"
           app:popUpTo="@+id/homeFragment"

           />
 </fragment>

在登录片段中,我尝试了以下操作:findNavController().navigate(LoginFragmentDirections.actionLoginFragmentToHomeFragment()) 根据这里的文档https://developer.android.com/guide/navigation/navigation-navigatepopUpTo会清除所有栈直到目标。但是当我按下返回键时,没有任何内容被清除。
更新: 我将此操作更改为popUpTo=Login。它只删除了登录片段,而不是在其之前的两个片段。我应该在登录之前的片段动作中添加任何参数吗?
<action
            android:id="@+id/action_loginFragment_to_homeFragment"
            app:destination="@id/homeFragment"
            app:popUpTo="@+id/loginFragment"
            app:popUpToInclusive="true" />```
1个回答

7
我的做法是添加图形ID到popUpTo值中,这样可以清除回退栈中的所有片段。
<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/nav_graph"
    app:startDestination="@id/splashFragment">
     <fragment
        android:id="@+id/loginFragment"
        android:name="com.test.navTest.ui.fragment.LoginFragment"
        android:label="fragment_login"
        tools:layout="@layout/login_fragment">
        <action
            android:id="@+id/action_loginFragment_to_homeFragment"
            app:destination="@id/homeFragment"
            app:popUpTo="@+id/nav_graph"
            app:popUpToInclusive="true" />
    
    </fragment>

当我添加了popUpTo = @+id/login_fragment, 它只移除了登录片段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接