마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

BottomNavigation Navigation

0 추천

Home Fragment -> Home버튼 클릭 -> Home2 Fragment -> (bottom)DashBoard Fragment -> (bottom)Home Fragement

이런식으로 이동하면 bottom 아이콘이 적용이 안됩니다....

Android Studio 바텀네비게이션 기본 프로젝트에 

home2 Fragment action만 추가해준 상태입니다...

어찌 해결해야하나요...

dkssudgktpdy (520 포인트) 님이 2022년 10월 3일 질문

1개의 답변

0 추천
 
채택된 답변

일단 네비게이션의 보편적인 구성은 BottomNavigationView에 있는 메뉴에 해당하는 프레그먼트는탑레벨화면이므로 백아이콘이 없고, 여기에서 한단계 더 들어간 프레그먼트는 툴바에 백아이콘이 존재하지만 BottomNavigationView는 보이지 않는 형태입니다. 따라서 아주 특별한 이유가 없다면 HomeFragment2에서는 BottomNavigationView를 보이지 않게 만드는게 좋습니다. 이래야 네이게이션이 꼬이거나 하는 특이한 상황을 미연에 방지할 수 있습니다.

navController.addOnDestinationChangedListener { _, destination, _ ->
    val isTopLevelScreen = destination.id in appBarConfiguration.topLevelDestinations
    navView.isVisible = isTopLevelScreen
}

안드로이드 스튜디오에서 만들어주는 프로젝트에는 툴바에 대한 처리가 빠져있어서 툴바에 있는 백아이콘을 눌러도 아무 반응이 없기 때문에 아래와 같이 onSupportNavigateUp 을 오버라이드해 주세요.

override fun onSupportNavigateUp(): Boolean {
        return (NavigationUI.navigateUp(navController, appBarConfiguration)
                || super.onSupportNavigateUp())
    }

그리고 또 다른 문제의 원인은 Home, Dashboard, Nofications는 모두 최상위 메뉴라서 이동시에는 백스택에 HomeFragemtn2와 같은 프레그먼트가 존재하면 안됩니다. 따라서 Home2Fragment에 BottomNavigationView가 필요하다면 최상위메뉴를 선택할 때 백스택을 클리어되어야 겠죠. 잘 생각해 보시면 Home2Fragment는 HomeFragment의 하위 화면인데 Dashboard로 이동했을 때도 남아 있는게 자연스럽지 않을 겁니다.

따라서 제가 앞서 말씀드린 일반적인 네비게이션 구성을 따르는 것이 문제를 최소화할 수 있는 방법이며, 커스텀된 동작을 원하신다면, Navigation Component를 분석하셔서 추가적인 코드를 작성하셔야 할 것 같습니다.

spark (228,010 포인트) 님이 2022년 10월 3일 답변
dkssudgktpdy님이 2022년 10월 3일 채택됨
제가 생각했던 안되는 이유가 어렴풋이 맞는것같군요..ㅎ
정말 감사합니다 ㅎㅎ
한가지만 더 여쭙자면 home2가 살아있게 커스텀을 하는건 좋지 않은 흐름이라는 거로 이해해도 될까요??
좋지 않다기 보다는 그렇게 할 이유가 분명하지 않다면 권장하지 않는다는 겁니다.
...