onPrepareOptionsMenu不会在片段中调用

@Override public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){ Log.d("Does", "get called"); inflater.inflate(R.menu.menuItem, menu); super.onCreateOptionsMenu(menu,inflater); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); getActivity().invalidateOptionsMenu(); MenuItem filter = menu.findItem(R.id.section); filter.setVisible(false); } 

我试图加载我的菜单中的碎片,并获得loaed,但onPrepareOptionsMenu没有得到调用,在那里我需要隐藏一些菜单项。

更新:

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } 

我在我的onCreate()方法中调用setHasOptionsMenu(true)

Related of "onPrepareOptionsMenu不会在片段中调用"

在Android 3.0及更高版本中,菜单项出现在操作栏中时,选项菜单始终处于打开状态。 当一个事件发生时,你想要执行一个菜单更新,你必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()。

http://developer.android.com/guide/topics/ui/menus.html

要更改特定的项目,请使用: menu.findItem(R.id.your_item_id)

可能太迟了,但是我也遇到了同样的问题,解决scheme非常简单。 只需从片段中调用getActivity()。invalidateOptionsMenu()。 这将调用onPrepareOptionsMenu,在这里你可以像这样控制你的项目的可见性:menu.findItem(R.id.youritem).setVisible(true / false); 希望有所帮助!

你需要做两件事情。 第1步:在片段OnCreateView添加setHasOptionsMenu(true);

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment setHasOptionsMenu(true); return inflater.inflate(R.layout.fragment_user_settings, container, false); } 

第2步:您需要添加getActivity()。invalidateOptionsMenu(); 在你的片段OnViewCreated。 或者在更改碎片时在mainActivity中。

这对我有用。

 public class ContentFragment extends android.support.v4.app.Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.content_frame,container,false); setHasOptionsMenu(true); return v; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.note_menu,menu); super.onCreateOptionsMenu(menu, inflater); } }