根据导航目标更新ActionBar菜单

时间:2019-04-21 13:52:18

标签: java android android-fragments android-actionbar android-architecture-navigation

我想根据=INDEX(A1:A5,MATCH("*"&G2&"*",A1:A5,0),0) 的当前目的地来更改ActionBar中显示的菜单项。我所说的“更改”是指为每个目的地都添加一个指定的menu-xml。

可以将行为与新导航系统更改NavController标题的集成方式进行比较,具体取决于Navigation-xml中目标片段的给定ActionBar

到目前为止,我已经使用新的Android导航通过android:labelActionBar设置了基本活动。此外,我还创建了所有必要的XML文件和片段以在它们之间进行导航。

DrawerLayout

我考虑过在每个目标片段中使用单个工具栏 但是我放弃了这个主意,因为我会失去汉堡图标和后箭头图标之间的过渡动​​画。

是否可以通过新的导航系统或以其他任何方式实现这一目标?

2 个答案:

答案 0 :(得分:0)

我找到了一种方法,可以通过在扩展更新的布局之前调用menu.clear();来实现所需的行为。我仍然想知道,是否有内置的方法可以通过新的导航系统实现这一目标。

在目标片段中,我现在正在使用它:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
    menu.clear();
    inflater.inflate(R.menu.toolbar_items_idle, menu);

    super.onCreateOptionsMenu(menu, inflater);
}

答案 1 :(得分:0)

我刚刚测试过。在导航库的当前版本(2.2.2)中,当您四处导航时,将添加和删除由每个片段放大的菜单项。

但是默认情况下不会调用onCreateOptionsMenu !为了使事情正常进行,您必须在初始化过程中撒上魔力并致电setHasOptionsMenu(true)

当心,包含该活动的所有菜单项将始终与当前片段中出现的菜单项并排出现,因此,如果您不希望使用任何常见的菜单项,则最简单的做法是在“活动”中不对菜单进行膨胀。

旁注:在Fragment类中,onCreateOptionsMenu(menu, inflater)是一个空方法,因此在代码中对super.onCreateOptionsMenu(menu, inflater)的调用是空操作。