我有一个带有选项菜单的简单应用程序,它在片段开始时发生变化。问题是,在开始时,除了第一个 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() 方法中,因为它在第一个片段开始时工作正常。但我不知道,从哪里开始解决问题。我需要完全替换视图中的片段。