gpt4 book ai didi

android - 如何使用 fragment 隐藏 NavigationDrawer 上的 OptionsMenu?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:04 25 4
gpt4 key购买 nike

我正在创建 Android 应用程序,我正在尝试尽可能多地遵守最新的 Android 可用性标准。特别是,我正在使用抽屉导航准备用户界面,并试图确保与 2.1+ Android 版本的兼容性。为了理解这个问题,该项目包括:

  • 一项主要 Activity ;
  • 抽屉导航;
  • 四个 fragment (及其相关布局)。

我遇到的问题发生在打开抽屉导航时:虽然每个 Fragment 都有其特定的菜单,但当我打开抽屉导航时,它会添加到抽屉导航菜单中。我尝试了几种方法(invalidateOptionMenu()menu.clear()、操作函数 isDrawerOpen()isDrawerClose() 等),但我无法在打开抽屉导航时删除 Fragment 的菜单。

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

在主要 Activity 中:

@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);
}

其中“global”是一个带有经典“ic_action_overflow”的简单菜单。

在我的 fragment 中我有:

@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);
}

(与其他Fragment相同)。

有人可以给我一些关于如何行动的建议吗?

最佳答案

我在使用 Android Studio 生成的样板代码时遇到了同样的问题,并通过修改 NavigationDrawerFragment.onPrepareOptionsMenu() 中的菜单使其正常工作(在我的例子中,我想完全清除菜单) :

@Override
public void onPrepareOptionsMenu(Menu menu) {
if (mDrawerLayout != null && isDrawerOpen()) {
menu.clear();
}
}

这是重新创建选项菜单的大致方式:

  1. NavigationDrawerFragment 由 IDE 生成,在抽屉打开或关闭时调用 supportInvalidateOptionsMenu()
  2. onCreateOptionsMenu gets called : 托管 Activity 和每个添加的 fragment 都有机会贡献菜单项。
  3. onPrepareOptionsMenu gets called : 同样,托管 Activity 和每个添加的 fragment 都有机会修改菜单。

fragment 是iterated in the order they were added .无法在步骤 2. 和 3. 的中途停止调用链。

所以我们的想法是让 NavigationDrawerFragment 在其 onPrepareOptionsMenu 中对菜单进行最后一分钟的更改,而不是其他 fragment 。

如果您需要让其他 fragment 在 onPrepareOptionsMenu 中执行某些操作,那么您可能必须设置其他 fragment ,以便它们可以确定抽屉是否打开并相应地更改它们的行为。这可能意味着向托管 Activity 添加 isDrawerOpen 方法或将抽屉标识符传递给 fragment ,就像在 NavigationDrawerFragment.setup() 中所做的那样。

关于android - 如何使用 fragment 隐藏 NavigationDrawer 上的 OptionsMenu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com