【发布时间】:2015-12-18 06:32:38
【问题描述】:
我在这里尝试了各种帖子提供的很多答案,但对我没有任何帮助。
问题- 我有一个导航抽屉,它有 6 个片段,但只有一个活动。一切正常,直到我更改了抽屉中排名第一的片段。我想要在第一个片段中滑动标签。所以我使用了FragmentStatePagerAdapter。
-
每个片段都有自己的菜单以及 MainActivity 菜单。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Notify the system to allow an options menu for this fragment. setHasOptionsMenu(true); }然后像这样膨胀:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.story, menu); } 一切正常。但是当我访问导航抽屉中的其他片段时,它会在工具栏中显示重复的菜单。当我访问其他片段时,如果工具栏中有剩余空间,则会创建更多重复项。
Try 1:为了解决这个问题我最初使用:
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.story, menu);
}
有了这个我没有得到重复的菜单,但现在我看不到MainActivity menus。
试试 2:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
getActivity().invalidateOptionsMenu();
inflater.inflate(R.menu.story, menu);
}
有了这个,我得到了 Fragment 和 Activity 菜单,但是有重复项。
这应该很容易解决,但我没有找到解决方法。可能是我对生命周期的理解不够深入?
我的另一种方法- 在 Fragments 中实现所有菜单就可以了,但这应该是我们最后的选择。
解决方案 - 要维护两个菜单,我所要做的就是这个(非常简单的解决方案):
menu.clear();
inflater.inflate(R.menu.story, menu);
getActivity().getMenuInflater().inflate(R.menu.main, menu);
问题 2 第一个片段的 OnOptionsItemSelected 方法在其他片段中被调用。
【问题讨论】:
-
所以基本上你想要来自你的 activity_menu 文件的所有片段中的通用菜单项并从片段中休息,对吗?
-
在其他片段中,如果您不想要菜单,请为它们调用
setHasOptionsMenu(false);。 -
@PiyushGupta 我想要每个片段的菜单。
-
@Roon13 那么你的最后一个选项是最好的选择.. 实现菜单项[片段相关] + 所有片段中的共同点..
-
@Roon13 我再次阅读了您的问题。所以,在更改您的第一个片段以实现 FragmentPagerAdapter 之前,您的片段曾经并且必须正确显示菜单项,对吧?
标签: android android-fragments fragmentstatepageradapter