我已经从连接到NavController的导航抽屉导航到 DialogFragment 。但是,当我导航到设置了popUpTo和Dialog片段的另一个目标时,它不会清除堆栈。如何清除堆栈?
AM从LogoutDialog调用此方法
findNavController().navigate(R.id.action_logoutDialog_to_auth_navigation)
我只使用片段,只有一项活动。
这是我的导航图的一部分
<fragment
android:id="@+id/homeFragment"
android:name="io.ui.home.HomeFragment"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_homeFragment_to_auth_navigation"
app:destination="@id/auth_navigation"
app:popUpTo="@id/homeFragment"
app:popUpToInclusive="true" />
<argument
android:name="fromLogin"
app:argType="boolean"
android:defaultValue="false" />
</fragment>
<dialog
android:id="@+id/logoutDialog"
android:name="io.ui.dialog.LogoutDialog"
android:label="LogoutDialog" >
<action
android:id="@+id/action_logoutDialog_to_auth_navigation"
app:destination="@id/auth_navigation"
app:popUpTo="@id/logoutDialog"
app:popUpToInclusive="true" />
</dialog>
<!-- auth navigation graph -->
<navigation
android:id="@+id/auth_navigation"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="io.ui.login.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login">
<action
android:id="@+id/action_loginFragment_to_OTPFragment"
app:destination="@id/OTPFragment"
app:popUpTo="@id/loginFragment"
app:popUpToInclusive="true" />
<action
android:id="@+id/action_loginFragment_to_homeFragment"
app:destination="@id/homeFragment" />
<action
android:id="@+id/action_loginFragment_to_resetPasswordFragment"
app:destination="@id/resetPasswordFragment" />
</fragment>
<fragment
android:id="@+id/OTPFragment"
android:name="io.ui.login.OTPFragment"
android:label="fragment_otp"
tools:layout="@layout/fragment_otp">
<action
android:id="@+id/action_OTPFragment_to_homeFragment"
app:destination="@id/homeFragment"
app:popUpTo="@id/OTPFragment"
app:popUpToInclusive="true" />
<action
android:id="@+id/action_OTPFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popUpTo="@id/OTPFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/resetPasswordFragment"
android:name="io.ui.profile.PasswordFragment"
android:label="fragment_reset_password"
tools:layout="@layout/fragment_password" >
<argument
android:name="isReset"
app:argType="boolean"
android:defaultValue="false" />
</fragment>
</navigation>
答案 0 :(得分:1)
您正在寻找可用于操作的这些属性。
操作的popUpTo
属性在导航之前将后堆栈“弹出”到给定的目的地。 (从后堆栈中删除了目的地。)
如果popUpToInclusive
属性为false或未设置,则popUpTo
会删除直到指定目标的目标,但会将指定目标留在堆栈中。
如果popUpToInclusive
设置为true,则popUpTo
属性将从后堆栈中删除所有给定目标,包括给定目标。
如果popUpToInclusive
为true并且popUpTo
设置为应用程序的起始位置,则该操作将从后退堆栈中删除所有应用程序目标。 “后退”按钮将用户带出应用程序。