Jetpack navigation startDestination 동적으로 설정

나고수·2022년 5월 22일
0

1일1공부

목록 보기
43/68
post-custom-banner

참고

상황 : 로그인이 되어 있을때, 되어있지 않을때를 구분해서 시작 페이지를 다르게 보여주고 싶음.

//MainActivty의 onCreate() 
//FragmentContainerView를 사용하여 NavHostFragment를 만들 때 
//또는 FragmentTransaction을 통해 NavHostFragment를 활동에 수동으로 추가할 경우 
//Navigation.findNavController(Activity, @IdRes int)를 통해 
//activity 의 onCreate()에서 NavController를 검색하려고 하면 실패합니다. 
//대신 NavHostFragment에서 직접 NavController를 검색해야 합니다.
val navHostFragment =
            supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
        navController = navHostFragment.navController
//NavController -> NavHost마다 자체 NavController가 있음. 

private fun setNavGraph(isAlreadyLogin: Boolean) {
        val navGraph = navController.navInflater.inflate(R.navigation.nav_graph) // app:navGraph="@navigation/nav_graph" 로 설정했던 것
        if (isAlreadyLogin) navGraph.setStartDestination(R.id.mapFragment) //setStartDestination 설정
        else navGraph.setStartDestination(R.id.signInFragment)
        navController.setGraph(navGraph, null) //navController에 graph 설정
    }
//activity_main.xml
<androidx.fragment.app.FragmentContainerView
	android:id="@+id/nav_host_fragment"
	android:name="androidx.navigation.fragment.NavHostFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:defaultNavHost="true" 👈 하나의 navHost에는 해놔도 괜찮은듯. 두개이상의 navHost에서 중복으로 지정 x
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintLeft_toLeftOf="parent"
  app:layout_constraintRight_toRightOf="parent"
  app:layout_constraintTop_toTopOf="parent" />
//nav_graph.xml
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph">
👆 app:startDestination 설정 xx
</navigation>
profile
되고싶다
post-custom-banner

0개의 댓글