菜单中的碎片不显示

我对我的最后一个问题有很有帮助的提示,我希望这次不会有所不同:)首先,让我解释一下情况。 我有一个有2个片段的活动。 对于每个片段我有一个XML菜单布局,第一个有四个菜单项,第二个只有一个。 现在首先加载具有四个菜单条目的片段。 在我设置的onCreate方法

this.setHasOptionsMenu(true); 

onCreateOptionsMenu方法

 @Override public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_fragshow, menu); } 

xml文件如下所示:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_refresh" android:icon="@drawable/ic_action_search" android:title="Refresh" android:visible="true" android:showAsAction="ifRoom|withText" /> <item android:id="@+id/menu_clearall" android:icon="@drawable/ic_action_search" android:title="Clear" android:visible="true" android:showAsAction="ifRoom|withText" /> <item android:id="@+id/menu_addcontent" android:icon="@drawable/ic_action_search" android:title="Add Content" android:visible="true" android:showAsAction="ifRoom|withText" /> <item android:id="@+id/menu_newlist" android:icon="@drawable/ic_action_search" android:title="New List" android:visible="true" android:showAsAction="ifRoom|withText" /> </menu> 

这工作正常。 所有菜单项都在那里,我可以点击它们并作出回应。 现在当我点击“添加内容”菜单时,另一个片段被加载。 在那里我也设置

 this.setHasOptionsMenu(true); 

onCreateOptionsMenu方法

 @Override public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { Log.i("FragCreateList","onCreateOptionsMenu called"); super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_fragcreatelist, menu); } 

xml文件

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_editdone" android:icon="@drawable/ic_action_search" android:title="Edit Done" android:visible="true" android:showAsAction="ifRoom|withText" /> </menu> 

但在新的片段中,我看不到任何菜单项。 无论是在操作栏中,还是在按下硬件菜单button时。 在前一个片段中,两个菜单项在操作栏中,其余两个在按下硬件button时出现。 但是这里没有显示。 我得到了onCreateOptionsMenu方法调用的logcat消息,但没有任何反应。 (我甚至打电话给我的(空)onPrepareOptionsMenu方法,这应该在菜单显示之前调用,仍然没有)任何线索可能是错误的? 调用invalidateOptionsMenu不会做任何事情。 此外,我不知道要调用哪一个,因为有一个getActivity()。invalidateOptionsMenu和一个getFragmentManager()。invalidateOptionsMenu …在此先感谢。

编辑:

 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" /> 

我在onCreateView中添加了setHasOptionsMenu(true) ,它工作正常

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); return inflater.inflate(R.layout.my_example_fragment, container, false); } 

在充气菜单之前使用menu.clear()。

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.clear(); inflater.inflate(R.menu.mnulayout, menu); } 

我有同样的问题。 我通过在应用于myApp上下文的项目中使用showAsAction来修复它:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_refresh" android:icon="@drawable/ic_refresh" android:title="refresh" android:visible="true" myapp:showAsAction="ifRoom|withText"/> </menu> 

对不起,对于你来说已经太迟了,但对其他人来说可能是有用的。

这是因为你的设备有硬件菜单button。 因此,variables“sHasPermanentMenuKey”的值在ViewConfiguration hasPermanentMenuKey()中为真。 您必须使用reflection将此variables的值设置为false。 例:

 // this method force showing menu button in device with hardware menu button private void showOverflowMenu(FragmentActivity activity) { try { ViewConfiguration config = ViewConfiguration.get(activity); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } } 

注意:在片段的onCreate()方法中不要使用onCreate()方法。

这实际上适用于我,也可能是您的解决scheme。

 @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); } 

在分段注册选项/上下文菜单时,通常需要等待onActivityCreated()调用,以确保有一个活动将菜单绑定到。 尝试在这里build议的修复,看看是否有帮助:

来自ListFragment的上下文菜单

尝试改变onCreateOptionsMenu片段onPrepareOptionsMenu,我有同样的问题,据我记得这解决了我…

你的活动需要扩展ActionBarActivity 。 您可能只有一个扩展活动。 强壮的文字

对于片段类,为了让您看到菜单,请在onCreateView()方法或onCreateAcivity()方法中添加sethasoptionsmenu(true)。 但是我把它加到了onCreateView()方法中。 希望它可以帮助别人

首先你的片段必须在onCreate

  setHasOptionsMenu(true); 

然后你必须检查你的活动不要有NoActionBar喜欢主题它的一些棘手,但如果你的活动有这个主题并不重要,你调用setHasOptionsMenu(true)你的片段不会画她

因为上面没有任何build议解决了我的问题,所以很晚。 我的设备(2.3.5)在选项菜单中遇到了一个很糟糕的时间问题,我不得不采取不同的路线,并使用活动的inflater在onprepare部分创build菜单:

 @Override public void onPrepareOptionsMenu(Menu menu) { if (Build.VERSION.SDK_INT < 11) { menu.clear(); getActivity().getMenuInflater().inflate(R.menu.message_thread, menu); }