팀 프로젝트를 하다가
기존에 로그인이 됐던 유저인지 처음 로그인 하는 유저인지
체크해서 로그인 화면으로 이동시킬지 자동으로 메인화면으로 이동하게 할지 체크하고 이동시켜주는
기능이 필요했다.
해당 프로젝트에서는 Jetpack navigation 을 사용하고 있었는데 위 동작을 정상적으로 보여주려면
startDestination 을 상황에 맞게 새로 설정해주는게 필요했다.
일단 해당 기능이 필요한 액티비티에서
lateinit var navController : NavController
네비게이션 동작을 컨트롤 해줄 NavController 을 선언해주자.
그리고 onCreate 에
val navHostFragment = supportFragmentManager.findFragmentById(R.id.join_nav_host) as NavHostFragment
navController = navHostFragment.navController
이렇게 네비게이션으로 보여줄 화면이 나오는 fragment 뷰의 id인 join_nav_host 를 적어서 해당 뷰의 컨트롤러를 가져와
navController 으로 컨트롤 할 수 있게 적어준다.
* navHost 마다 자체 Navcontroller가 존재한다.
<FrameLayout
android:id="@+id/join_fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<fragment
android:id="@+id/join_nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/join_nav_graph">
</fragment>
</FrameLayout>
view를 만들어줬다.
그리고 상황에 맞게 네비게이션 그래프를 설정해주는 함수도 만들어줬다.
private fun setNavGraph(isAlreadyLogin: Boolean) {
val navGraph = navController.navInflater.inflate(R.navigation.join_nav_graph)
if (isAlreadyLogin) {
val feedIntent = Intent(context, FeedActivity::class.java)
startActivity(feedIntent)
} else navGraph.setStartDestination(R.id.joinTypeFragment)
navController.setGraph(navGraph, null) //navController에 graph 설정
}
1. 컨트롤러에 어떤 네비게이션 graph 로 view를 이동시켜줄지 설정하고
2. 이미 로그인 했던 유저인지 로그인하지 않았던 유저인지 boolean 변수로 받아오고
3. 해당 값에 따라서 메인화면으로 이동할지
4. 가입화면으로 이동할지 로직을 작성했다.
이렇게 사용하면 필요한 상황마다 처음으로 보여줄 화면이 달라져야할때
적절하게 사용할 수 있다.
반응형
'Android' 카테고리의 다른 글
MockK 를 사용해서 테스트 코드를 적어보자 (2) | 2023.05.14 |
---|---|
android 12 블루투스 대응 (0) | 2023.04.06 |
Navigation Component 에서 그래프 여러개 관리하기 (0) | 2022.12.11 |
멀티모듈로 배포할때 파이어베이스 관련 이슈 (0) | 2022.11.06 |
안드로이드 Paging 3 (0) | 2022.07.24 |
MVVM 에서의 에러처리 전략 (0) | 2022.07.19 |
InverseBindingAdapter 에 대해 (0) | 2022.03.28 |
BindingAdapter에 대해서 (0) | 2022.03.27 |