android - 退出嵌套导航图
问题描述
我有 3 个图表:“主”、“1”和“2”
应用程序开始“主”,我们检查用户是否登录,然后根据登录状态转到“1”或“2”。
这按预期工作。
这是问题:
当用户从“1”或“2”主屏幕单击“返回”时,应用导航回“主”。
这是预期的结果:
当用户从“1”或“2”主屏幕单击“返回”时,应用程序应退出。
如何退出嵌套图的顶级片段?
这是我的“主要”导航图:
<?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/main_navigation"
app:startDestination="@id/fragment_main">
<fragment
android:id="@+id/fragment_main"
android:name="com.my.app.fragments.MainFragment"
android:label="MainFragment"
tools:layout="@layout/fragment_main">
<action
android:id="@+id/action_fragment_main_to_logged_out_navigation"
app:destination="@id/logged_out_navigation"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:launchSingleTop="true"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/main_navigation"
app:popUpToInclusive="true" />
<action
android:id="@+id/action_fragment_main_to_logged_in_navigation"
app:destination="@id/logged_in_navigation"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:launchSingleTop="true"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/main_navigation"
app:popUpToInclusive="true" />
</fragment>
<include app:graph="@navigation/logged_in_navigation" />
<include app:graph="@navigation/logged_out_navigation" />
</navigation>
解决方案
为了在嵌套导航图目的地中退出应用程序,只需使用popUpTo
并将其设置为 main_nav_graph.xml
例子:
设计
XML
<?xml version="1.0" encoding="utf-8"?>
<navigation ...
android:id="@+id/main_nav_graph.xml"
app:startDestination="@id/start">
<fragment
android:id="@+id/start"
android:name="com.example.navargs.StartFragment"
android:label="Start"
tools:layout="@layout/fragment_start" >
...
<action
android:id="@+id/action_start_to_navigation"
app:destination="@id/login_nav_graph"
app:popUpTo="@+id/main_nav_graph.xml" />
</fragment>
<fragment ... />
<include app:graph="@navigation/login_nav_graph" />
</navigation>
对于一个工作示例,请查看 repo 中的login-flow 分支。
推荐阅读
- python - 使用 for 循环创建 kivvy 文本输入/标签
- javascript - 如何访问局部范围内的全局变量?
- python - 我是否从 sympy 获得角度的主要价值?
- r - 如何解释 is() 的输出?
- html - SVG 无法正确旋转
- java - 如何以编程方式从 Log4j2 配置/任何其他 Log4j2 容器中删除 Appender?
- c++ - 具有双精度类型值的数组实现的 C++ 堆栈
- google-cloud-firestore - 在 FireStore 中如何知道客户端是否正在收听特定文档
- javascript - 对唯一的有界数组进行排序的最有效方法?
- wordpress - 错误:对不起,您不能创建资源。[woocommerce_rest_cannot_create]