1

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

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

这在平板电脑上按预期工作,但在手机上未检测到 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。

4

1 回答 1

0

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

于 2013-11-07T17:27:16.060 回答