Android导航允许将工具栏菜单中的项目与导航图中的元素一起耦合在一起,
val navctrl = findNavController(R.id.AirTimeFragment)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar)
setupActionBarWithNavController(this, navctrl)
通过指定菜单项的ID
<menu>
<item android:id="@+id/fragment" .../>
OR
<item android:id="@+id/action_fragment_to_fragment" .../>
</menu>
与导航图中的片段或动作ID相同。
<navigation>
<fragment android:id="@+id/fragment" ...>
<action android:id="@+id/action_Fragment_to_Fragment" ... />
</fragment>
</navigation>
我曾经遇到过一种情况,我想使用菜单在两个片段之间切换,并指定了动作ID,而不是片段ID。因此,对于图A -> {B,C}
,我指定了A-B
和A-C
作为ID。我发现我可以导航到任一目的地一次,但是此后我无法在它们之间导航。那就是我曾经使用B
导航到A-B
,然后由于现在无效而无法使用C
导航到A-C
。显然,引用不再有效。那就是我需要一个ID为B-C
的菜单项。我使用的解决方法是将片段ID指定为菜单ID。因此,分别用B
代替A-B
和C
代替A-C
。我现在知道无论如何我都必须以编程方式执行此操作。
我只是以为这会破坏首先提供导航的目的;特别是如果您要依靠某种形式的过渡来进行。是否可以列出多个动作作为菜单ID?那是否可以同时提供A-B
和C-B
作为菜单项的ID?给定源和目标片段/ Activit(y | ies),导航是否会尝试确定要使用哪个动作,毕竟它是一个有向图?我很好奇是否这样做。也许我只是错过了这样说的文档。