일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 디자인패턴 #
- designPattern
- builderPattern
- Singleton
- 디자인패턴
- ㅓ
- 팩토리 메소드
- 싱글톤
- 추상 팩토리
- 함수형프로그래밍
- Observer Pattern
- Functional Programming
- Design Pattern
- 옵저버 패턴
- 추상팩토리패턴
- a
- PrototypePattern
- r
- 코틀린
- ㅋㅁ
- El
- Kotlin
- 프로토타입 패턴
- 빌터패턴
- F
- factory method
- Abstract Factory
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Navigation and the back stack(네비게이션과 백 스택) 본문
Navigation and the back stack(네비게이션과 백 스택)
hik14 2021. 11. 19. 16:57Android는 방문한 destination이 포함된 백 스택을 유지 관리합니다
앱의 첫 번째 destination은 사용자가 앱을 열 때 스택에 배치됩니다. navigation() 메서드를 호출할 때마다 스택의 맨 위에 다른 destination이 배치됩니다.
Up 또는 Back(system)를 누르면 각각 NavController.navigateUp() 및 NavController.popBackStack() 메서드를 호출하여 스택에서 맨 위 대상을 제거(또는 팝)한다
NavController.popBackStack()은 성공적으로 다른 destination으로 팝백되었는지 여부를 나타내는 boolean value를 반환합니다.
false를 반환하는 가장 흔한 경우는 그래프의 시작 destination 을 수동(코드로)으로 팝할 때입니다
opBackStack()가 false를 반환하면
NavController.getCurrentDestination()이 null을 반환합니다.
Activity에서 finish()를 호출하여 새 destination으로 이동하거나 팝을 처리할 책임이 있습니다.
if (!navController.popBackStack()) {
// Call finish() on your Activity
finish()
}
Dialog destination 은 백 스택
다른 destination을 오버레이함을 나타내는 FloatingWindow 인터페이스를 구현합니다.
따라서 하나 이상의 FloatingWindow destination은 탐색 백 스택의 맨 위에만 존재할 수 있습니다.
FloatingWindow를 구현하지 않는 destination으로 이동하면 모든 FloatingWindow destination이 스택 맨 위에서 자동으로 pop off 됩니다. 이렇게 하면 현재 destination이 백 스택의 다른 destination상 위에 항상 표시됩니다.
FloatingWindow destination은 탐색 백 스택의 맨 위에만 존재
FloatingWindow destination은 위에 다른 FloatingWindow destination 존재 가능
non -FloatingWindow destination 으로 이동시 위에 2개의 FloatingWindow destination를 자동으로 pop처리 하고 이동한다.
popUpTo and popUpToInclusive
action 을 사용하여 탐색할 때 option으로 백 스택에서 추가적으로 destination을 pop 할 수 있습니다.
예를 들어 앱에 초기 로그인 흐름이 있는 경우 사용자가 로그인하면 뒤로 버튼이 사용자를 로그인 흐름으로 다시 데려가지 않도록 모든 로그인 관련 대상을 백 스택에서 제거해야 합니다.
destination에서 다른 destination으로 이동할 때 현재 destination을 팝업하려면 연결된 <action> 요소에 app:popUpTo 속성을 추가. app:popUpTo는 navigation() 호출의 일부로 백 스택에서 일부 destination을 팝하도록 Navigation 라이브러리에 지시합니다.
속성 값은 스택에 남아 있어야 하는 가장 최근 destination의 ID입니다.
app:popUpToInclusive="true"를 포함하여 app:popUpTo에 지정된 destination이 백 스택에서도 제거되어야 함을 나타낼 수 있습니다.
각 navigation action을 통해 이동하면 destination이 백 스택에 추가됩니다.
이 흐름을 반복적으로 탐색하는 경우 백 스택에는 각 destination(A, B, C, A, B, C, A 등)의 여러 세트가 포함됩니다.
이러한 반복을 방지하려면
destination C에서 destination A로 이동하는 작업에서 app:popUpTo 및 app:popUpToInclusive를 지정해야한다.
C에 도착했을때 back stack (A B C)순으로 쌓여있다.
destination A로 다시 이동할 때,
popUpTo A로 이동하는데, 이는 탐색하는 동안 스택에서 B와 C를 제거
A - B - C ->(B,C 제거) A
app:popUpToInclusive="true"를 사용하면 스택에서 첫 번째 A를 팝하여 효과적으로 지움
(A(첫번째 A제거)- A)
(A)
* app:popUpToInclusive를 사용하지 않으면 백 스택에 대상 A의 두 인스턴스가 포함되어 있다.
popUpToSaveState and restoreSaveState
app:popUpTo를 사용하여 destination으로 이동할 때 Navigation 2.4.0-alpha01 이상을 사용하면 백 스택에서 꺼낸 모든 destination의 상태를 선택적으로 저장할 수 있습니다.
app:popUpToSaveState="true" 설정한다.
app:restoreSaveState="true"를 포함하여
app:destination에 설정된 destination과 연결된 상태를 자동으로 복원할 수도 있습니다.
'Android Jetpack Architecture > Navigation' 카테고리의 다른 글
Conditional navigation(조건부 네비게이션) (1) | 2021.11.26 |
---|---|
navigation event listener (0) | 2021.11.26 |
Destination으로 이동하기. (0) | 2021.11.19 |
Global Action (0) | 2021.11.19 |
중첩 네비 그래프 (Nested Navi Graph) (0) | 2021.11.19 |