导航视图全局操作返回状态

2023-12-15

我一直在搞乱 Jetpack 导航组件,并且创建了一个使用导航抽屉的活动。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navigationController = findNavController(R.id.navigationHostFragment)
        navigationView.setupWithNavController(navigationController)

        val appBarConfiguration = AppBarConfiguration(TOP_LEVEL_DESTINATIONS, drawerLayout)
        toolbar.setupWithNavController(navigationController, appBarConfiguration)
    }

    override fun onSupportNavigateUp(): Boolean =
            NavigationUI.navigateUp(findNavController(R.id.navigationHostFragment), drawerLayout)

}

这正如我所期望的那样,但后来我添加了一个全球行动进入设置屏幕。

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

    ...

    <activity android:id="@+id/settingsActivity"
        android:name="com.example.app.ui.SettingsActivity"
        android:label="@string/title_settings"/>

    <action android:id="@+id/settingsAction"
        app:destination="@+id/settingsActivity"/>

</navigation>

并参考中的操作NavigationView menu.

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    ...

    <group android:id="@+id/navigationGroupSettings">

        <item android:id="@+id/aboutAction"
            android:title="@string/title_about"
            android:icon="@drawable/ic_info_black_24dp"/>

        <item android:id="@+id/settingsAction"
            android:title="@string/title_settings"
            android:icon="@drawable/ic_settings_black_24dp"/>

    </group>

</menu>

这会显示SettingsActivity,但是当我按后退按钮返回到MainActivity显示第一个目的地,而不是前一个目的地。尽管NavigationView正确保存其状态,并检查最后一个目的地(而不是列表中的第一项)。

我也尝试更换SettingsActivity with a SettingsFragment,结果相同。

选择全局操作后,如何让导航组件正确保存其状态?


根据onNavDestinationSelected()文档(这就是如何NavigationUI 触发菜单项):

默认情况下,返回堆栈将弹回到导航图的起始目的地。菜单项有android:menuCategory="secondary"不会弹出返回堆栈。

因此你可以添加android:menuCategory="secondary"如果您希望避免在选择设置目标时从堆栈中弹出其他目标,请添加到菜单项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导航视图全局操作返回状态 的相关文章

随机推荐

  • 如何使用 Devise 设置电子邮件确认?

    是否有教程解释如何从头开始设置 Devise 的注册确认电子邮件 在开发和生产中 即如果您没有设置 Action Mailer 谷歌搜索刚刚出现了一堆与此相关的单独片段 没有一篇文章能够解释得足够多 而且我不确定它们如何组合在一起 是否有分
  • 正则表达式替换除第一个和最后一个字符之外的内容

    什么是正则表达式 用于将字符串中的双引号 替换为转义反斜杠 后跟双引号 字符串的第一个和最后一个字符除外 示例 1 嵌入字符串中的双引号 Input This is a Test Expected Output This is a Test
  • WELD-001408 类型 [Validator] 的依赖关系不满足

    将项目从 Java EE 6 迁移到 Java EE 7 后 我无法部署该项目 我已经启用了 CDI beans xml 带有 bean discovery mode all 以实现向后兼容性 部署错误似乎与我的代码无关 因为它提到了一个尝
  • C# 将内部 XML 反序列化为字符串

    我有以下 XML
  • Mongodb 按索引字段搜索

    我将字段 search string 添加到我的文档中并为其建立索引 db my collection createIndex search string text Search string 包含以下内容 a ar are are are
  • 如何使用 BeautifulSoup 正确解析 UTF-8 编码的 HTML 为 Unicode 字符串? [复制]

    这个问题在这里已经有答案了 我正在运行一个 Python 程序 该程序获取 UTF 8 编码的网页 并使用 BeautifulSoup 从 HTML 中提取一些文本 但是 当我将此文本写入文件 或在控制台上打印 时 它会以意外的编码写入 示
  • 图形 - 将 3d 点转换为 2d 投影的方程

    我是一名图形新手 但正在使用 HTML5 Canvas javascript 以及一些形状和图像 如果我在点 C x C y C z 处有一个相机 在 P x P y P z 处有一个点 那么将该点转换为 2d 点的最简单方法是什么 以便我
  • 如何访问名称中带有前导数字的财产[重复]

    这个问题在这里已经有答案了 var jsonJSON UrlFetchApp fetch https wowtoken info snapshot json var json Utilities jsonParse jsonJSON get
  • 批量邮件性能发送方式

    我写了一个支持 phpmailer swiftmailer 的邮件脚本 实际上 小型活动效果很好 所有邮件都到达收件人 没有精子或服务器资源问题 我对每个连接的发送性能有疑问 哪种方式更适合发送操作 订阅者具体邮件正文不同 第一个场景 打开
  • 如何创建包含2个表中的数据并将数据保存到一张表的表单

    我有 2 张桌子 Employee ID SalaryPerDay Name unique Schedule ID EmployeeID Date Attending boolean loan discount overTimeHours
  • 获取Android设备/模拟器根目录

    我正在使用 Eclipse Ubuntu 开发 Android 应用程序 像往常一样 我在 AVD 模拟器上进行第一次拍摄 我想建立一个独特的文件夹结构 可以在当前模拟器和最终物理设备 SD 存储卡 上使用 对于虚拟和物理设备类型 通过程序
  • Android Wear OS 表盘 支持不同屏幕尺寸

    我正在玩 Wear OS 的表盘 目前 我已经创建了 背景 320x320 刻度圈 320x320 时针 分针和秒针 320x40 在屏幕尺寸为 320x320 的圆形设备上一切正常 当我使用屏幕尺寸为 360x360 的设备时 事情变得复
  • 根据数据属性的值选择选项

    我想选择 又名 jQuery 预选择 并根据数据变量设置值 该列表有 3 个具有相同值但不同 data d 的项目 假设我有变量selectvar d 那么它应该更改为列表中的 2 项
  • 如何在 Symfony2 路由中定义默认日期值?

    如果我想创建一条路线 其中年月日是变量 如何定义如果这些变量为空 则采用当前日期 例如 像这样 肯定行不通 blog path blog year month day defaults controller AcmeBlogBundle B
  • 我已经安装了 Visual Studio 2015,但没有 C++ 项目。?

    我遇到问题 我想在 Visual Studio 2015 中编写 C 代码 但无法创建 C 项目 因为 新建项目 窗口中没有 C 模板 我正在以这种方式创建新项目文件 gt 新建 gt 项目 gt Visual C 但没有c 模板 请帮忙
  • 当我按下屏幕 ionic 3 时菜单不起作用

    我有一个屏幕登录 主页带有菜单 4 个选项卡 喜欢home about location more 在这种情况下菜单工作正常 当我登录时 我使用下面的代码将屏幕导航到带有所有选项卡 菜单的主页 那个时候工作正常 this navCtrl p
  • 使用 App SDK 2.0 中的新数据更新图表

    我正在使用图表来可视化数据TimeboxScopedApp 我想在范围发生变化时更新数据 使用更暴力的方法remove 然后按照描述重新绘制图表here给我留下了一个覆盖的 正在加载 蒙版 但其他方面都有效 使用 Highchart 原生的
  • mysql存储过程可以有默认参数吗?

    我用谷歌搜索了这个并不断提出 不 这是不可能的 但这些帖子的日期是 2005 2007 年 所以我想知道这是否已经改变 代码示例 CREATE PROCEDURE blah myDefaultParam int 0 This breaks
  • 如何获取特定应用程序的电池和移动数据使用情况?

    背景 从某些 Android 版本 不记得是哪个 开始 Android 能够显示已安装应用程序的电池统计信息和移动数据使用情况 3G 以便用户意识到这一点并将能够思考应用程序是否应该保留 我正在谈论那些 问题 我在 Play 商店上看到过一
  • 导航视图全局操作返回状态

    我一直在搞乱 Jetpack 导航组件 并且创建了一个使用导航抽屉的活动 class MainActivity AppCompatActivity override fun onCreate savedInstanceState Bundl