我有一个简单的应用程序,带有选项菜单,并在片段开始时更改菜单。 问题是,在除第一个之外的任何片段开始时,onCreateOptionsMenu()都会被调用两次——在onCreate()中和在onResume()之后。 在onCreate()中,我通过setHasOptionsMenu(true)手动调用它,但在onResume()之后就不应该发生这种情况。 此外,这只发生在第一个片段启动之后。
以下是基础片段代码:
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);
}
}
在Activity中更改片段的代码:
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
这个示例不使用任何外部库,如ActionBarSherlock,只使用SupportLibrary。 我猜问题在FragmentTransaction的replace()方法中,因为当第一个fragment启动时它运行得很好。但我不知道从哪里开始解决这个问题。我需要确切地在View中替换fragment。