[Android] BottomNavigationView 탭 아이콘 업데이트 에러 해결

김민주·2022년 11월 30일
0

Android

목록 보기
16/21

문제점

BottomNavigationView 로 화면 전환을 하고 있었는데
한 메뉴(Frag1)에서 다른 프래그먼트(Frag1-1)를 띄울 경우 다른 하단바 메뉴(Frag2)로 돌렸을 때,
프래그먼트의 전환은 잘 작동하지만 하단바의 아이콘이 움직이지 않았다 !

탭의 아이콘이 Frag2 탭에서 갱신되지 않고 머무는 문제가 발생하였다.

하나의 프래그먼트안(Frag1)에서 다른 프래그먼트(Frag1-1)를 호출하는 경우,

네비게이션의 아이템의 메뉴에서 하위 프래그먼트(Frag1-1)는 설정되어있지 않기 때문에 발생하는 오류인듯


🗝️ 1.

popBackStack 함수를 이용하면 하단바의 아이콘은 잘 작동하지만 프래그먼트를 백스택에서 pop해주었기 때문에 띄운 프래그먼트가 pop되고 기존 프래그먼트가 표출되기 때문에 원하지 않는 나에게 결과를 주었다..


❗하단바를 이동해도 결과값은 항상 같았으면 하는 것이 목표!


🗝️ 2.

BottomNavigationView 를 커스텀하여 setOnItemClickListener 에서 onNavDestinationSelected 함수로 현재 클릭된 메뉴 id를 정확하게 넘겨줘서 업데이트 하도록 하자🤗

공식문서 내용

NavigationUI는 대상을 메뉴 기반 UI 구성요소에 연결하기 위한 도우미도 제공한다.
NavigationUI에는 연결된 대상을 호스팅하는 NavController와 함께 MenuItem을 받는 도우미 메서드 onNavDestinationSelected()가 포함되어있다.

MenuItem의 id가 대상의 id와 일치하면 NavController가 그 대상으로 이동한다.

NavigationUI는 하단 탐색도 처리할 수 있다.


🗝️ 해결

binding.bottomNavView.apply {
            setupWithNavController(navController) //컨트롤러 설정
            isItemHorizontalTranslationEnabled
           
            setOnItemSelectedListener { item ->
                NavigationUI.onNavDestinationSelected(item, navController)
                true
            }
        }

ItemSelectedListener 에서 onNavDestinationSelected()를 호출하고 하단 탐색 메뉴에서 선택된 항목을 자동으로 업데이트한다.


profile
𝐃𝐨𝐧'𝐭 𝐛𝐞 𝐚 𝐩𝐫𝐨𝐜𝐫𝐚𝐬𝐭𝐢𝐧𝐚𝐭𝐨𝐫💫

0개의 댓글