我刚刚开始开发一个应用程序,该应用程序将包含项目列表和每个项目的详细视图,因此我使用片段设置了不同的手机和平板电脑布局。还有一个导航抽屉,我希望菜单中的一个选项仅在详细视图片段在屏幕上时显示,并在导航抽屉打开时隐藏。所以,我这样做了:
- 主视图创建菜单。
- 详细视图片段添加了特定的详细视图选项(共享按钮,“action_share”)。
打开导航抽屉在导航抽屉片段的 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。