我正在创建一个包含 4 个片段的应用程序(主页、网上商店、购物车、个人资料)。我有一个活动(MainActivity)和一个导航栏。当我在主页上时,我不使用导航栏,因此它是隐藏的,我使用页面上的图标代替导航(使用导航图操作),为此我使用图标的 onClickListeners。 因此,如果我单击网上商店,它会很好地将我带到网上商店片段,从这里我可以导航到购物车和个人资料片段。 但不是到家了... 每当我单击导航栏上的“主页”图标时,它就会转到网上商店(我第一次从主页导航时选择的片段)。如果我第一次选择任何其他片段,也会发生同样的情况:如果我首先选择购物车,然后每当我单击主页图标时,它就会将我带到购物车,依此类推。 我不知道可能是什么问题。似乎它是永久设置的,如果我导航到主页,我第一次使用的 setOnClickListener 将触发。
我有一种感觉,我不能一起使用NavigationGraph和NavigationBar,我试图以某种方式将它们合并在一起,但无法弄清楚。
这是一些代码:
在您的
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()
}
我无法重新编写你的代码,因为你已经粘贴到图片中,如果这不起作用,请告诉我。
我知道已经很晚了,但我还是在解释。 当您想要清除 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" />