탐색 구성요소는 사용자가 앱에서 이동할 때 Android 운영체제와 연동하여 백 스택을 유지합니다. 사용자가 앞뒤로 이동하는 상황에서는 경우에 따라 여러 백 스택을 동시에 유지하는 것이 도움이 될 수 있습니다. 예를 들어, 앱에 하단 탐색이나 탐색 창이 포함된 경우 여러 백 스택 지원을 사용하면 사용자가 앱 흐름 간에 자신의 위치를 잃어버리지 않고 자유롭게 전환할 수 있습니다.
탐색 구성요소는 탐색 그래프에서 대상의 상태를 저장하고 복원하여 여러 백 스택을 지원하는 API를 제공합니다. NavigationUI
클래스에는 이를 자동으로 처리하는 메서드가 포함되지만, 기본 API를 직접 사용하여 더 맞춤설정된 메서드를 구현할 수도 있습니다.
NavigationUI를 사용하여 자동 지원 구현
NavigationUI
클래스에는 사용자가 메뉴 항목 간에 이동할 때 메뉴 항목의 상태를 자동으로 저장하고 복원하는 API가 포함됩니다. 이러한 API는 다음과 같은 경우 기본적으로 여러 백 스택 지원을 구현합니다.
- 탐색 창 추가 또는 하단 탐색에서 설명한 대로 적절한
setupWithNavController()
오버로드를 사용하여NavigationView
나BottomNavigationView
의 인스턴스를NavController
인스턴스와 연결하는 경우 onNavDestinationSelected()
를 사용하여NavController
인스턴스에서 호스팅하는 대상에 연결된 맞춤 탐색 메뉴 UI를 만드는 경우
이러한 API는 여러 백 스택을 지원하기 위해 추가적인 코드 변경이 필요하지 않으며 앱에서 여러 백 스택을 지원하는 데 권장하는 방법입니다.
기본 API를 사용하여 직접 구현
NavigationUI
에서 제공하는 요소가 요구사항을 충족하지 않는 경우 탐색 구성요소에서 제공하는 다른 API 노출 영역 중 하나를 통해 백 스택을 저장하고 복원하도록 기본 API를 사용할 수 있습니다.
탐색 XML
탐색 XML에서 탐색 그래프의 <action>
요소는 app:popUpToSaveState
속성을 사용하여 작업이 app:popUpTo
로 백 스택에서 제거한 대상의 상태를 저장할 수 있습니다. 또한 app:restoreState
속성을 사용하여 app:destination
속성에 정의된 대상의 이전 저장 상태를 복원할 수도 있습니다.
이러한 속성을 사용하여 여러 백 스택을 지원하면 됩니다. 탐색 작업으로 인해 사용자를 하나의 백 스택에서 다른 백 스택으로 옮겨야 하는 경우 대응하는 <action>
요소에 app:popUpToSaveState
와 app:restoreState
를 true
로 설정합니다. 이렇게 하면, 작업이 현재 백 스택의 상태를 저장하는 동시에 이전에 저장된 대상 백 스택의 상태가 있는 경우 상태를 복원합니다.
다음 예는 이러한 두 속성을 모두 사용하는 작업을 보여 줍니다.
<action
android:id=”@+id/swap_stack”
app:destination=”@id/second_stack”
app:restoreState=”true”
app:popUpTo=”@id/first_stack_start_destination”
app:popUpToSaveState=”true” />
NavOptions
NavOptions
클래스를 사용하면 NavController
를 사용하여 이동할 때 특별한 탐색 옵션을 전달하여 백 스택을 저장하고 복원할 수 있습니다. 이는 NavOptions
의 인스턴스를 만들 때 Kotlin DSL을 사용하든 NavOptions.Builder
를 사용하든 마찬가지입니다.
Kotlin
// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
자바
NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
탐색 옵션 전달에 관한 자세한 내용은 프로그래매틱 방식으로 NavOptions 적용을 참고하세요.
추가 리소스
탐색 구성요소를 통한 여러 백 스택 지원에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.
블로그 게시물
- MAD Skills: 여러 백 스택 탐색(Medium 게시물)
- 탐색: 여러 백 스택 자세히 알아보기(Medium 게시물)
샘플
- GitHub의 Now in Android 앱
- GitHub의 Jetnews
- GitHub의 Jetsnack