2022. 5. 11. 14:24ㆍIT/안드로이드
작업하는 화면의 전 단계로 이동하는 동작이다.
App을 처음 열면, Android 는 기본 활동이 포함된 새로운 작업을 생성한다.
Activity 는 Back Stack 이라는 Stack 으로 배열되고, 사용자가 이동한 각각의 새 Activity 는 작업의 back stack 으로 Push된다. 맨 위의 stack 활동은, 현재 사용자가 상호작용하고 있는 활동을 나타내고, 그 아래의 stack 은 백그라운드로 전환되었다가 중지된 활동을 의미한다.
Back stack 은 뒤로 이동하고자 하는 경우에 유용하다 !
안드로이드는 Stack의 맨 위에 있는 현재 Activity를 삭제하고 폐기 한 뒤에, 그 아래에 있는 활동을 다시 시작할 수 있다. 즉, Stack 에서 활동을 없애고 이전 활동이 Forground로 이동한다.
사용자가 여러 번 뒤로 이동하고 싶어하는 경우, Android는 맨 마지막 stack 에 가까워질 때 까지 계속 상단에 쌓여있던 활동을 순서대로 없앤다. back stack 에 더 이상 활동이 남아 있지 않으면, 사용자는 기기의 launcher 화면이나 이 활동을 실행한 앱으로 돌아가게 된다.
백 스택은, 사용자가 열어본 Activity를 추적할 수 있는 것 과 같은 방법으로 Fragment 도 추적할 수 있다.
1. 기본적으로 navigation 에서 돌아갈 루트를 먼저 설정하고, (화살표로 드래그해 이동 방향 편집)
2. 나 같은 경우에는 cancle 버튼을 각 화면(Fragment)에 추가해 첫 화면(startFragment)로 돌아가도록 설정했다.
하지만 이렇게 간단하지는 않다 !
이렇게만 해놓으면, 시스템 Back 버튼을 누르면 기존 stack 이 사라지지 않고 쌓여있어서 올바르지 않은 동작이다.
위와 같이 StartFragment 에서 시작해서, 주문 App의 마지막 화면인 SummaryFragment까지 갔다가, CANCLE 버튼을 눌러 첫화면으로 돌아갔다면,
이렇게 이전 stack 들이 폐기된게 아니고 그대로 StartFragment 가 또 쌓여버리는 것이다.
이 현상을 수정하기 위해서는 , popUpToInclusive 를 사용해 모든 대상을 Backstack 에서 없애보자.
app:popUpTo="@id/startFragment" , app:popUpToInclusive="true" 요걸 추가해주자.
이런식으로, 모든 Fragment 에서 시작화면 Fragment 를 popUpTo 에 설정해주고,
popUpToInclusive 를 true로 수정하자.
이렇게 수정하고나서, 마지막 화면에 갔다가 CANCLE 을 눌러 첫 화면으로 이동하고, 시스템 Back 버튼을 눌러보자. !
그럼 Back stack 에 더 이상 Fragment 가 남아있지 않아야하므로, App이 종료가 되어야한다. !
## 요약 ##
- Android에서는 방문한 모든 대상의 백 스택이 유지되며 각각의 새 대상이 스택으로 푸시됩니다.
- Up 버튼이나 Back 버튼을 탭하면 대상을 백 스택에서 없앨 수 있습니다.
- Jetpack 탐색 구성요소를 사용하면 프래그먼트 대상을 백 스택으로 푸시하고 백 스택에서 없앨 수 있으므로 기본 Back 버튼 동작을 직접 구현할 필요가 없습니다.
- 속성 값에 지정된 대상에 이를 때까지 대상을 백 스택에서 없애기 위해 탐색 그래프에서 작업에 app:popUpTo 속성을 지정합니다.
- app:popUpTo에 지정된 대상도 백 스택에서 없애야 하는 경우 작업에 app:popUpToInclusive="true"를 지정합니다.
- Intent.ACTION_SEND를 사용하고 Intent.EXTRA_EMAIL, Intent.EXTRA_SUBJECT, Intent.EXTRA_TEXT 등의 인텐트 추가항목을 채워 이메일 앱에 콘텐츠를 공유하도록 암시적 인텐트를 만들 수 있습니다.
- 수량에 따라 서로 다른 문자열 리소스(예: 단수형 또는 복수형)를 사용하려면 plurals 리소스를 사용합니다.
'IT > 안드로이드' 카테고리의 다른 글
Android - Test code 작성시 추가해야할 header들 (4) | 2022.05.16 |
---|---|
Android - Test 디렉터리 생성하기 (0) | 2022.05.16 |
Android - Fragment 간 공유되는 ViewModel (6) | 2022.05.10 |
Android - ViewModel 과 LiveData 사용하기 (2) | 2022.05.04 |
Android - App architecture (1) (2) | 2022.05.02 |