我現在正在用這個撓我的腦袋....我有一個ActionBarActivity
加載一個初始Fragment
- 原始菜單在活動內膨脹。現在,我有一個導航欄,當選擇一個項目時,加載一個不同的片段並將其添加到後臺堆棧中。與片段/工具欄返回導航
當我做到這一點,有一對夫婦的事情,我想設置:
- 將家裏高達指標
- 從主要活動
- 設置有選項無效選項菜單真實的片段
- 確保了指標正確導航回原來的片段
Someth比較奇怪的是正在進行 - 向上指示符只出現一次,並不像後退按鈕一樣,儘管我已經使新菜單失效並使其充滿,但新菜單將附加到到原始活動菜單。
編輯:好的我解決了附加問題 - 忘記在onCreateOptionsMenu
方法中添加menu.clear()
。
我的抽屜式導航欄佈局有onClick
方法,所有菜單項可能會觸發另一片段的負載:
public void navItemClick(View view) {
switch (view.getId()) {
case R.id.ripSMS:
mNavigationDrawer.toggleHome(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction mTrans = getSupportFragmentManager().beginTransaction();
mTrans.replace(R.id.voiceover_frame_layout,new MessageFragment(),"main_ui")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack("msg").commit();
break;
case R.id.ripEmail:
break;
case R.id.ripSettings:
break;
}
mNavigationDrawer.closeDrawer();
}
toggleHome:
public void toggleHome(boolean show) {
mDrawerToggle.setDrawerIndicatorEnabled(show);
if (!show) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
一旦項目被觸發onCreate
含有無效和hasOptions代碼:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}
onCreateOptionsMenu
然後膨脹另一個菜單佈局(包含一個稱爲設置的單個項目)。
如上所述,這只是部分工作一次 - 我第一次使用該項目來加載片段,我得到後面的圖標,但它也不工作(這是設置在onOptionsItemSelected
檢查家庭項目按 - 它什麼也沒做)。當我按下後退按鈕時,它將我帶回正確的位置。但是,如果我導航回來,即使代碼運行通過onCreate
,現在更長的後退箭頭也會顯示!
這只是其中很多的奮鬥之後爲我工作的解決方案。感謝分享! 調用'toggle.syncState();'是一個關鍵因素,否則漢堡菜單一旦返回就不可見。 – 2017-03-30 22:50:58