[Navigation Component]안드로이드 back button처리
- archive
- 2019. 11. 4. 21:10
사용자가 새로운 화면으로 전환 할 때 마다 안드로이드는 이를 backstack에 저장 합니다. 사용자가 이전 버튼을 누르게 되면 안드로이드는 backstack에서 현재 화면은 지워지고, backstack의 가장 위에 있는 화면으로 이동합니다. 아무 설정을 하지 않으면 사용자는 마지막으로 보았던 화면으로 이동하게 됩니다.
이전 시간에 만들었던 AndroidTrivia 앱에서는 GameOverFragment와 GameOwnFragment가 존재합니다. 여기서 이전 버튼을 누르게 되면, GameFragment로 이동하게 됩니다. 게임이 끝났기때문에, 이전 버튼을 누르면 다시 GameFragment로 이동 하지 않고, TitleFragment로 이동하게 하고 싶다면 어떻게 해야 할까요?
이번 포스팅에서는 Navigation Component를 사용해서 구현 할 때 이전버튼에 대한 처리에 대해 알아 보겠습니다.
Step 1: Set the pop behavior for the navigation action
개발자는 action이 가지고 있는 "pop Behavior" 을 설정해 줌으로써 backstack을 관리 할 수 있습니다. pop Behavior에는 Pop To속성과 Inclusive 속성이 있습니다.
- Pop To 속성을 설정함으로 써 Navigation 되어야 할 목적지를 설정 할 수 있습니다.
- Inclusive 속성은 boolean 값 입니다. false 혹은 셋팅되지 않았을 경우에는 Pop To속성에 현재 화면 부터 지정한 목적지 까지 이동하면서 사이에 있는 backstack 요소들을 제거 합니다. 그러나 목적지에 해당한 화면은 backstack에서 지워지지 않습니다.
- Inclusive 속성이 true이면, 현재 화면 부터 설정된 목적지 화면을 포함하여 backstack에 쌓인 화면이 전부 삭제 됩니다.
- 만약 화면의 맨 처음 화면으로 이동 할 때, Inclusive 속성을 true로 주게 된다면 backstack에는 아무 것도 남아 있지 않아 앱에서 빠져 나오게 됩니다.
action_gameFragment_to_gameOverFragment에서 inclusive 속성을 true로 설정 하였습니다. Inclusvie가 true로 설정 되었을 때 효과는 아래와 같습니다.
Inclusive 속성이 true이면, 현재 화면 부터 설정된 목적지 화면을 포함하여 backstack에 쌓인 화면이 전부 삭제 됩니다.
이 액션은 gameFragment > gameOverFragment를 정의한 액션인데, 해당 액션이 Pop될 경우 gameFragment가 목적지 이지만 inclusive가 설정되어 있어 해당 목적지까지 backstack 지웁니다.
TitleFragment > GameFragment > GameOverFragment 순으로 화면 전환이 이루어졌다고 하면 backstack의 가장 위에는 TitleFragment가 남아 있게 되어 TitleFragment로 화면이 이동 되겠네요.
다른 방법으로는 목적지 (Pop to)자체를 TitleFragment로 셋팅하는 방법도 있습니다. inclusive는 false로 설정해야 겠죠. inclusive가 true로 설정되어 있다면 TitleFragment까지 backstack에서 사라져 앱 밖으로 빠져나오게 됩니다.
action_gameFragment_to_gameOwnFragment도 똑같이 설정해 주시면 됩니다.
'archive' 카테고리의 다른 글
안드로이드 DataBinding, MVVM 구구단 (0) | 2019.12.12 |
---|---|
파이썬 #1) VSCODE에서 에서 파이썬 개발하기 (0) | 2019.12.06 |
Conditional Navigation 조건에 맞춰 Navigation을 해보자. (0) | 2019.11.04 |
안드로이드 Navigation Components로 Fragment들을 전환해 보자. (0) | 2019.11.02 |
안드로이드 데이터 바인딩에 대해 알아보자 #2 (0) | 2019.10.17 |