[Navigation/네비게이션] startDestination programmatically

2020. 6. 4. 15:17└ Android Architecture Component/Navigation

Android Jetpack 의 네비게이션 컴포넌트를 사용할 때 

startDestination을 동적으로 바꿔야 할 때가 있다 

그 방법에 대해서 알아보자 

 

먼저 코드 

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val navController = findNavController(R.id.my_nav_host_fragment)
        val navGraph = navController.navInflater.inflate(R.navigation.navigation)

        navGraph.startDestination = if(CONDITION) R.id.fragment_one else R.id.fragment_two
        
        navController.graph = navGraph
        
        ...
  }

 

  1. navigation xml 에서 app:startDestination을 지운다.
  2. activity xml 에서 <fragment> tag 안에 app:defatultNavHost = "true" 와 app:navGraph 를 지운다. 
  3. navController 를 통해 navGraph를 가져온뒤 
  4. navGraph의 startDestination 을 조건에 맞게 설정
  5. navController의 navGraph를 set해준다 

 

끝