[Android] Instagram Style Navigation 구현 (2)

JunHyeong Lee·2022년 6월 21일

Android

목록 보기
3/4
post-thumbnail

이어서 Navigation 설정을 보겠다.

4. Navigation 설정

  1. ViewPager의 각 Page가 될 Fragments 생성
  2. 각 Fragment 의 View 설정
  3. 화면에 띄울 Fragment들을 Navigation에 적용
  • ViewPager 에 들어갈 Fragments
    - BaseViewPagerFragment 는 하나의 Navigation 을 담을 Fragment 이다.
private val fragments = listOf(
        BaseViewPagerFragment.newInstance(R.layout.content_category_base, R.id.navHostCategory),
        BaseViewPagerFragment.newInstance(R.layout.content_search_base, R.id.navHostSearch),
        BaseViewPagerFragment.newInstance(R.layout.content_home_base, R.id.navHostHome),
        BaseViewPagerFragment.newInstance(R.layout.content_my_base, R.id.navHostMy))
  • content_my_base.xml
    - nav_my 네비게이션을 가지고 있음을 확인할 수 있다.
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <fragment
        android:id="@+id/navHostMy"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBaseline_toBottomOf="parent"
        app:navGraph="@navigation/nav_my" />

</androidx.constraintlayout.widget.ConstraintLayout>
  • 화면에 띄울 Fragment 들

    nav_my.xml (+nav_home, nav_cateogry, nav_search)

5. 결과

- 영상 보기 순서

  • 첫번 째
    - home -> category -> my , backpressed 3번
    - bottomNavigation 아이템을 중복해서 선택하지 않았기 때문에 클릭한 순서대로 돌아감.
  • 두번 째
    - home -> category -> my -> category , backpressed 1번
    - category 를 중복해서 선택 했기 때문에 중복된 부분을 Stack 에서 제거함으로 backpressed 시 home 으로 이동.
  • 세번 째
    - home -> category -> category detail -> my , backpressed 3번
    - category detail 은 category navigation 에 존재하는 fragment 이다. startDestination 이 아닌 fragment 도 스택 관리가 같이 됨을 확인 할 수 있다.
profile
Android Developer

0개의 댓글