android – 如何使用Fragments隐藏NavigationDrawer上的OptionsMenu?

前端之家收集整理的这篇文章主要介绍了android – 如何使用Fragments隐藏NavigationDrawer上的OptionsMenu?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建 Android应用程序,我尽可能地尊重最新的Android可用性标准.特别是,我正在使用导航栏来准备用户界面,我试图确保与2.1 Android版本的兼容性.要了解这个问题,该项目包括

>主要活动;
>导航抽屉;
>四个片段(与其相关联的布局).

我打开导航栏时遇到的问题是:虽然每个Fragment都有其特定的菜单,当我打开导航栏时,它被添加到导航栏的菜单中.我尝试了几种方法(invalidateOptionMenu(),menu.clear(),操作函数isDrawerOpen()和isDrawerClose()等),但是打开导航栏时我不能删除Fragment的菜单.

这些是我的代码的一些片段,其中大部分是由Android Studio生成的,我使用的是IDE:

主要活动:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        // Only show items in the action bar relevant to this screen
        // if the drawer is not showing. Otherwise,let the drawer
        // decide what to show in the action bar.
        getMenuInflater().inflate(R.menu.global,menu);
        restoreActionBar();
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

其中“全局”是具有古典“ic_action_overflow”的简单菜单.

在我的碎片我有:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
}

@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    super.onCreateOptionsMenu(menu,inflater);
    inflater.inflate(R.menu.fragment1,menu);
}

(与其他片段相同).

有人可以给我一些建议如何采取行动?

解决方法

我使用Android Studio生成的样板代码面临同样的问题,并通过修改NavigationDrawerFragment.onPrepareOptionsMenu()中的菜单来工作(在我的情况下,我想完全清除菜单):
@Override
public void onPrepareOptionsMenu(Menu menu) {
    if (mDrawerLayout != null && isDrawerOpen()) {
        menu.clear();
    }
}

大概如何重新创建选项菜单

>由IDE生成的NavigationDrawerFragment在打开或关闭抽屉时调用supportInvalidateOptionsMenu().
> onCreateOptionsMenu gets called:托管活动和每个添加的片段都有机会提供菜单项.
> onPrepareOptionsMenu gets called:再次,托管活动和每个添加的片段都有机会修改菜单.

这些片段是iterated in the order they were added.在步骤2和3中途没有办法停止通话链.

所以这个想法是让NavigationDrawerFragment在其onPrepareOptionsMenu上对菜单进行最后一刻的更改,而不会有其他碎片.

如果您需要让其他片段在onPrepareOptionsMenu中执行某些操作,则可能需要设置其他片段,以便它们可以确定抽屉是否打开,并相应地更改其行为.这可能意味着可以在主机活动中添加一个isDrawerOpen方法,或者将其中的抽屉标识符传递给该片段,就像在NavigationDrawerFragment.setup()中完成一样.

猜你在找的Android相关文章