Я сейчас царапаю голову этим. У меня есть ActionBarActivity
, который загружает начальный Fragment
- исходное меню завышено в рамках действия. Теперь у меня есть панель навигации, которая, когда выбран элемент, загружает другой фрагмент и добавляет его в заднюю часть.Назад навигация с фрагментами/панелью инструментов
Когда я делаю это, есть несколько вещей, которые я хочу задать:
- Установите дом, как на индикаторе
- Аннулируйте меню опций от основной деятельности
- Набор имеет опции верно для фрагмента
- Убедитесь, что индикатор вверх правильно переходит обратно к первоначальному Фрагмент
Someth довольно странно: индикатор вверх появляется только один раз и не ведет себя как кнопка «назад», и хотя я сделал недействительным и раздул новое меню, новое меню получает добавлено в исходное меню «Активность».
EDIT: Ok Я решен вопрос добавляемого - забыл добавить menu.clear()
в методе onCreateOptionsMenu
.
Моя раскладка панели навигации имеет 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
содержит Invalidate и код hasOptions:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}
Затем onCreateOptionsMenu
раздувает другой макет меню (содержит один элемент, называемый настройками).
Как уже упоминалось, это только частично работает один раз - в первый раз, когда я использую элемент для загрузки фрагмента, я получаю обратную иконку, но она также не работает (это установлено в onOptionsItemSelected
, чтобы проверить, нажата ли домашняя страница - это ничего не делает). Когда я нажимаю кнопку «Назад», он возвращает меня в нужное место. Однако, если я вернусь назад, стрелка назад теперь длиннее, даже если код проходит через onCreate
!
Это единственное решение, которое работает для меня после того, как много борьбы. Спасибо, что поделился! Вызов 'toggle.syncState();' был ключевым фактором, поскольку в противном случае меню гамбургера не будет видно, как только вы вернетесь. –