【问题标题】:how to remove menu from fragment back pressed android如何从片段后按的android中删除菜单
【发布时间】:2014-12-19 05:46:56
【问题描述】:

我正在开发一个应同时支持手机和平板电脑的应用程序。 在这个应用程序中,我使用的是来自 android 的片段。

现在应用的流程是这样的

MainActivity --> Fragment1 --> Fragment2

在这个应用程序中,我想要一个仅在 Fragment2 中显示的菜单项以及活动的菜单项。

所以我尝试了一种解决方案,例如在 MainActivity 和 Fragment2 中添加全局菜单项,用 Fragment2 特定的菜单替换整个 MainActivity 的菜单。

setHasOptionsMenu(true);

在 onCreateView 中,并实现这个方法。

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

现在它在手机布局上工作得很好,但是当它涉及到平板电脑时就会出现问题。

这是我的截图。

片段 1

Fragment 1 和 Fragment 2 在键盘(平板模式)中按 9 时的组合。

最后,当我再次按 9 回到 pHone 视图时,它显示了额外的菜单项。

我刚刚在 Image 中标记了一个额外的菜单项。那我为什么要来,我该如何解决呢?

【问题讨论】:

  • 我猜在平板模式下你的两个片段都是可见的。是这样吗??
  • yes.bcz 我需要在平板模式下显示两个片段。但是当我回到移动模式时,菜单项不应该在那里
  • 我猜这发生在真实设备上的可能性较小。但是,您应该覆盖 onConfigurationChanged 并调用 invalidateOptionsMenu()supportInvalidateOptionsMenu() 哪个合适
  • 首先我尝试为片段中的不同提议实现 onConfigurationChanged() 方法。但它没有调用,不知道为什么:(
  • 对于onConfigurationChanged 没有被调用,你必须在清单文件中设置android:configChanges="orientation|screenSize"

标签: android android-fragments android-actionbar menuitem fragment-backstack


【解决方案1】:

你需要像这样在fragment 1 中隐藏菜单组

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

它会调用onPrepareOptionsMenu,您可以在其中隐藏fragment2添加的菜单组

@Override
public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        menu.setGroupVisible(0, false);
}

【讨论】:

  • 我试过这个解决方案,但它隐藏了 mainactivity 的菜单。
  • 您需要将fragment's 菜单保存在单独的menu group 中,明白了吗? fragment1 fragment2fraagmentActivity 的菜单项必须位于不同的 menugroup
  • 是的,我也试过这个。首先,它似乎工作正常,但是一旦我从选项卡布局导航回(按 9)电话布局,该组就不会变得不可见。它显示该组到
  • 是的,它工作正常。但是当我从标签模式切换到移动模式时会出现问题
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
相关资源
最近更新 更多