코틀린+안드로이드

navigation jetpack

으누아빠 2020. 7. 18. 00:53
반응형

navigation jetpack

  1. build.gradle 추가
dependencies {
  def nav_version = "2.3.0-rc01"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
  1. 프로젝트 창에서 마우스 오른쪽 버튼으로 res 디렉터리를 클릭하고 New > Android Resource Directory을 선택합 New Resource Directory 대화상자가 나타남
  2. Directory name 필드에 'navigation'와 같은 이름을 입력
  3. Resource type 드롭다운 목록에서 Navigation을 선택하고 OK를 클릭
  4. navigation 디렉토리를 오른쪽 버튼을 클릭하여 navigation Resource file을 선택
  5. 파일을 지정한후 OK [여기서는 nav_graph로지정]
  6. activity_main.xml 레이아웃에 다음의 소스를 추가
        <fragment
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"

            app:defaultNavHost="true"
            app:navGraph="@navigation/nav_graph" />
  1. 이 이후에 필요한 fragment들을 추가한다.
  2. ragment의 관계정리
    • 메인페이지에 붙을 fragment는 상단의 Home버튼을 클릭하여 홈 fragment라는것을 지정
    • 순서에 맞게 정렬후 화살표를 연결한다.

popUpTo, popUpToInclusive

  • popUpTo 예: 순환 로직

  • 앱에 A, B, C 세 개의 대상과 A에서 B로, B에서 C로, C에서 A로 연결되는 작업이 있다고 가정해 보겠습니다. 이에 대응하는 탐색 그래프는 그림 1과 같습니다.

  • 각 탐색 작업에서 대상이 백 스택에 추가됩니다. 이 흐름을 통해 반복적으로 이동한다면 백 스택에는 각 대상의 여러 세트(A, B, C, A, B, C, A 등)가 포함됩니다. 이 반복을 피하려면 다음 예와 같이 대상 C에서 대상 A로 이동하는 작업에 app:popUpTo와 app:popUpToInclusive를 지정하면 됩니다.

    <fragment
        android:id="@+id/c"
        android:name="com.example.myapplication.C"
        android:label="fragment_c"
        tools:layout="@layout/fragment_c">

        <action
            android:id="@+id/action_c_to_a"
            app:destination="@id/a"
            app:popUpTo="@+id/a"
            app:popUpToInclusive="true"/>
    </fragment>
  • 대상 C에 도달한 후 백 스택은 각 대상(A, B, C)의 한 인스턴스를 포함합니다. 대상 A로 다시 이동하면 A도 popUpTo하며 이는 이동하는 동안 B와 C를 스택에서 삭제하는 것을 의미합니다. app:popUpToInclusive="true"인 경우 스택에서 첫 번째 A도 팝하여 효과적으로 스택을 비웁니다. app:popUpToInclusive를 사용하지 않는다면 백 스택은 두 개의 대상 A 인스턴스를 포함하게 됩니다.

'코틀린+안드로이드' 카테고리의 다른 글

카카오맵 등등에서 필요로 하는 keyhash가져오기  (0) 2020.08.21
15. object  (0) 2020.07.18
14. 인터페이스 interface  (0) 2020.07.18
13. companion object  (0) 2020.07.18
12. Lambdas 람다  (0) 2020.07.17