我有一個簡單的應用程序與選項菜單,它在片段的開始處發生變化。 問題是,除了第一次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