我正在使用ActionBarSherlock库和片段。但是,在第二个片段出现后,我很难在屏幕上显示菜单。 这是一个非常简单的程序,有一个屏幕跟着另一个。我使用FragmentTransaction,每次都更换。我在每个片段中使用setHasOptionsMenu(true)。 onCreateOptionsMenu& onPrepareOptionsMenu正在被调用,但我的菜单有一个空白区域。我可以选择该区域,它似乎工作,但没有文字。 有任何想法吗? 片段代码:
public class MyListFragment extends SherlockListFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (menu.findItem(R.id.save) == null) {
menu.clear();
inflater.inflate(R.menu.new_menu, menu);
}
}
的活动:
public class MyMain extends SherlockFragmentActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportFragmentManager = getSupportFragmentManager();
handler = new Handler();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
片段代码
fragmentEntries.push(stackEntry);
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(contentId, fragment, fragmentName);
ft.commit();
答案 0 :(得分:0)
onCreateOptionsMenu只会按documentation ..
调用一次系统调用onCreateOptionsMenu()后,它会保留您填充的菜单实例,并且不会再次调用onCreateOptionsMenu(),除非由于某种原因菜单失效。但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态,而不是在活动生命周期中进行更改。
如果要根据活动生命周期中发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中执行此操作。此方法会将Menu对象传递给当前存在,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供onPrepareOptionsMenu()回调。)
答案 1 :(得分:0)
看起来这只是一个愚蠢的错误。我有一个带有图标的菜单(这是一个选择器)似乎模糊了文本。 我的测试也失败了,因为我正在使用具有相同ID的项目的菜单。