반응형
navigation jetpack
- 출처 https://www.youtube.com/watch?v=M1e2tLnzVPo [Code with Joyce]
- 자세한 내용은 https://developer.android.com/guide/navigation/navigation-getting-started 에서 확인
- 네비게이션 그래프 란 그래프를 UI적으로 한눈에 알아 보기 쉽게 표현해주는 것
- 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"
}
- 프로젝트 창에서 마우스 오른쪽 버튼으로 res 디렉터리를 클릭하고 New > Android Resource Directory을 선택합 New Resource Directory 대화상자가 나타남
- Directory name 필드에 'navigation'와 같은 이름을 입력
- Resource type 드롭다운 목록에서 Navigation을 선택하고 OK를 클릭
- navigation 디렉토리를 오른쪽 버튼을 클릭하여 navigation Resource file을 선택
- 파일을 지정한후 OK [여기서는 nav_graph로지정]
- 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" />
- 이 이후에 필요한 fragment들을 추가한다.
- 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 |