2021.06.25 - [Android/AAC, MVVM] - [Android] Navigation 과 BottomNavigationView 연결
네비게이션 라이브러리 사용시
바텀네비게이션뷰와 연결하여 사용하다보면,
그 네비게이션뷰의 프래그먼트에서 또 다른 프래그먼트로 이동했을 때 바텀네비게이션뷰가 필요하지 않은 경우가 있다.
이 경우 OnDestinationChangedListener 를 활용하여 바텀네비게이션뷰를 숨길 수 있다.
1️⃣ 사용하기
2021.06.16 - [Android/AAC, MVVM] - [Android] Navigation 라이브러리 사용과 Safe Arg 로 데이터 통신
네비게이션 연결 부분은 위 글에서 다루었으므로 생략한다.
레이아웃 구조는 위와 같다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 네비게이션 연결
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
navController = navHostFragment.findNavController()
// 바텀 네비게이션 연결
binding.bottomNavi.setupWithNavController(navController)
navController.addOnDestinationChangedListener { _, destination, _ ->
// 바텀 네비게이션이 표시되는 Fragment
if(destination.id == R.id.bottomOneFragment || destination.id == R.id.bottomTwoFragment
|| destination.id == R.id.bottomThreeFragment || destination.id == R.id.oneFragment){
binding.bottomNavi.visibility = View.VISIBLE
}
// 바텀 네비게이션이 표시되지 않는 Fragment
else{
binding.bottomNavi.visibility = View.GONE
}
}
}
OnDestinationChangedListener를 사용하면 현재 navController의 대상에 따라
비즈니스 로직이나 UI 설정을 변경할 수 있다.
위와 같이 destination의 id 값을 비교하여 바텀네비게이션을 표시할 프래그먼트, 표시하지 않을 프래그먼트를 나눠준다.
oneFragment
조건에 등록되어 있는 oneFragment에서 바텀네비게이션뷰가 잘 보이는 것을 확인할 수 있으며
twoFragment
그 외의 프래그먼트에서는 사라진 것을 확인할 수 있다.
https://github.com/HanYeop/AndroidStudio-Practice2/tree/master/NavigationEx
참고
https://developer.android.com/guide/navigation/navigation-ui