Single Activity и BottomNavigationView

Надумываю перейти на Single Activity style. Возникают следующие вопросы:

  1. Как быть с DrawerMenu / ToolBar / BottomNavigatioView

Например, есть вложенные фрагменты в которых мы должны показывать в место бургера кнопку назад и в этом фрагменте не должны быть никаких BottomNavigationView и DrawerMenu.

Как они скрываются? Может у Navigation component или у чего то еще есть написанные методы для реализации этого поведения? Или все же нужно подписаться на "FragmentChangeListener" и самому рулить всеми состояниями "общих" контролов (BottomNavigationView & DrawerMenu). + еще где то нужно показывать Toolbar, где-то нет, еще в каком то фрагменте он может быть совсем других форм и содержания...

  1. Стоит ли оно того?

Ответы (1 шт):

Автор решения: Sergei Buvaka

Никаких общих компонентов нет на эту тему. Вы должны сами "рулить" всем этим.

Вы можете создать какой-то интерфейс вроде такого:

interface ToolBarListener {

    void setToolbar(toolbarTitle: String)
    // так же могут быть и другие методы вроде этого. 
}

реализовать его в Activity и передавать его экземпляр в каждый фрагмент и когда фрагмент инициализируется то задает состояние Activity.

Если состояние намного более сложное чем просто тайтл или наличие бургера, то я бы создал штуку вроде такой:

interface ActivityStateListener {

    void setActivityState(state: ActivityState)
    // так же могут быть и другие методы вроде этого. 
}

class ActivityState {

     String toolbarTitle;
     boolean isHamburgerVisible;
     boolean isBottomNavVisisble;
     boolean isLockNavDrawer;
     // и так далее
}

Стоит ли? Ну это вопрос субъективный. С фрагментами работать легче, но сказать, что вы получите какой-то кардинальный прирост, думаю что нет. Если ваш проект не большой и вам хочется получить это удобство, то может и стоит.

→ Ссылка