菜单中的碎片不显示
我对我的最后一个问题有很有帮助的提示,我希望这次不会有所不同:)首先,让我解释一下情况。 我有一个有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); }
- 嘲笑在Android中效果最好的库/框架?
- getExternalStorageDirectory不起作用
- 文本到语音(TTS) – 安卓
- 为什么我的onItemSelectedListener不在ListView中调用?
- 我如何在AndroidManifest.xml文件中访问BuildConfig值?
- Android,并在TableRow的TextView中显示多行文字
- Android Paint:.measureText()vs .getTextBounds()
- 面向Android的Facebook SDK 4 – 如何以编程方式注销
- ListView与OnItemClickListener android