【问题标题】:Hide action bar menu items from invisible fragment从不可见的片段中隐藏操作栏菜单项
【发布时间】:2011-12-20 19:06:10
【问题描述】:

我在我的活动视图 xml 中使用 3 个 FrameLayouts,我在其中动态插入不同的片段。许多这些片段贡献了 ActionBar MenuItems。现在我有一种情况,我隐藏了一个 FrameLayout(将可见性设置为 View.GONE),因此其中的片段变得不可见。但是它仍然贡献了菜单项,因为片段似乎没有被暂停或任何东西,所以我似乎无法调用主动隐藏操作栏项的方法。

作为一种解决方案,当我将 FrameLayout 切换为不可见时,我现在只需将一个片段插入到没有菜单项的 FrameLayout 中。虽然这行得通,但对我来说感觉就像一个黑客。隐藏任何操作栏菜单项的正确方法是什么?如果我只是隐藏它所在的布局,片段会进入什么状态?

我正在使用兼容性库 r6 来做这一切,以防万一。

【问题讨论】:

    标签: android


    【解决方案1】:

    您应该能够在您的FragmentActivity 派生活动中调用invalidateOptionsMenu(),这将导致再次调用所有片段onCreateOptionsMenu() 方法,并且您可以隐藏任何您不想再显示的菜单项.

    【讨论】:

    • 在我的情况下,这不是一个真正的选择,因为一个 Activity 会动态处理很多片段。
    • 也为我工作。快速提示:要与兼容性库一起使用,请使用 ActivityCompat 类 link
    【解决方案2】:

    我有一个类似的问题 - 一个有两个 FrameLayouts 的 Activity:

  • 在水平屏幕旋转上都可见,
  • 在垂直屏幕旋转上只有一个可见。

    两者都包含带有一些菜单项的片段。从水平视图切换到垂直视图后,两个片段中的菜单项都可见。我已经通过使用 onCreate() 方法中的 popBackStack() 功能解决了这个问题,如下面的代码所示:

    getSupportFragmentManager().popBackStack();
    
    FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
    tr.replace(getListContainer(), listFragment);
    if (detailPanelVisible) {
        Fragment detailFragment = createDetailFragment();
        tr.replace(getDetailContainer(), detailFragment);
    }
    tr.addToBackStack(null);
    tr.commit();
    

    也许这可以为您完成工作。

  • 【讨论】:

      猜你喜欢
      • 2014-06-04
      • 1970-01-01
      • 2013-12-18
      • 2016-09-03
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多