NavigationBar 项目会将我带到我第一次选择的任何导航操作

问题描述 投票:0回答:2

我正在创建一个包含 4 个片段的应用程序(主页、网上商店、购物车、个人资料)。我有一个活动(MainActivity)和一个导航栏。当我在主页上时,我不使用导航栏,因此它是隐藏的,我使用页面上的图标代替导航(使用导航图操作),为此我使用图标的 onClickListeners。 因此,如果我单击网上商店,它会很好地将我带到网上商店片段,从这里我可以导航到购物车和个人资料片段。 但不是到家了... 每当我单击导航栏上的“主页”图标时,它就会转到网上商店(我第一次从主页导航时选择的片段)。如果我第一次选择任何其他片段,也会发生同样的情况:如果我首先选择购物车,然后每当我单击主页图标时,它就会将我带到购物车,依此类推。 我不知道可能是什么问题。似乎它是永久设置的,如果我导航到主页,我第一次使用的 setOnClickListener 将触发。

在这里我首先选择网上商店,然后它总是带我到网上商店: enter image description here

在这里,我首先选择购物车,然后它总是将我带到购物车: enter image description here

在这里,我首先选择个人资料,然后它总是将我带到个人资料: enter image description here

我有一种感觉,我不能一起使用NavigationGraph和NavigationBar,我试图以某种方式将它们合并在一起,但无法弄清楚。

这是一些代码:

主页片段 enter image description here

网上商店片段 enter image description here

购物车片段 enter image description here

个人资料片段 enter image description here

主要活动 enter image description here

底部导航菜单 XML enter image description here

导航图 enter image description here

android kotlin navigation android-navigation-graph
2个回答
0
投票

在您的

MainActivity
上创建全局
navController
,就像您为
appBarConfiguration
所做的那样:

private lateinit var navController: NavController

val navController = findNavController(R.id.nav_host_fragment_activity_main)
更改为
navController = findNavController(R.id.nav_host_fragment_activity_main)


添加以下行,如下所示:

        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)

并用这个更正你的功能:

    override fun onSupportNavigateUp(): Boolean {
        return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
    }

我无法重新编写你的代码,因为你已经粘贴到图片中,如果这不起作用,请告诉我。


0
投票

我知道已经很晚了,但我还是在解释。 当您想要清除 Jetpack Navigation 中导航堆栈中的片段或目的地时,

app:popUpTo
app:popUpToInclusive
属性至关重要。

以下是这些属性作用的快速回顾:

app:popUpTo:
指定要将后退堆栈弹出到的目标位置。返回堆栈将被清除到(但不包括)此目的地,除非
app:popUpToInclusive
设置为 true。

app:popUpToInclusive="true"
:如果设置为 true,则 app:popUpTo 中指定的目的地也将从返回堆栈中删除。

示例:

 <action
    android:id="@+id/action_to_fragmentY"
    app:destination="@id/fragmentY"
    app:popUpTo="@id/fragmentX"
    app:popUpToInclusive="true" />
© www.soinside.com 2019 - 2024. All rights reserved.