如何在Android导航组件中管理BottomNavigationView backstack

2023-11-25

我在用navigation component and BottomNavigationView,我面临一个问题,那就是当我从fragment1>2>5>4>3 当我按下后退按钮时我得到fragment1.我知道这是默认行为,但我不想要这个,我想将它们保存在backstack所以当我按下后退按钮时它应该转到fragment4不是1。我一直在尝试和搜索,但找不到任何解决方案。我可以放fragment手动进入backstack in kotlin?

My code:

活动主文件

<androidx.constraintlayout.widget.ConstraintLayout
           .......................
           .......................>

            <androidx.appcompat.widget.Toolbar
               ................
               ................/>

            <fragment
                android:id="@+id/app_nav_host_fragment"
                android:name="androidx.navigation.fragment.NavHostFragment"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:defaultNavHost="true"
                app:navGraph="@navigation/app_nav"
                ..............
                ............../>
            <com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/app_bottom_nav_view"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:background="@drawable/white_grey_border_bottom"
                app:menu="@menu/bottom_nav_menu"
                app:labelVisibilityMode="unlabeled"
                ...........
                .........../>

</androidx.constraintlayout.widget.ConstraintLayout>

应用程序_nav.xml

<navigation 
    ...........
    ...........
    android:id="@+id/app_nav"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.instagram_clone.ui.HomeFragment"
        android:label="HomeFragment"
        tools:layout="@layout/fragment_home"/>
    .............
    .............
    .............
    .............
</navigation>

MainActivity.kt

class MainActivity : AppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)

        val binding  = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
        val bottomNavView = binding.appBottomNavView
        val navController = findNavController(R.id.app_nav_host_fragment)

        bottomNavView.setupWithNavController(navController)

    }
}

根据文档onNavDestinationSelected()(该方法setupWithNavController()选择菜单项时使用):

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

所以只需添加android:menuCategory="secondary"到与您一起使用的每个菜单项BottomNavigationView.

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

如何在Android导航组件中管理BottomNavigationView backstack 的相关文章

  • Android - 保留或删除应用程序卸载时创建的文件

    我创建了一个应用程序 用于创建文件并将其存储到 SD 卡 有没有办法将文件夹与应用程序绑定 以便当用户在 Android 设备上运行卸载时删除所有文件 自 2009 年以来似乎有了一些进展 来自文档 http developer andro
  • 是否可以“保护”属性并将其从选择语句中排除

    我想保护数据层级别的某些属性 例如 我想保护用户存储在数据库中的密码哈希 以便它不会以任意形式显示select 声明 仅当在 a 中明确请求时才采用这种方式select property property2陈述 我认为更准确的答案是设置se
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 尝试在节点 0.12 上重新安装 `node-sass`?

    我想使用谷歌网络入门套件 我安装了node js v0 12 0 node sass gulp 然后跑 sudo npm install 当我打字时gulp serve然后得到这个错误 Using gulpfile web starter
  • 将静态库合并为单个

    如何将静态库合并为一个 我确实有三个静态库 libSignatureLibary armv6 a libSignatureLibary armv7 a 和 libSignatureLibary i368 a 现在我想将这三个文件合并到一个库
  • 想要定制django Rest框架Browsable API页面

    问题 我想自定义 django Rest Framework Browsable API 页面 使其具有与我的 Web 应用程序的其余部分相同的外观和感觉 安装的软件 Python 3 6 Django 1 10 6 Django 休息框架
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • CSS:缩放字体大小以适应父块元素的高度

    我发现的几乎每个问题和答案都谈到了视口大小 这确实不是我的问题 拿着这支笔 https codepen io njt1982 pen pZjZNM https codepen io njt1982 pen pZjZNM 我有一个非常基本的
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换
  • 如何处理两个 gradle 插件的任务冲突?

    我使用 gradle 和两个插件com jfrog artifactory and io swagger core v3 swagger gradle plugin 现在我想按照此处所述进行配置https github com swagge
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An
  • 添加两个 ActiveRecord::Relation 对象[重复]

    这个问题在这里已经有答案了 如何将两个关系添加在一起 当我尝试 运算符时 它返回一个数组 但我需要它来返回关系 谢谢 麦克风 Try new relation relation merge another relation
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in
  • 如何过滤 Solr 中多值字段返回的值

    我有一个文档 其中包含一个名为 uuid 的字段 该字段是一个列表 多值 每个文档最多可以有 100k 个值 例如 我想搜索与以 5ff6115e 开头的 uuid 匹配的文档 我已经可以通过使用成功做到这一点q uuids 5ff6115
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内

随机推荐