我有一个简单的应用程序与选项菜单,它在片段的开始处发生变化。 问题是,除了第一次onCreateOptionsMenu()调用两次 - onCreate()内和onResume()后,开始的任何片段。 在onCreate()我通过setHasOptionsMenu(true)将其称为manualy,但在onResume()之后它不应该发生。 此外,这只发生在第一个片段开始后。onCreateOptionsMenu()在片段中调用两次
这里是碱基片段代码:
class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle clicks
return true;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Create a menu
super.onCreateOptionsMenu(menu, inflater);
}
}
而在活动中的变化的代码片段:
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
该示例不使用像ActionBarSherlock,仅SupportLibrary任何外部库。 我想,问题出在FragmentTransaction的replace()方法,因为它在第一个片段开始时工作正常。但我不知道,从哪里开始解决问题。我需要在View中完全替换片段。
您正在使用哪款手机?如果手机有一个专门的菜单按钮,onCreateOptionsMenu将仅在用户点击该按钮时被调用。添加它不是强制性的,setHasOptionsMenu(true)应该调用onCreateOptionsMenu。它只是通知框架,当填充菜单时片段想要参与。 – prijupaul 2013-09-25 06:08:08
当我遇到同样的问题时,OP甚至不会让我添加/编辑问题。我知道关于Menu的基本内容,这个问题与OP描述的一样很奇怪。 编辑:我使用嵌套片段 – Zyoo 2013-09-25 08:35:58
@prijupaul它实际上只适用于前蜂窝版本。在调用setHasOptionsMenu()之后,在Honeycomb和稍后onCreateOptionsMenu将立即调用。 – bvitaliyg 2013-09-25 15:10:46