Android navigation jetpack popstack 삭제하기

울늘·2022년 6월 3일
0

네비게이션의 이동에 따라 이전화면이 stack에 저장된다.

navigation jetpack 사용을 하는 도중 이전버튼을 눌렀을 때 이전화면으로 이동되면 안되는데 자꾸 이동이 되는 이슈를 겪었다.
navigation xml에 화면이동이 이루어지는 action태그에
popUpTo와 popUpToInclusive 속성을 사용할 수 있다.

popUpTo

popUpto속성은 해당 fragment가 나올 때까지 백스택을 팝업한다.
설명하자면 A화면 -> B화면 -> C화면 ->D화면으로 앱의 fragment를 이동하였다고 가정하자 만약 여기서 C화면에서 D화면으로 이동하는 action에 popUpto="A화면의 ID"를 입력하면 D화면에서 백버튼을 누르면 A화면으로 이동한다. B화면의 백스택과 C화면의 백스택은 삭제된다.

예시

<action
            android:id="@+id/action_CFragment_to_DFragment"
            app:destination="@id/DFragment"
            app:enterAnim="@android:anim/fade_in"
            app:exitAnim="@android:anim/fade_out"
            app:popEnterAnim="@android:anim/fade_in"
            app:popExitAnim="@android:anim/fade_out"
            app:popUpTo="@+id/mainFragment"
            app:popUpToInclusive="true"/>

popUpToInclusive

popUpToInclusive속성은 설정되지 않으면 기본적으로 false로 설정되어있다.
popUpToInclusive 속성이 true인 경우, popUpTo 속성은 주어진 목적지를 포함해서 모든 목적지들을 백 스택에서 제거한다.
위의 과정으로 다시 예시를 들어보자
A화면 -> B화면 -> C화면 ->D화면으로 앱의 fragment를 이동하였다고 가정하자 만약 여기서 C화면에서 D화면으로 이동하는 action에 popUpTo="A화면의 ID"를 입력하고 popUpToInclusive="true"가 설정되어있다면 D화면에서 백버튼을 누르게되면 앱이 종료되게 된다.

여담으로 네비게이션 최신버전은 따로 코드를 작성하지 않아도 save state를 지원하여 이전 백스택의 화면의 상태를 저장하여 이전버튼을 눌렀을 때 전에 사용하였던 화면의 상태보여준다.

참고

https://taej0127.medium.com/android-navigation-pop-up-c799c7d19d28

profile
주니어 안드로이드 개발자입니다!

0개의 댓글