隐藏操作栏菜单项,手机与平板电脑

时间:2013-11-06 10:19:15

标签: android android-actionbar

我刚刚开始开发一个应用程序,其中包含项目列表和每个项目的详细视图,因此我使用片段设置了不同的手机和平板电脑布局。还有一个导航抽屉,我希望菜单中的一个选项只显示详细视图片段在屏幕上的时间,并在导航抽屉打开时隐藏。所以,我这样做了:

  1. 主视图创建菜单。
  2. 详细信息视图片段添加了特定的详细信息视图选项(共享按钮,“action_share”)。
  3. 打开导航抽屉在导航抽屉片段中的onCreateOptionsMenu中运行:

    if (menu.findItem(R.id.action_share) != null)
    {
        MenuItem item = menu.findItem(R.id.action_share);
        item.setVisible(false);
        getActivity().invalidateOptionsMenu();
        Toast.makeText(getActivity(), "This works on a tablet.", Toast.LENGTH_SHORT).show();
    }
    else
    {
       Toast.makeText(getActivity(), "...but not on a phone.", Toast.LENGTH_SHORT).show();
    }
    
  4. 这在平板电脑上按预期工作,但在手机上未检测到action_share菜单项。布局不同如下。

    电话:

    <DrawerLayout>
        <FrameLayout> <!-- list and detail fragments are swapped in here -->
        <fragment> <!-- navigation drawer -->
    </DrawerLayout>
    

    片剂:

    <DrawerLayout>
       <LinearLayout>
           <fragment> <!-- list fragment -->
           <fragment> <!-- detail fragment -->
       </LinearLayout>
       <fragment> <!-- navigation drawer -->
    </DrawerLayout>
    

    层次结构查看器为每个显示略有不同的排列。

    电话:

    LinearLayout -> ActionBarContainer -> ActionBarView -> ActionMenuView -> ActionMenuItemView (action_share)

    片剂:

    ActionBarOverlayLayout -> LinearLayout -> ActionBarContainer -> ActionBarView -> ActionMenuView -> ActionMenuItemView (action_share)

    那么,任何人都可以建议为什么在一个布局而不是另一个布局中检测到action_share菜单项,以及我可以做些什么来解决这个问题?

    编辑:

    进一步的调查表明menu.findItem()没有拿起手机上的action_share菜单项,但findViewById()是,这很奇怪。当然,我无法对后者做任何事情,因为我无法将其转换为MenuItem。

1 个答案:

答案 0 :(得分:0)

查找和切换共享按钮的可见性状态的代码似乎只有在放入onPrepareOptionsMenu而不是onCreateOptionsMenu时才有效。这并不能解释为什么平板电脑布局不会受到影响,但现在至少两种布局都可以正常运行,因为我已经添加了onPrepareOptionsMenu并将相关代码移到了它上面。