Панель действий, панель навигации и управление обратным стеком фрагментов

#java #android #android-fragments #fragment

#java #Android #android-фрагменты #фрагмент

Вопрос:

Я внедряю в свое приложение следующее руководство: Создание панели навигации.

Моя цель — реализовать следующее поведение:

  • Использование одного действия
  • 2 Фрагмента: Фрагмент всегда прикреплен. Фрагмент B прикрепляется при нажатии кнопки
  • Когда фрагмент B виден, кнопка «Домой» на панели действий представляет собой стрелку назад, которая удаляет фрагмент B из фонового стека
  • Когда фрагмент B не виден, кнопка панели действий «Главная» отображает макет ящика.

Как я могу реализовать это преобразование кнопки «Домой»?

Спасибо

Ответ №1:

В классе ActionBar есть несколько методов, которые могут помочь вам:

Следующий вызов установит значок кнопки «Домой» на значок «назад».

 getActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP);
  

Поскольку действие MenuItem определяется методом onOptionsItemSelected(), вам также необходимо переопределить его и проверить, нажимаете ли вы кнопку home или нет. На самом деле, панель навигации будет отображаться снова, поэтому вы захотите вернуть true из этого метода, чтобы предотвратить повторное отображение панели.

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
     if (item.getId() == android.R.id.home) {
          // do what you want here
          return true; // prevent the drawer to draw again;
     }
     return super.onOptionsItemSelected(item);
}
  

Чтобы вернуть кнопке home «поведение» по умолчанию, используйте следующий вызов:

 getActionBar().setDisplayShowHomeEnabled(true);
  

Последний шаг — проверить, является ли ваш текущий фрагмент FragmentA (который активирует панель, отображающую фрагмент навигации) или FragmentB (который этого не делает). Возможно, вы захотите добавить глобальную логическую переменную для их выполнения и проверить положение элемента навигации.

Я включил сюда пример, пожалуйста, ознакомьтесь:

Пример панели навигации

Надеюсь, это поможет.