【发布时间】:2012-08-18 21:25:16
【问题描述】:
我的上一个问题得到了非常有用的提示,我希望这次不会有所不同:) 首先,让我解释一下情况。我有一个包含 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>
但在新片段中,我看不到任何菜单项。既不是在操作栏中,也不是当我按下硬件菜单按钮时。在前一个片段中,两个菜单项在操作栏中,其余两个在按下硬件按钮时出现。但是这里什么都没有显示。我收到调用 onCreateOptionsMenu 方法的 logcat 消息,但没有任何反应。 (我什至接到了对我的(空)onPrepareOptionsMenu 方法的调用,该方法应该在菜单显示之前调用,仍然没有)任何线索可能是错误的?调用 invalidateOptionsMenu 没有任何作用。此外,我不知道该调用哪一个,因为有一个 getActivity().invalidateOptionsMenu 和一个 getFragmentManager().invalidateOptionsMenu... 提前致谢。
编辑:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
【问题讨论】:
-
从答案看来,这似乎是由很多事情引起的。我遇到了这个问题,因为我使用的是 FragmentActivity 而不是 AppCompatActivity,而且我一更改它就可以工作
标签: android android-fragments android-menu