경험의 기록

2021.06.25 - [Android/AAC, MVVM] - [Android] Navigation 과 BottomNavigationView 연결

 

[Android] Navigation 과 BottomNavigationView 연결

2021.06.16 - [안드로이드/AAC, MVVM] - [Android] Navigation 라이브러리 사용과 Safe Arg 로 데이터 통신 [Android] Navigation 라이브러리 사용과 Safe Arg 로 데이터 통신 2021.04.10 - [안드로이드/AAC, MVVM..

hanyeop.tistory.com

네비게이션 라이브러리 사용시

바텀네비게이션뷰와 연결하여 사용하다보면,

그 네비게이션뷰의 프래그먼트에서 또 다른 프래그먼트로 이동했을 때 바텀네비게이션뷰가 필요하지 않은 경우가 있다.

 

이 경우 OnDestinationChangedListener 를 활용하여 바텀네비게이션뷰를 숨길 수 있다.

 


1️⃣ 사용하기

2021.06.16 - [Android/AAC, MVVM] - [Android] Navigation 라이브러리 사용과 Safe Arg 로 데이터 통신

 

[Android] Navigation 라이브러리 사용과 Safe Arg 로 데이터 통신

2021.04.10 - [안드로이드/AAC, MVVM] - [Android] JetPack Navigation 사용하여 Fragment 관리하기 [Android] JetPack Navigation 사용하여 Fragment 관리하기 developer.android.com/guide/navigation/navigatio..

hanyeop.tistory.com

네비게이션 연결 부분은 위 글에서 다루었으므로 생략한다.

 

 

레이아웃 구조는 위와 같다.

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

 

GitHub - HanYeop/AndroidStudio-Practice2: (2021.05.20~) 안드로이드 학습 내용 저장소

(2021.05.20~) 안드로이드 학습 내용 저장소. Contribute to HanYeop/AndroidStudio-Practice2 development by creating an account on GitHub.

github.com

 

 

 

참고

https://developer.android.com/guide/navigation/navigation-ui

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading