탐색
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 9월 4일 | 2.8.0 | - | - | - |
종속 항목 선언
Navigation의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { def nav_version = "2.8.0" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" }
Kotlin
dependencies { val nav_version = "2.8.0" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") }
Safe Args
프로젝트에 Safe Args를 추가하려면 최상위 build.gradle
파일에 다음의 classpath
를 포함합니다.
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
또한 사용 가능한 두 가지 플러그인 중 하나를 적용해야 합니다.
자바 모듈 또는 자바와 Kotlin 혼합 모듈에 적합한 자바 언어 코드를 생성하려면 앱 또는 모듈의 build.gradle
파일에 다음 행을 추가합니다.
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
또는 Kotlin 전용 모듈에 적합한 Kotlin 코드를 생성하려면 다음을 추가하세요.
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
AndroidX로 이전에 따라 gradle.properties
파일에 android.useAndroidX=true
가 있어야 합니다.
Kotlin 확장 프로그램 사용에 관한 정보는 ktx 문서를 참고하세요.
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 2.8
버전 2.8.0
2024년 9월 4일
androidx.navigation:navigation-*:2.8.0
이 출시되었습니다. 버전 2.8.0에 포함된 커밋을 확인하세요.
2.7.0 이후 중요 변경사항
탐색 Kotlin DSL 유형 안전
- Navigation은 이제 Kotlin 직렬화를 사용하여 Kotlin DSL (Navigation Compose에서 사용됨)에 유형 안전성을 제공합니다. 이 기능을 사용하면 유형 안전 객체 및 데이터 클래스를 통해 탐색 그래프에서 대상을 정의할 수 있습니다.
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
자세한 내용은 Navigation Compose와 유형 안전성을 갖춘 블로그 게시물을 참고하세요.
Navigation Compose 뒤로 탐색 예측
- 이제 Navigation Compose는 Compose-Animation의 새
SeekableTransitionState
API를 통해 뒤로 탐색 예측을 위한 예측을 제공합니다. 이렇게 하면 완료된 동작을 통해 트랜잭션을 커밋할지 아니면 취소할지 결정하기 전에 뒤로 동작을 사용하여 맞춤 전환으로 이전 대상을 볼 수 있습니다.
탐색 프래그먼트 컴포저블
- 구성 가능한 대상을 Navigation XML 파일에 추가할 수 있는
NavHostFragment
의ComposableNavHostFragment
대안이 포함된 새로운navigation-fragment-compose
아티팩트를 추가했습니다. 각composable
대상은 정규화된 이름이 각 대상의android:name
속성으로 사용되는 인수@Composable
메서드 없이 최상위 수준으로 표현해야 합니다. 이러한 대상 중 하나로 이동하면 포함 프래그먼트가 생성되어 구성 가능한 콘텐츠를 표시합니다.
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
기타 변경사항
- Navigation Compose가 이제 Compose 1.7.0에 종속됩니다.
- Navigation에서 이제 목록, 배열, 지도와 같은 컬렉션 기반 인수를 위한
NavType<T>
의 서브클래스인 새CollectionNavType<T>
클래스를 제공합니다. 이제 모든 기본NavType
배열 (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
,StringArrayType
)이 이 새 클래스에서 상속됩니다. - 이제
NavType
에서 Int, String, boolean, Float, Long 목록을 기본적으로 지원합니다.
버전 2.8.0-rc01
2024년 8월 21일
androidx.navigation:navigation-*:2.8.0-rc01
이 출시되었습니다. 버전 2.8.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 최상위 Enum 클래스를 유형 안전 인수로 전달할 때 탐색 비정상 종료를 수정합니다. 추가했습니다. (I0ba76, b/358137294)
- Navigation 2.8이 이제 SDK 34에서 올바르게 작동하며 나머지 AndroidX 라이브러리와 함께 2.9 버전이 출시될 때까지 SDK 35로 전환되지 않습니다. b/358798728을 참조하세요.
버전 2.8.0-beta07
2024년 8월 7일
androidx.navigation:navigation-*:2.8.0-beta07
이 출시되었습니다. 버전 2.8.0-beta07에 포함된 커밋을 확인하세요.
알려진 문제
- b/358137294로 인해 다른 클래스에 중첩된 enum만 즉시 지원됩니다. 최상위 enum은 다음 버전에서 지원될 예정입니다.
버그 수정
- 중복 또는 공유된 대상으로 이동할 때 탐색은 그래프의 현재 위치에서 가장 가까운 일치하는 대상으로 우선적으로 이동합니다. 추가했습니다. (Ic89a4, b/352006850)
- 이제 safe args의 탐색에 새
NavType.EnumType
가 추가되었습니다. 즉,Enum
유형에는 더 이상 맞춤NavType
가 필요하지 않습니다.Enum
의SerialName
은 정규화된 기본 이름이어야 합니다. 추가했습니다. (I66d22, b/346475493) - safe args의 탐색에
Int?
,Long?
,Float?
,Boolean?
,Enum<*>?
등 null을 허용하는 인수 유형에 관한 기본 지원이 추가되었습니다. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - 이제
NavGraph
의startDestination
는NavGraph
에 전달된startDestination
경로가startDestination.route
과 정확히 같은 경우 기본 인수 값을 사용합니다. 추가했습니다. (I13762, b/354046047)
버전 2.8.0-beta06
2024년 7월 24일
androidx.navigation:navigation-*:2.8.0-beta06
이 출시되었습니다. 버전 2.8.0-beta06에 포함된 커밋을 확인하세요.
버그 수정
WrongStartDestinationType
린트 검사에서 전달된 클래스 유형에서 컴패니언 객체를 확인하지 않아 린트에서 오류를 감지하지 못하는 문제가 수정되었습니다. 추가했습니다. (I92b09)
버전 2.8.0-beta05
2024년 7월 10일
androidx.navigation:navigation-*:2.8.0-beta05
이 출시되었습니다. 버전 2.8.0-beta05에 포함된 커밋을 확인하세요.
버그 수정
- 중첩된
NavGraphs
가 동일한startDestination
경로를 공유할 때 발생하는singleTop
탐색 비정상 종료 문제를 수정합니다. 추가했습니다. (I17b94, b/294408596)
버전 2.8.0-beta04
2024년 6월 26일
androidx.navigation:navigation-*:2.8.0-beta04
이 출시되었습니다. 버전 2.8.0-beta04에 포함된 커밋을 확인하세요.
버그 수정
- 탐색에서 이제 경로 인수에 빈 문자열을 사용한 탐색을 지원합니다. 추가했습니다. (Ic5dbd, b/339481310)
@Serializable(with =...)
를 통해 클래스 필드에 직접 선언된 맞춤 Serializer의 오류 메시지를 개선하여 현재 지원되지 않는 기능임을 명확히 합니다. 추가했습니다. (I052b0, b/341319151)- 이제 Android가 아닌 테스트에서
SavedStateHandleFactory
테스트 API를 사용할 수 있지만 번들을 사용한 인수 파싱을 지원하려면 Robolectric이 필요합니다. 추가했습니다. (I76cdc, b/340966212) - Compose에서 유형 안전 탐색을 사용하여 프로세스 종료 후 앱을 재개할 때 상태를 복원할 때 발생하는 비정상 종료 문제를 수정했습니다. 추가했습니다. (Ia8f38, b/341801005)
- Navigation Compose에서 뒤로 탐색 예측 동작을 취소한 후 사용자가 반환하는
NavBackStackEntry
가RESUMED
수명 주기 상태로 돌아가지 않는 문제를 수정했습니다. 이렇게 하면 플링 후에 제자리에 맞춰지는 대신 반환되는 대상이 올바르게 다시 애니메이션됩니다. 추가했습니다. (I97a0c, b/346608857) - Navigation Compose와 함께 뒤로 탐색 예측을 사용할 때 이제 표시되는 대상이 적절한 z 순서를 가지며 수신 대상 위에 올바르게 애니메이션됩니다. 추가했습니다. (I2077b, b/345993681)
버전 2.8.0-beta03
2024년 6월 12일
androidx.navigation:navigation-*:2.8.0-beta03
이 출시되었습니다. 버전 2.8.0-beta03에 포함된 커밋을 확인하세요.
API 변경사항
CollectionNavType
에는 새로운 추상emptyCollection()
메서드가 있습니다. 인수로 전달된 빈 컬렉션을 처리하려면 이를 재정의합니다. 추가했습니다. (Ie4d84, b/341723133)
버그 수정
- 최종 출력이 URI로 인코딩되어야 함을 강조하기 위해
NavType.serializeAsValue
및serializeAsValues
에 관한 문서를 추가했습니다. 추가했습니다. (Ida6bd, b/344943214) - null
CollectionNavType
인수로toRoute<T>
를 호출할 때 발생하는 비정상 종료 문제를 수정했습니다. nullCollectionNavType
로 탐색할 때 출력 인수는 Serializable 클래스에서 선언된 기본값이거나 기본값이 없는 경우emptyCollection()
의 반환 값입니다. (I84158, Id630f, b/342672856)
버전 2.8.0-beta02
2024년 5월 29일
androidx.navigation:navigation-*:2.8.0-beta02
이 출시되었습니다. 버전 2.8.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
- null을 허용하는 맞춤
NavType
와 함께NavBackStackEntry.toRoute
를 사용할 때 발생하는ClassCastException
비정상 종료 문제를 해결했습니다. 추가했습니다. (I1c29b, b/342239473) - 현재 대상의 ID를 통해 도달할 수 없는 백 스택 항목을 복원하려고 할 때 발생하는 탐색 백 스택 상태 복원 문제가 수정되었습니다. 경로는 ID로 지원되므로 경로로 빌드된 대상도 영향을 받았습니다. 동일한 기본 문제가 있는
clearBackStack()
호출로 인한 비정상 종료도 해결됩니다. 추가했습니다. (I423c3, b/339908057)
버전 2.8.0-beta01
2024년 5월 14일
androidx.navigation:navigation-*:2.8.0-beta01
이 출시되었습니다. 버전 2.8.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
SavedStateHandle.toRoute()
는 이제 맞춤 인수 유형의typeMap
매개변수를 받습니다. 추가했습니다. (Ie39fb, b/339026523)- Kotlin 직렬화 가능 객체에서
SavedStateHandle
를 만들 수 있도록navigation-testing
에 테스트 API를 추가했습니다. 추가했습니다. (Id4867, b/339080702)
버그 수정
- Navigation Kotlin DSL 함수의 누락된 매개변수 문서가 추가되었습니다. 추가했습니다. (I26a36)
버전 2.8.0-alpha08
2024년 5월 1일
androidx.navigation:navigation-*:2.8.0-alpha08
이 출시되었습니다. 버전 2.8.0-alpha08에 포함된 커밋을 확인하세요.
Navigation Compose의 Safe Args
- Navigation Compose와 Kotlin 직렬화에 기반한 Navigation Kotlin DSL 사용자를 위한 컴파일 시간 유형 안전성을 지원하는 작업이 완료되었으며 이전의 실험용 API가 이제 안정화되었습니다.
이 기능은 Kotlin 직렬화를 사용하여 유형 안전성을 갖춘 객체와 데이터 클래스를 통해 탐색 그래프에서 대상을 정의할 수 있습니다.
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
자세한 내용은 Navigation Compose와 유형 안전성을 갖춘 블로그 게시물을 참고하세요.
새로운 기능
- 이제
navigation-fragment-compose
아티팩트가ComposableFragment
내의 구성 가능한 메서드에 로컬로LocalFragment
컴포지션을 제공합니다. 추가했습니다. (If35e5) - 이제
NavType
에서 Int, String, boolean, Float, Long 목록을 기본적으로 지원합니다. 추가합니다. (I4b6dd, Ia914c, b/188693139)
버전 2.8.0-alpha07
2024년 4월 17일
androidx.navigation:navigation-*:2.8.0-alpha07
이 출시되었습니다. 버전 2.8.0-alpha07에 포함된 커밋을 확인하세요.
새로운 기능
composable
대상을 탐색 XML 파일에 추가할 수 있는NavHostFragment
의ComposableNavHostFragment
대안이 포함된 새navigation-fragment-compose
아티팩트를 추가합니다. 각composable
대상은 정규화된 이름이 각 대상의android:name
속성으로 사용되는 인수@Composable
메서드 없이 최상위 수준으로 표현해야 합니다. 이러한 대상 중 하나로 이동하면 포함 프래그먼트가 생성되어 구성 가능한 콘텐츠를 표시합니다. 추가했습니다. (I0ef2e, b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }
// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
API 변경사항
- Kotlin 직렬화에 기반한 접근 방식을 사용하여 Navigation Compose에서 Safe Args를 계속 지원했습니다. 이러한 API는 완료되지 않았으며
ExperimentalSafeArgsApi
주석으로 표시됩니다. 이 주석은 향후 출시에서 전체 API 노출 영역이 완료되면 삭제될 예정입니다. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554dbI554db, I554db, I554db
버전 2.8.0-alpha06
2024년 4월 3일
androidx.navigation:navigation-*:2.8.0-alpha06
이 출시되었습니다. 버전 2.8.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
- Kotlin 직렬화에 기반한 접근 방식을 사용하여 Navigation Compose에서 Safe Args를 지원하기 시작했습니다. 이러한 API는 완료되지 않았으며
ExperimentalSafeArgsApi
주석으로 표시됩니다. 이 주석은 향후 출시에서 전체 API 노출 영역이 완료되면 삭제될 예정입니다.
버그 수정
- 이제
NavHost
가Alignment.TopStart
를 기본 contentAlignment 인수로 사용했습니다. 이렇게 하면AnimatedContent
의 기본값에 맞게 배치되고 예기치 않은 중앙으로부터의 전환 인스턴스가 수정됩니다. 추가했습니다. (I09e72, b/330111602) - Navigation Compose를 사용하는 동안 뒤로 탐색 예측 동작을 휙 돌리면 이제
NavHost
가 바로 완료되지 않고 맞춤 전환을 올바르게 완료합니다. 추가했습니다. (I99017, b/327292110)
버전 2.8.0-alpha05
2024년 3월 20일
androidx.navigation:navigation-*:2.8.0-alpha05
이 출시되었습니다. 버전 2.8.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
defaultValue
에 의존하지 않고startDestination
경로에서 직접NavGraph
의startDestination
에 인수를 전달할 수 있습니다. 이는 중첩된NavGraph
startDestinations
에도 적용됩니다. 추가했습니다. (I0e0b5, b/109505019, b/188693139)
API 변경사항
- 목록, 배열, 지도와 같은 컬렉션 기반 인수를 위한
NavType<T>
의 서브클래스인 새로운 추상CollectionNavType<T>
클래스를 추가했습니다. 추가했습니다. (Ic6d63, b/188693139) - 기본
NavType
배열 (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
,StringArrayType
)이 모두CollectionNavType
유형입니다. (Idcf79, b/188693139) NavType
는 이제 동일한 유형의 두 값이 서로 동일한지 확인하는 새로운 개방형valueEquals
API를 제공합니다. 추가합니다. (I6cb97, b/327229511)
버그 수정
- 이제 딥 링크의 쿼리 매개변수에서 인수 이름을 묶은 중괄호 형식의 값 (예:
{argName}
)을 문자열 기반NavTypes
에 유효한 값으로 사용할 수 있습니다. 이렇게 하면 이러한 값이 모든 유형에서 유효하지 않거나 값이 없는 것으로 간주되는 문제가 수정되었습니다. 추가했습니다. (I18302, b/327274038) navigate
또는popBackStack
와 같은 경로를 지원하는NavController
함수가 이제NavTypes
배열의 인수로 채워진 경로를 올바르게 일치시킬 수 있습니다. 추가했습니다. (Iea805, b/327229511)
버전 2.8.0-alpha04
2024년 3월 6일
androidx.navigation:navigation-*:2.8.0-alpha04
이 출시되었습니다. 버전 2.8.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Navigation Compose에서 전환의
SizeTranform
를composable
또는navigation
함수의 초기화의 일부로 정의하여 지정할 수 있습니다. 추가했습니다. (I91062, b/296912651)
버그 수정
- 동작 없이 시스템 뒤로를 사용할 때 Compose Navigation의
NavHost
가 전환을 제대로 표시하지 못하는 문제를 수정했습니다. 추가했습니다. (Iceeae, b/325998468)
버전 2.8.0-alpha03
2024년 2월 21일
androidx.navigation:navigation-*:2.8.0-alpha03
이 출시되었습니다. 버전 2.8.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
NavBackStackEntry.savedStateHandle
가@MainThread
로 표시됩니다. 어차피 기본 스레드에 있어야 하는 코드를 사용하기 때문입니다. 추가했습니다. (Ibb988, b/299523245)
버그 수정
- 연결된 항목의
ViewModel
가 저장된 상태의 일부가 아니기 때문에NavGraph
ViewModel이 너무 빨리DESTROYED
가 되는 Navigation의 문제를 수정했습니다. 추가했습니다. (Ib6bb7, b/317581849)
종속 항목 업데이트
- Navigation Compose가 이제 Compose 1.7.0-alpha03에 종속됩니다.
버전 2.8.0-alpha02
2024년 2월 7일
androidx.navigation:navigation-*:2.8.0-alpha02
이 출시되었습니다. 버전 2.8.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Navigation Compose는 Compose-Animation의 새
SeekableTransitionState
API를 통해 뒤로 탐색 예측을 위한 예측을 제공합니다. 이렇게 하면 완료된 동작을 통해 트랜잭션을 커밋할지 아니면 취소할지 결정하기 전에 뒤로 동작을 사용하여 맞춤 전환으로 이전 대상을 볼 수 있습니다. 추가했습니다. (I8b8e9)
버전 2.8.0-alpha01
2024년 1월 24일
androidx.navigation:navigation-*:2.8.0-alpha01
이 출시되었습니다. 버전 2.8.0-alpha01에 포함된 커밋을 확인하세요.
버그 수정
- 대상에서 여러
saveState
호출을 수행하여 여러 상태가 저장되지만 첫 번째 상태만 복원할 수 있는BackStackState
누수를 수정했습니다. 추가했습니다. (I598b0, b/309559751) NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수가 제대로 표시되지 않는 문제를 수정했습니다. (#636, b/316676794)
종속 항목 업데이트
- 이제 Navigation Compose가 Compose
1.7.0-alpha01
에 종속되어 예기치 않은 크기 조정 애니메이션을 유발할 수 있는 문제를 해결합니다. b/297258205를 참조하세요.
외부 기여
NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수의 표시 문제를 해결해 주신 SimonMarquis에게 감사드립니다.
버전 2.7.7
버전 2.7.7
2024년 2월 7일
androidx.navigation:navigation-*:2.7.7
이 출시되었습니다. 버전 2.7.7에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.8.0-alpha01
에서 백포팅됨: 단일NavBackStackEntry
에 관한 여러saveState()
호출로 인해 여러 상태가 저장되지만 처음 저장된 상태만 복원할 수 있는BackStackState
누수가 수정되었습니다. 추가했습니다. (I598b0, b/309559751) - Navigation
2.8.0-alpha01
에서 백포팅됨:NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수가 제대로 표시되지 않는 문제가 수정되었습니다. (#636, b/316676794)
외부 기여
NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수의 표시 문제를 해결해 주신 SimonMarquis에게 감사드립니다.
버전 2.7.6
버전 2.7.6
2023년 12월 13일
androidx.navigation:navigation-*:2.7.6
이 출시되었습니다. 버전 2.7.6에 포함된 커밋을 확인하세요.
버그 수정
- 이제
NavGraph
equals()
함수는 호출하는 그래프만이 아닌 다른 그래프의 노드를 올바르게 고려합니다. 이렇게 하면 ID가 서로 다른 노드가 있는 그래프가 더 이상 동일한 것으로 간주되지 않습니다. (I401cb, b/311414915)
버전 2.7.5
버전 2.7.5
2023년 11월 1일
androidx.navigation:navigation-*:2.7.5
이 출시되었습니다. 버전 2.7.5에 포함된 커밋을 확인하세요.
성능 개선
- 두 그래프 비교의 성능 (시간 및 할당 횟수 모두)이 크게 개선되었습니다. 즉, 새 그래프를 기존 그래프와 내부적으로 비교하는
setGraph
과 같은 호출이 훨씬 더 빨라지고 결과적으로 건너뛴 프레임도 줄어듭니다. 이러한 개선을 위한 철저한 분석을 위해 미할 Z님께 감사드립니다. 추가했습니다. (I6ad62) - 이제
NavHost
는 두 번째 패스가 업데이트된 상태를 읽을 때까지 기다릴 필요 없이 첫 번째 컴포지션 패스에서 시작 대상을 렌더링합니다. 추가했습니다. (I439a7, b/304852206)
버그 수정
- 그래프에 두 대상을 연결하는 작업이 포함된 대상이 있는 경우에만 정확히 동일한 그래프로
setGraph
를 두 번 이상 호출하면 백 스택이 표시되는 문제가 수정되었습니다. 추가했습니다. (Ieaed7) - 빠르게 연속해서 이동하고 닫은 대화상자가 더 이상
NavController.visibleEntries
목록으로 유출되지 않습니다. 추가했습니다. (I67586, b/287969970) - 항목이 표시된 후 구성이 변경되면 이제
saveState
가 false인 경우 항목의ViewModel
가 올바르게 삭제됩니다. 추가했습니다. (Idf242, b/298164648) - 구성 변경 전에 백 스택이 완전히 비어 있거나 수신 인텐트에
FLAG_ACTIVITY_NEW_TASK
플래그가 설정된 경우에만setGraph
를 호출한 경우NavController
가 동일한 딥 링크를 두 번 이상 처리할 수 있는 문제를 수정했습니다. 추가했습니다. (I73c7f)
종속 항목 업데이트
- 프래그먼트를 사용한 탐색이 이제 Fragment 1.6.2에 종속되므로
clearBackStack
를 호출할 때 중첩된 프래그먼트의ViewModel
인스턴스가 삭제되지 않는 문제가 수정되었습니다.
버전 2.7.4
버전 2.7.4
2023년 10월 4일
androidx.navigation:navigation-*:2.7.4
이 출시되었습니다. 버전 2.7.4에 포함된 커밋을 확인하세요.
새로운 기능
popBackStack
에 있는 지원과 일치하는 정확한 인수를 사용하는 특정 항목으로 다시 돌아갈 수 있도록 인수가 있는 경로를 사용하도록popUpTo
에 관한 지원을 추가했습니다. 추가했습니다. (I731f4, b/299255572)
버그 수정
popUpTo
를 사용하여 다른 이동으로 탐색을 중단하면FragmentNavigator
가 비정상 종료되는 문제를 수정했습니다. 추가했습니다. (I3c848, b/301887045)- 시스템 뒤로 누르기로 인해
currentDestination
가 표시된 프래그먼트와 일치하도록 올바르게 업데이트되지 않는 문제를 수정했습니다. 추가했습니다. (Id0d6c, b/289877514) - 이제
DialogFragment
수명 주기가 위의 대화상자가 닫히면RESUMED
상태로 올바르게 이동합니다. 추가했습니다. (I88f0d, b/301811387)
버전 2.7.3
버전 2.7.3
2023년 9월 20일
androidx.navigation:navigation-*:2.7.3
이 출시되었습니다. 버전 2.7.3에 포함된 커밋을 확인하세요.
버그 수정
- Navigation with Fragments에서
visibleEntries
목록에 잘못된 항목이 포함되는 문제를 수정했습니다. 추가했습니다. (I5caa9, b/288520638) - 플로팅 창 대상 (예:
Dialogs
,Bottomsheets
등)이RESUMED
수명 주기 콜백을 가져오지 못하는 문제를 수정했습니다. 추가했습니다. (I3b866, b/287505132)
버전 2.7.2
버전 2.7.2
2023년 9월 6일
androidx.navigation:navigation-*:2.7.2
이 출시되었습니다. 버전 2.7.2에 포함된 커밋을 확인하세요.
버그 수정
- Navigation이 이제 Lifecycle
2.6.2
에 종속되므로, 대상의rememberSaveable
상태와ViewModel
소유SavedStateHandle
인스턴스가 프로세스 종료 및 재생성 후 올바르게 복원되지 않도록 하는rememberSaveable
과 Navigation Compose의NavHost
간의 상호작용을 수정합니다. b/298059596 및 b/289436035를 참조하세요. - 부분적으로 가려진 대화상자 (예: 최상위 대화상자가 아님)가
STARTED
상태가 아닌CREATED
수명 주기 상태에 있는 Navigation Compose에서 여러 대화상자를 동시에 표시할 때 발생하는 문제를 수정했습니다. (aosp/2728520 및 b/289257213 참고) - Navigation Compose에서 여러 대화상자를 동시에 표시할 때 최상위 대화상자를 닫으면 새 최상위 대화상자가
RESUMED
로 올바르게 이동하지 않고STARTED
수명 주기 상태에서 멈추는 문제를 수정했습니다. (aosp/2629401 및 b/286371387 참고) - Navigation Safe Args는 더 이상 작업이 실제로 실행되지 않는 경우 작업을 빠르게 인스턴스화하지 않습니다. 추가했습니다. (I0e385, b/260322841)
종속 항목 업데이트
- Navigation Compose가 이제 Compose 1.5.1에 종속됩니다.
버전 2.7.1
버전 2.7.1
2023년 8월 23일
androidx.navigation:navigation-*:2.7.1
이 출시되었습니다. 버전 2.7.1에 포함된 커밋을 확인하세요.
버그 수정
- Compose를 사용한 Navigation에서
Scaffold
를 사용할 때Lifecycle.State.DESTROYED
ViewModel
에 액세스하려고 할 때 오류가 발생할 수 있는 문제를 수정했습니다. 추가했습니다. (I1dc11, b/268422136)
버전 2.7.0
버전 2.7.0
2023년 8월 9일
androidx.navigation:navigation-*:2.7.0
이 출시되었습니다. 버전 2.7.0에 포함된 커밋을 확인하세요.
2.6.0 이후 중요 변경사항
Accompanist의 애니메이션
이제 AnimatedContent
가 안정화되었으므로 Accompanist Navigation Animation에서 Navigation Compose 자체로 코드를 다시 이동할 수 있었습니다.
즉, AnimatedNavHost
에 있던 맞춤 전환 설정에 관한 모든 지원이 NavHost
에서 직접 지원됩니다.
Accompanist Navigation Animation은 추가로 변경되지 않으며 곧 공식적으로 지원 중단되며 Navigation Compose 자체로 다시 이전하는 방법에 관한 안내가 제공될 예정입니다. 하지만 이미 최신 Accompanist 알파 (0.31.2-alpha
)를 사용 중인 경우 다른 API 변경사항이 필요하지 않은 이전 가이드와 반대될 것입니다. b/197140101을 참조하세요.
버그 수정
- 이제 Navigation Compose의 NavHost는 활동이 중지되고 재개된 후에도 시스템 백 호출을 올바르게 가로챕니다. 추가했습니다. (Icb6de, b/279118447)
종속 항목 업데이트
- 이제 Navigation이
1.1.0
의 Compose1.5.0
에 종속됩니다.
버전 2.7.0-rc01
2023년 7월 26일
androidx.navigation:navigation-*:2.7.0-rc01
이 출시되었습니다. 버전 2.7.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
NavHost
의 일부로 생성된EnterTransition
및ExitTransition
람다가NavHost
가 컴포지션에서 삭제된 후에도 메모리에 남아 있을 수 있는 문제를 수정했습니다. 추가했습니다. (I893d0)
알려진 문제
- Navigation 2.6.x에는 popUpTo로 탐색할 때
IllegalArgumentException
이 발생할 수 있는 문제가 있습니다. 여기에 제안된 권장사항과 유사하게 그래프를 재구성하여 이 예외를 피할 수 있습니다. b/287133013을 참조하세요.
버전 2.7.0-beta02
2023년 6월 28일
androidx.navigation:navigation-*:2.7.0-beta02
이 출시되었습니다. 버전 2.7.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation Compose에서
popUpTo
옵션으로 탐색을 사용하는 맞춤 전환에 올바른 z 순서가 있습니다.(/Ib1c3a, b/285153947)
버전 2.7.0-beta01
2023년 6월 7일
androidx.navigation:navigation-*:2.7.0-beta01
이 출시되었습니다. 버전 2.7.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation Compose의
NavHost
는Activity
가STOPPED
및RESUMED
이 된 후에도 시스템 백 호출을 올바르게 가로챕니다. 추가했습니다. (Icb6de, b/279118447)
버전 2.7.0-alpha01
2023년 5월 24일
androidx.navigation:navigation-*:2.7.0-alpha01
이 출시되었습니다. 버전 2.7.0-alpha01에 포함된 커밋을 확인하세요.
Accompanist의 애니메이션
이제 AnimatedContent
가 안정화되었으므로 Accompanist Navigation Animation에서 Navigation Compose 자체로 코드를 다시 이동할 수 있었습니다.
즉, AnimatedNavHost
에 있던 맞춤 전환 설정에 관한 모든 지원이 NavHost
에서 직접 지원됩니다.
Accompanist Navigation Animation은 추가로 변경되지 않으며 곧 공식적으로 지원 중단되며 Navigation Compose 자체로 다시 이전하는 방법에 관한 안내가 제공될 예정입니다. 하지만 이미 최신 Accompanist 알파 (0.31.2-alpha
)를 사용 중인 경우 다른 API 변경사항이 필요하지 않은 이전 가이드와 반대될 것입니다. b/197140101을 참조하세요.
버그 수정
- Navigation
2.6.0-rc02
에서:popUpTo
로 탐색하고 뷰를 다시 만들지 않고 백 스택에서 프래그먼트를 팝하면 시스템이 다시 작동하지 않는 Fragment의 Navigation 문제를 수정했습니다. 추가했습니다. (Ieb8d4, b/281726455)
종속 항목 업데이트
- Navigation이 이제 Compose
1.5.0-beta01
에 종속됩니다.
버전 2.6.0
버전 2.6.0
2023년 6월 7일
androidx.navigation:navigation-*:2.6.0
이 출시되었습니다. 버전 2.6.0에 포함된 커밋을 확인하세요.
2.5.0 이후 Navigation의 중요 변경사항
- 이제
OnDestinationChangedListener
에 전달된NavBackStackEntry
의arguments
및arguments
는 대상으로 이동할 때 생성된 변경 불가능한 인수의 사본일 뿐입니다. 즉, 이러한 번들의 변경사항은arguments
또는 다른OnDestinationChangedListener
인스턴스에 대한 후속 액세스에 반영되지 않습니다. - 이제
NavDeepLink
가 배열의 기본값을 지원합니다. 따라서 인수의 배열 유형에 매핑되는 반복 쿼리 매개변수를 지원할 수 있습니다. 이제NavType
에는 파싱된 두 값을 결합하도록 재정의할 수 있는 기본 메서드도 포함됩니다. - 이제
NavType
의 맞춤 서브클래스가serializeAsValue
를 재정의하여 값을 문자열로 직렬화할 수 있습니다. 이로써parseValue
를 통해 직렬화와 역직렬화를 모두NavType
클래스에 완전히 캡슐화할 수 있습니다. 이제StringType
이 지정된String
에서Uri.encode
를 호출하도록 이 메서드를 재정의합니다.
2.5.0 이후 Navigation Compose의 중요 변경사항
NavHost
를 사용하여 컴포저블을 미리 볼 때 이제 NavGraph의startDestination
이 기본적으로 표시됩니다.- 이제
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
은 인수가 부분적으로 또는 완전히 채워진 경로를 지원합니다. 인수는 항목의 인수와 정확히 일치해야 합니다. - 이제
navDeepLink
Kotlin DSL을 사용하여 빈NavDeepLink
를 만들려고 하면, 딥 링크가 유효하려면 URI, 작업 또는 MIME 유형이 필요함을 나타내는 린트 경고가 표시됩니다.
2.5.0 이후 프래그먼트를 사용한 Navigation의 중요 변경사항
NavHostFragment
가 더 이상 시스템 뒤로 버튼 자체를 가로채지 않습니다. 이렇게 하면 기본FragmentManager
가 시스템을 다시 처리할 수 있습니다. 이렇게 하면 프래그먼트1.7.0-alpha01
이상에서 Android U 기기에 인앱 뒤로 탐색 예측 애니메이션을 제공할 수 있습니다.- 프래그먼트를 사용하여 탐색을 사용할 때
FragmentManager
의 백 스택에 프래그먼트를 추가하는FragmentTransaction
를 수동으로 실행하려고 하면 이제IllegalArgumentException
이 발생합니다. 항상navigate()
API를 통해 프래그먼트를 추가해야 합니다. - 탐색 XML 파일의 활동 요소에서
app:data
및app:dataPattern
속성의 자리표시자로 정확한 문자열${applicationId}
를 사용하면 자리표시자는 인플레이션 시 자동으로 컨텍스트의packageName
으로 채워집니다. - 이제
FragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은 이제 진입 및 종료 프래그먼트 특수 효과가 완료될 때까지 기다린 후에 최종Lifecycle.State
를 이동합니다. - 이제
DialogFragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은DialogFragment
Lifecycle
이DESTROYED
로 이동할 때까지 기다린 후에 자신이DESTROYED
로 이동합니다. - 이제
NavHostFragment
를 사용하면onCreate()
이후뿐 아니라NavHostFragment
가FragmentManager
에 연결되는 즉시NavController
를 가져올 수 있습니다. - Navigation의 동적 기능 모듈 지원이 이제 세분화된 Play Feature Delivery 라이브러리에 종속됩니다.
- Navigation Safe Args가 이제 Android Gradle 플러그인 버전 7.3.0에 종속됩니다. 즉, 버전 7.3.0 이상과만 호환됩니다.
2.5.0 이후 NavigationUI의 중요 변경사항
- 탐색 그래프의 ID를
AppBarConfiguration
에 전달할 때(예:Menu
를 통해) 이제NavigationUI
는 그래프 내부의 모든 대상을 최상위 대상으로 잘못 표시하는 것이 아니라 해당 탐색 그래프의 시작 대상만 최상위 대상으로 간주합니다. 개별 대상의 ID를 전달하는 동작은 변경하지 않았습니다.AppBarConfiguration
의 새로운 함수인isTopLevelDestination
을 통해 자체 코드에 동일한 기능을 사용할 수 있습니다. - 이제 상단 앱 바 사용을 위한
NavigationUI
의setupWithNavController
통합은 자동 생성된 리소스 정수를 출력하지 않고android:label
에 있는ReferenceType
인수의R.string
값을 문자열 값으로 파싱합니다. NavigationUI
가 이제 선택된MenuItem
을 통한 탐색에 실패할 때 로그를 제공합니다.
버전 2.6.0-rc02
2023년 5월 24일
androidx.navigation:navigation-*:2.6.0-rc02
이 출시되었습니다. 버전 2.6.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
popUpTo
로 탐색하고 뷰를 다시 만들지 않고 백 스택에서 프래그먼트를 팝하면 시스템이 다시 작동을 멈추는 Fragment의 Navigation 문제를 수정했습니다. 추가했습니다. (Ieb8d4, b/281726455)
버전 2.6.0-rc01
2023년 5월 10일
androidx.navigation:navigation-*:2.6.0-rc01
이 출시되었습니다. 버전 2.6.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- Navigation에서
onResume()
수명 주기 콜백에서popUpTo
를 사용하여 탐색을 통해 프래그먼트를 삭제하면IllegalStateException
이 발생하는 프래그먼트 관련 문제를 수정했습니다. 추가했습니다. (I21884, b/279644470)
버전 2.6.0-beta01
2023년 4월 19일
androidx.navigation:navigation-*:2.6.0-beta01
이 출시되었습니다. 버전 2.6.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavBackStackEntry
가 맞춤toString
구현을 제공합니다. 추가했습니다. (Iff00b)
버그 수정
- 프래그먼트를 사용하여 탐색을 사용할 때
FragmentManager
의 백 스택에 프래그먼트를 추가하는FragmentTransaction
를 수동으로 실행하려고 하면 이제IllegalArgumentException
이 발생합니다. 항상navigate()
API를 통해 프래그먼트를 추가해야 합니다. 추가했습니다. (I6d38e) - 항목을 추가하는
navigate
와 동일한 프레임에서 항목을 삭제하는popBackStack
가 있으면 이제 백 스택의 결과 상단 항목이 일관되게RESUMED
Lifecycle.State
로 돌아갑니다. 추가했습니다. (Id8067, b/276495952)
버전 2.6.0-alpha09
2023년 4월 5일
androidx.navigation:navigation-*:2.6.0-alpha09
이 출시되었습니다. 버전 2.6.0-alpha09에 포함된 커밋을 확인하세요.
버그 수정
NavDestination
에 null을 허용하지 않는NavArgument
가 포함된 경우 이 대상의 경로에는 null을 허용하지 않는NavArgument
와 동일한 이름의 인수에 대한 자리표시자가 포함되어야 하는 잘못된 경로 검사가 수정되었습니다. 추가합니다. (Ic62bf, b/274697949)- 이제
Action/MimeType
에 기반한 딥 링크 탐색이 탐색 작업에Action/MimeType
와 일치하는NavDestination
에 필요한 null을 허용하지 않는NavArgument
가 누락된 경우 실패합니다. 추가합니다. (Ibfa17, b/271777424) NavController
가 이전 그래프와 동일한 경로 및 대상으로 그래프를 설정하면 이제 현재 그래프 노드와 백 스택 대상을 새 인스턴스로 올바르게 대체합니다. 이에 따라 Navigation Compose에 상태를 저장하지 않고onLaunchSingleTop
를 사용할 때 발생하는 비정상 종료 문제가 수정되었습니다. 루트 그래프와 연결된 대상으로 이동할 때 발생하는 오류도 빌드되고 잘못된 백 스택이 수정되었습니다. 추가합니다. (I5bc58, b/275258161, b/275407804)
버전 2.6.0-alpha08
2023년 3월 22일
androidx.navigation:navigation-*:2.6.0-alpha08
이 출시되었습니다. 버전 2.6.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavHostFragment
를 사용하면onCreate()
이후뿐 아니라NavHostFragment
가FragmentManager
에 연결되는 즉시NavController
를 가져올 수 있습니다. 추가했습니다. (Ic6382, b/220186282)
버그 수정
- null을 허용하지 않는 인수가 포함된 중첩 그래프를 표시할 때 발생하는
NullPointerException
을 수정했습니다. 추가했습니다. (6b3581, b/249988437) popUpTo
로 탐색을 실행한 후 시스템을 다시 사용하면NavController
상태가 올바른 항목에 표시됩니다. 추가했습니다. (I3a8ec, b/270447657)- 이제
FragmentNavigator
가 시스템 뒤로 또는popBackStack()
를 통해 백 스택이 표시될 때 및 트랜잭션이 프래그먼트에 효과를 사용하는지 여부를 올바르게 표시합니다. 추가했습니다. (I81bdf) FragmentNavigator
의 탐색을 사용하지 않고FragmentManager
를 사용해도 더 이상 비정상 종료가 발생하지 않습니다. (b17204, b/274167493)
종속 항목 업데이트
- Navigation이 이제 Lifecycle
2.6.1
에 종속됩니다. (586fe7 참조) - Navigation이 이제 SavedState
1.2.1
에 종속됩니다. 추가했습니다. (078e4e) - Navigation이 이제 ProfileInstaller
1.3.0
에 종속됩니다. 추가했습니다. (512f0c)
버전 2.6.0-alpha07
2023년 3월 8일
androidx.navigation:navigation-*:2.6.0-alpha07
이 출시되었습니다. 버전 2.6.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
- 경로를 사용하는
getBackStackEntry
,popBackStack
,clearBackStack
API 변형이 이제 null을 허용하는 인수와 null을 허용하는 쿼리 매개변수가 있는 경로 패턴을 사용합니다. (I22294, b/269302500) NavController
에서clearBackStack()
를 호출하면 지워진 백 스택과 관련된 프래그먼트 관리자에 저장된 상태가 삭제되지 않는 문제를 수정했습니다. 추가했습니다. (Ic1cce, b/271190202)- 탭 간에 시스템 뒤로를 사용할 때
BottomNavigationView
의 잘못된MenuItem
가 강조표시되는 2.6.0-alpha06의 회귀 문제가 수정되었습니다. 추가했습니다. (I634f6, b/270447657) Animation
사용 시NavBackStackEntry
가 RESUMED 상태로 이동되지 않던 2.6.0-alpha06의 회귀 문제가 수정되었습니다. 추가했습니다. (Ib3589, b/269646882)
버전 2.6.0-alpha06
2023년 2월 22일
androidx.navigation:navigation-*:2.6.0-alpha06
이 출시되었습니다. 버전 2.6.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
NavHost
를 사용하여 컴포저블을 미리 볼 때 이제 NavGraph의startDestination
이 기본적으로 표시됩니다. (I2b89f)
API 변경사항
- 이제 모든
NavController
navigate
오버로드가@MainThread
로 주석 처리되어 기본 스레드에서 호출됩니다. (I2c0b0, b/263427111)
버그 수정
- 동적 프래그먼트 탐색을 사용하는 동안 탐색을 시도할 때 발생하는 비정상 종료 문제를 수정했습니다. (I3ee29, b/268360479)
- 시스템 뒤로 버튼을 통해 다른 프래그먼트로 이동할 때 하단 탐색 메뉴가 올바른 선택 항목으로 업데이트되지 않는 버그를 수정했습니다. (If559f, b/269044426)
알려진 문제
- 프래그먼트를 사용하여 탐색을 사용할 때
Animation
API를 사용하면NavBackStackEntry
의 수명 주기가RESUMED
에 도달하지 못합니다. b/269646882를 참조하세요. - 프래그먼트가 있는 탐색을 사용하고
BottomNavigation
로 탐색할 때 여러 항목이 있는 백 스택을 복원하려고 하면BottomMenuItem
가 올바르게 업데이트되지 않습니다. b/270447657을 참조하세요. - 프래그먼트로 탐색을 사용할 때 상태를 복원한 후
NavBackStackEntry
Lifecycle
는 프래그먼트가DESTROYED
일 때DESTROYED
를 가져오지 않습니다 . b/270610768을 참조하세요.
버전 2.6.0-alpha05
2023년 2월 8일
androidx.navigation:navigation-*:2.6.0-alpha05
가 출시되었습니다. 버전 2.6.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
은 인수가 부분적으로 또는 완전히 채워진 경로를 지원합니다. 인수는 항목의 인수와 정확히 일치해야 합니다. (Iebd28, Ic678c, I3b37b, b/257514373) - 이제
FragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은 이제 진입 및 종료 프래그먼트 특수 효과가 완료될 때까지 기다린 후에 최종Lifecycle.State
를 이동합니다. (I3cb19, b/238686802) - 이제
DialogFragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은DialogFragment
Lifecycle
이DESTROYED
로 이동할 때까지 기다린 후에 자신이DESTROYED
로 이동합니다. (I53ee5, b/261213893)
API 변경사항
- 이제
Navigator
가NavBackStackEntries
를 중간Lifecycle.State
로 이동할 수 있도록NavigatorState
가prepareForTransition
API를 제공합니다. (I42c21, b/238686802) - 이제
backstack
속성을 통해NavGraphNavigator
또는ComposeNavigator
에 연결된 백 스택에 액세스할 수 있습니다.ComposeNavigator
는onTransitionComplete()
콜백을 노출하여 탐색 또는popBackStack
작업을 실행한NavBackStackEntry
를 완료로 표시합니다. (I02062, I718db, b/257519195)
버그 수정
- 이제
push/popWithTransition
API를 사용하고 있고 항목이 이미 처리되고 있을 때 Navigator가 무작동 상태가 됩니다. (Iadbfa, b/261213893) launchSingleTop
을 중첩된NavGraph
와 함께 사용하면startDestination
의 원래 대상에서 시작하는 모든 대상이 백 스택 상단에만 올바르게 추가됩니다. (Id4bea, b/253256629)- 이제
launchSingleTop
플래그를 true로 설정하여 동일한 대상으로 이동하면 Navigation이DialogFragment
인스턴스를 올바르게 대체합니다. (I45b5a, b/149572817) - 정확히 19자인 인수를 사용하면 Navigation SafeArgs에서 더 이상 컴파일 오류가 발생하지 않습니다. (Id60bc, b/257110095)
버전 2.6.0-alpha04
2022년 11월 9일
androidx.navigation:navigation-*:2.6.0-alpha04
가 출시되었습니다. 버전 2.6.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavType
의 맞춤 서브클래스가serializeAsValue
를 재정의하여 값을 문자열로 직렬화할 수 있습니다. 이로써parseValue
를 통해 직렬화와 역직렬화를 모두NavType
클래스에 완전히 캡슐화할 수 있습니다. 이제StringType
이 지정된String
에서Uri.encode
를 호출하도록 이 메서드를 재정의합니다. (Ie5213, b/247637434) NavigationUI
가 이제 선택된MenuItem
을 통한 탐색에 실패할 때 로그를 제공합니다. (I2af5a, b/247730357)
버그 수정
- 이제 Navigation 딥 링크가 그래프 초기화 대신 지연 파싱되어 시작 시 앱 성능이 개선될 수 있습니다. (Iab0ab)
- null 기본 인수가 있는 대상에 딥 링크로 연결한 후 위로 이동할 때 발생하는 비정상 종료 문제를 수정했습니다. (I51c24, b/243183636)
종속 항목 업데이트
- Navigation의 동적 기능 모듈 지원이 이제 세분화된 Play Feature Delivery 라이브러리에 종속됩니다. (Ib4ddc)
- Navigation Safe Args가 이제 Android Gradle 플러그인 버전 7.3.0에 종속됩니다. 즉, 버전 7.3.0 이상에서만 호환됩니다. (I47e49)
버전 2.6.0-alpha03
2022년 10월 24일
androidx.navigation:navigation-*:2.6.0-alpha03
이 출시되었습니다. 버전 2.6.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.5.3
부터:Crossfade
에서 구성할 수 있는 대상이 없으면NavHost
에서 더 이상NoSuchElementException
이 발생하지 않습니다. 이제 컴포지션을 건너뜁니다. (Ieb46e, b/253299416) - Navigation
2.5.3
부터: 대상이 백 스택에서 사라질 때 저장된 Compose 상태(예:rememberSaveable
사용)가 삭제되지 않는 문제가 수정되었습니다. (I64949)
종속 항목 업데이트
- Navigation은 이제 Fragment
1.5.4
에 종속됩니다. (Icd424)
버전 2.6.0-alpha02
2022년 10월 5일
androidx.navigation:navigation-*:2.6.0-alpha02
가 출시되었습니다. 버전 2.6.0-alpha02에 포함된 커밋을 확인하세요.
동작 변경사항
- 탐색 그래프의 ID를
AppBarConfiguration
에 전달할 때(예:Menu
를 통해) 이제NavigationUI
는 그래프 내부의 모든 대상을 최상위 대상으로 잘못 표시하는 것이 아니라 해당 탐색 그래프의 시작 대상만 최상위 대상으로 간주합니다. 개별 대상의 ID를 전달하는 동작은 변경하지 않았습니다.AppBarConfiguration
의 새로운 함수인isTopLevelDestination
을 통해 자체 코드에 동일한 기능을 사용할 수 있습니다. (Ie936e, b/238496771)
버그 수정
- 이제
navigation:navigation-fragment
구성요소가 Fragment 버전1.5.2
에 종속됩니다. (I00ba4) FloatingWindow
대상(예: 대화상자)으로 이동할 때 선택한 메뉴 항목이 더 이상 업데이트되지 않습니다. (I4cde8, b/240308330)
버전 2.6.0-alpha01
2022년 9월 7일
androidx.navigation:navigation-*:2.6.0-alpha01
이 출시되었습니다. 버전 2.6.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 상단 앱 바 사용을 위한
NavigationUI
의setupWithNavController
통합은 자동 생성된 리소스 정수를 출력하지 않고android:label
에 있는ReferenceType
인수의R.string
값을 문자열 값으로 파싱합니다. (I5f803, b/167959935) - 이제
NavDeepLink
가 배열의 기본값을 지원합니다. 따라서 인수의 배열 유형에 매핑되는 반복 쿼리 매개변수를 지원할 수 있습니다. 이제NavType
에는 파싱된 두 값을 결합하도록 재정의할 수 있는 기본 메서드도 포함됩니다. (Id68c3, b/209977108) - 탐색 XML 파일의 활동 요소에서
app:data
및app:dataPattern
속성의 자리표시자로 정확한 문자열${applicationId}
를 사용하면 자리표시자는 인플레이션 시 자동으로 컨텍스트의packageName
으로 채워집니다. (Iaabde, b/234223561) - 이제
navDeepLink
Kotlin DSL을 사용하여 빈NavDeepLink
를 만들려고 하면, 딥 링크가 유효하려면 URI, 작업 또는 MIME 유형이 필요함을 나타내는 린트 경고가 표시됩니다. (I08d2f, b/154038883)
API 변경사항
android:label="{arg}"
형식의 인수가 있는 동적 라벨을 문자열로 파싱하는 새NavDestination
확장 함수를 추가했습니다.R.string
값을 문자열 값으로 파싱하여ReferenceType
인수를 지원합니다. (I07d89, b/236269380)
동작 변경사항
- NavBackStackEntry의
arguments
및OnDestinationChangedListener
에 전달된arguments
는 이제 대상으로 이동할 때 생성된 변경 불가능한 인수의 사본일 뿐입니다. 즉, 이러한 번들의 변경사항은arguments
또는 다른OnDestinationChangedListener
인스턴스에 대한 후속 액세스에 반영되지 않습니다. (I676f5)
버그 수정
- Navigation
2.5.2
부터: 이제 동적 Navigation은 다른 모듈로 이동하기 전에 먼저 다른 모듈에서 Activity 대상을 올바르게 설치하려고 시도합니다. (Ia2c16, b/240292838) - Navigation
2.5.2
부터: 이제 동일한 대상으로 이동하고launchSingleTop
플래그를 true로 설정하면 Navigation이 Fragment 인스턴스를 올바르게 대체합니다. (I5a2f1, b/237374580) - Navigation
2.5.2
부터: 새로 표시된 시작 대상과 상위 요소를 공유하는 이중 중첩 그래프로 이동할 때 발생하는IllegalStateException
이 수정되었습니다. (I9f7cb, b/243778589)
버전 2.5
버전 2.5.3
2022년 10월 24일
androidx.navigation:navigation-*:2.5.3
이 출시되었습니다. 버전 2.5.3에 포함된 커밋을 확인하세요.
버그 수정
Crossfade
에서 구성할 수 있는 대상이 없을 때NavHost
에서 더 이상NoSuchElementException
이 발생하지 않습니다. 이제 컴포지션을 건너뜁니다. (Ieb46e, b/253299416)- 대상이 백 스택에서 사라질 때 저장된 Compose 상태(예:
rememberSaveable
사용)가 삭제되지 않는 문제가 수정되었습니다. (I64949)
버전 2.5.2
2022년 9월 7일
androidx.navigation:navigation-*:2.5.2
가 출시되었습니다. 버전 2.5.2에 포함된 커밋을 확인하세요.
버그 수정
- 이제 동적 Navigation은 다른 모듈로 이동하기 전에 먼저 다른 모듈에서 Activity 대상을 올바르게 설치하려고 시도합니다. (Ia2c16, b/240292838)
- 이제 동일한 대상으로 이동하고
launchSingleTop
플래그를 true로 설정하면 Navigation이 Fragment 인스턴스를 올바르게 대체합니다. (I5a2f1, b/237374580) - 새로 표시된 시작 대상과 상위 요소를 공유하는 이중 중첩 그래프로 이동할 때 발생하는
IllegalStateException
문제를 해결했습니다. (I9f7cb, b/243778589)
종속 항목 업데이트
- Navigation
2.5.2
는 이제 Fragment1.5.2
에 종속됩니다. (aosp/2178734)
버전 2.5.1
2022년 7월 27일
androidx.navigation:navigation-*:2.5.1
이 출시되었습니다. 버전 2.5.1에 포함된 커밋을 확인하세요.
버그 수정
Bundle
에 저장된 맞춤 인수 유형을 사용할 때Navigation Safe Args
가 더 이상 생성된 클래스에서 지원 중단 경고를 유발하지 않습니다. (Id86ed, b/237725966)
종속 항목 업데이트
- 이제 탐색 라이브러리가 Lifecycle
2.5.1
에 종속됩니다. (Ib4451) - 이제 탐색 라이브러리가 Activity
1.5.1
에 종속됩니다. (I3efe8) - 이제 탐색 라이브러리가 Fragment
1.5.1
에 종속됩니다. (I56177)
버전 2.5.0
2022년 6월 29일
androidx.navigation:navigation-*:2.5.0
이 출시되었습니다. 버전 2.5.0에 포함된 커밋을 확인하세요.
2.4.0 이후 중요 변경사항
- CreationExtras 통합 - 이제
Navigation
이 Lifecycle2.5.0
의CreationExtras
를 통해 스테이트리스(Stateless)ViewModelProvider.Factory
를 제공할 수 있습니다.
Navigation SafeArgs
Navigation Safe Args
가7.0.4
를 사용하도록Android Gradle Plugin
종속 항목을 업그레이드했으며7.0
이전의 AGP 버전을 위한 호환성을 삭제했습니다.- applicationId 대신 사용되는 네임스페이스 build.gradle 속성 지원이 추가되었습니다.
기타 변경사항
visibleEntries
API는 더 이상 실험용이 아니며, 대상이 현재NavController
에 따라 표시되는 모든 항목을 검색하는 함수를 제공합니다.
버전 2.5.0-rc02
2022년 6월 15일
androidx.navigation:navigation-*:2.5.0-rc02
가 출시되었습니다. 버전 2.5.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- Navigation Compose
NavHost
사용 시, 하단 대상 간에 빠르게 전환하는 경우 발생하는 비정상 종료 문제를 수정했습니다. (I3979a, b/234054916) applicationId
가 없는applicationIdSuffix
와 네임스페이스를 사용하거나applicationId
와 네임스페이스가 다른 경우Navigation SafeArgs
가 더 이상 다운되지 않습니다. (I754b1, b/233119646)- 이제
NavArgument
에 있는 맞춤toString()
함수로 인수의 내부 값을 표시할 수 있습니다. (I900a8)
버전 2.5.0-rc01
2022년 5월 11일
androidx.navigation:navigation-*:2.5.0-rc01
이 출시되었습니다. 버전 2.5.0-rc01에 포함된 커밋을 확인하세요.
새로운 기능
navigation.xml
파일의<activity>
요소 내에<deeplink>
요소를 배치한 경우 이와 관련된 경고를 표시하는 새로운 린트 규칙이 추가되었습니다. (Ic15a5, b/178403185)
버그 수정
- 이제
NavHost
및DialogHost
의 컴포저블 범위가 올바른 순서로 삭제됩니다. 즉, 내부 컴포저블은 외부 컴포저블보다 먼저 삭제됩니다. (I157e6) - 이제 Navigation SafeArgs는
ArgumentsGenerationTask
의PathSensitivity.RELATIVE
를 사용하여 캐시를 재배치할 수 있습니다. 즉, 이제 캐시 항목이 CI 빌드에서 로컬 빌드까지 재사용될 수 있습니다. (I5f67c, b/173420454) getBackStackEntry()
호출을 감싸는remember
호출도NavBackStackEntry
객체를 키로 전달하도록UnrememberedGetBackStackEntryDetector
린트 규칙이 업데이트되었습니다. (Ib7081, b/227382831)
버전 2.5.0-beta01
2022년 4월 20일
androidx.navigation:navigation-*:2.5.0-beta01
이 출시되었습니다. 버전 2.5.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
dismiss()
호출을 실행할 때DialogNavigator
가popWithTransition
을 사용합니다. 이로써 시스템 뒤로를 사용하거나 대화상자 외부를 탭하여 대화상자를 닫을 때IllegalStateException
을 일으키는dialog
대상 내ViewModel
사용으로 발생하는 경합 상태가 해결됩니다. (Id7376, b/226552301)
종속 항목 업데이트
- 탐색이 이제 Lifecycle
2.5.0-beta01
에 종속되므로 여러 백 스택을 사용할 때 기본이 아닌 하단 탐색 탭의NavHost
내에 다른NavHost
를 중첩할 때IllegalStateException
이 수정되었습니다.
버전 2.5.0-alpha04
2022년 4월 6일
androidx.navigation:navigation-*:2.5.0-alpha04
가 출시되었습니다. 버전 2.5.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
visibleEntries
가 더 이상 실험용이 아닙니다. (I4829f, b/225394514)
버그 수정
- 이제 NavHost가
NavController
의visibleEntries
를 사용하여 조합할 항목을 결정합니다. 즉, 중첩된 NavHost를 사용할 때 이제 내부NavHost
가 적절하게 애니메이션 처리됩니다. (I4ba2b, b/225394514) - 이제
NavController
에서 제공하는visibleEntries
StateFlow
가 현재 수명 주기 상태가 아닌 항목 최대 수명 주기 상태를 기반으로 합니다. 즉,navController
의 호스트 수명 주기가 STARTED보다 낮아져도 표시되는 전체 목록이 동일하게 유지됩니다. (I9e2a8, b/225394514) - 이제
SavedStateViewFactory
가SavedStateRegistryOwner
로 초기화된 경우에도CreationExtras
사용을 지원합니다. 추가 인수가 제공되면 초기화된 인수는 무시됩니다. (I6c43b, b/224844583) - 이제
NavDeepLink
에서 값이 없는 단일 쿼리 매개변수로 URI를 파싱할 수 있습니다. (I0efe8, b/148905489) - 이제 빈 문자열도 딥 링크에서 유효한 인수로 간주됩니다. (I70a0d, b/217399862)
- 네임스페이스를 사용할 때
AndroidManifest.xml
가 없어도Navigation Safe Args
이 더 이상 다운되지 않습니다. (I17ccf, b/227229815)
버전 2.5.0-alpha03
2022년 2월 23일
androidx.navigation:navigation-*:2.5.0-alpha03
이 출시되었습니다. 버전 2.5.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
CreationExtras
를by navGraphViewModels
에 전달하여ViewModel
을 만들 수 있습니다. (I29217, b/217618359)
버그 수정
NavDeepLinks
는 이제 경로/딥 링크 URI에 삽입되어 인코딩된 새 행 문자를 올바르게 지원합니다. (I513d1, b/217815060)- 이제
CreationExtras
는NavBackStackEntries
와 함께 사용되어 ViewModels를 만들 때 올바르게 작동합니다. (I69161, b/217617710) - Navigation Safe Args는 이제 AndroidManifest의 패키지 대신
build.gradle
에 정의된 네임스페이스 사용을 지원합니다. (I659ef, b/217414933)
버전 2.5.0-alpha02
2022년 2월 9일
androidx.navigation:navigation-*:2.5.0-alpha02
가 출시되었습니다. 버전 2.5.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.4.1
에서: 이제 중첩된 그래프와 함께 viewbinding을 사용할 때NavHostFragment
가OnBackPressedDispatcher
를 올바르게 설정합니다. (Ifbb51, b/214577959) - Navigation
2.4.1
에서: 여러 개의 중첩된NavGraph
를 통한 딥 링크 시 백 스택에 이제 중간 시작 대상이 올바르게 포함됩니다. (I504c0, b/214383060)
버전 2.5.0-alpha01
2022년 1월 26일
androidx.navigation:navigation-*:2.5.0-alpha01
이 출시되었습니다. 버전 2.5.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
NavBackStackEntry
는 이제 Lifecycle2.5.0-alpha01
의 일부로 도입된 ViewModel CreationExtras와 통합됩니다. (Ib9fe2, b/207012490)
버그 수정
- 프래그먼트의
onCreate()
에서by navGraphViewModels()
를 통해 생성된ViewModel
에 액세스할 때IllegalStateException
이 발생하는 문제를 수정했습니다. (I8a14d) NavDeepLink
는 더 이상 인수를 불필요하게 두 번 디코딩하지 않습니다. 즉, 이제 적절한 인수가 최종 대상에 전달됩니다. (I31b0a, b/210711399)
Safe Args
- 이제 Safe Args는 Android Gradle 플러그인 버전 7.0.4에 종속됩니다. 즉, Navigation Safe Args는 버전 7.0 이전의 Android 스튜디오와 더 이상 호환되지 않으며 이제 Android Gradle 플러그인 7.1.0 이상과 호환됩니다. (I41c88, b/213086135, b/207670704)
버전 2.4.2
버전 2.4.2
2022년 4월 6일
androidx.navigation:navigation-*:2.4.2
가 출시되었습니다. 버전 2.4.2에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.5.0-alpha03
에서 백포트됨: 이제NavDeepLinks
가 이제 경로/딥 링크 URI에 삽입되는 인코딩된 새로운 행 문자를 알맞게 지원합니다. (I513d1, b/217815060) - Navigation
2.5.0-alpha03
에서 백포트됨: 이제 Navigation SafeArgs가 AndroidManifest의 패키지 대신build.gradle
에 정의된 네임스페이스 사용을 지원합니다. (I659ef, b/217414933) - Navigation
2.5.0-alpha04
에서 백포트됨: 네임스페이스를 사용할 때AndroidManifest.xml
이 없더라도Navigation Safe Args
이 더 이상 다운되지 않습니다. (I17ccf, b/227229815) - Navigation
2.5.0-alpha04
에서 백포트됨: 이제 빈 문자열도 딥 링크에서 유효한 인수로 간주됩니다. (I70a0d, b/217399862)
버전 2.4.1
버전 2.4.1
2022년 2월 9일
androidx.navigation:navigation-*:2.4.1
이 출시되었습니다. 버전 2.4.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제 중첩된 그래프와 함께 viewbinding을 사용할 때
NavHostFragment
가OnBackPressedDispatcher
를 올바르게 설정합니다. (Ifbb51, b/214577959) - 여러 개의 중첩된
NavGraph
를 통한 딥 링크 시 이제 백 스택에 중간 시작 대상이 올바르게 포함됩니다. (I504c0, b/214383060) - Navigation
2.5.0-alpha01
에서 백포팅됨: 프래그먼트의onCreate()
에서by navGraphViewModels()
를 통해 만들어진 ViewModel에 액세스할 때IllegalStateException
과 함께 실패하는 문제를 수정했습니다. (I8a14d) - Navigation
2.5.0-alpha01
에서 백포팅됨:NavDeepLink
가 더 이상 인수를 불필요하게 두 번 디코딩하지 않습니다. 즉, 제대로 디코딩된 인수가 이제 최종 대상에 전달됩니다. (I31b0a, b/210711399) - Navigation
2.5.0-alpha01
에서 백포팅됨: 이제 Safe Args가 Android Gradle 플러그인 버전 7.0.4에 종속됩니다. 즉, Navigation Safe Args는 버전 7.0 이전의 Android 스튜디오와 더 이상 호환되지 않으며 이제 Android Gradle 플러그인 7.1.0 이상과 호환됩니다. (I41c88, b/213086135, b/207670704)
버전 2.4.0
버전 2.4.0
2022년 1월 26일
androidx.navigation:navigation-*:2.4.0
이 출시되었습니다. 버전 2.4.0에 포함된 커밋을 확인하세요.
2.3.0 이후 중요 변경사항
- 모든 Navigation 아티팩트가 Kotlin으로 다시 작성되었습니다. 이로 인해 제네릭을 사용하는 클래스(예:
NavType
서브클래스)의 null 허용 여부가 개선되었습니다.-ktx
아티팩트의 일부로 사용된 모든 Kotlin 확장 함수가 각각의 주요 아티팩트로 이동되었습니다.-ktx
아티팩트는 계속 게시되지만 현재 완전히 비어 있습니다. - 이제
navigation-fragment
아티팩트에는 새AbstractListDetailFragment
를 통해 사전 빌드된 두 창 레이아웃 구현이 포함되어 있습니다. 이 프래그먼트는 구현 예에 나와 있는 것처럼,SlidingPaneLayout
을 사용하여 목록 창(서브클래스에서 제공됨)과NavHostFragment
를 구현으로 사용하는 세부정보 창을 관리합니다. NavController
의currentBackStackEntryAsFlow()
메서드는 현재NavBackStackEntry
가 변경될 때마다 내보내는Flow
를 제공합니다. 이 흐름은OnDestinationChangedListener
를 수동으로 관리하기 위한 대안으로 사용할 수 있습니다.- NavController는 이제 실험용
visibleEntries
속성을 통해 표시되는 모든NavBackStackEntry
인스턴스 목록을StateFlow
로 가져오는 기능을 제공합니다. - 이제
NavType
클래스를 확장하여 맞춤 NavTypes를 만들 수 있습니다. 맞춤 유형은 탐색 그래프 Kotlin DSL을 통하는 등 프로그래매틱 방식으로 탐색 그래프를 빌드할 때만 지원됩니다. Navigation에서 이제 맞춤 NavigationUI를 구현하는 데 사용할 수 있는
findStartDestination()
및getHierarchy()
API를 제공합니다.findStartDestination()
은startDestination
자체가 중첩된NavGraph
인 경우에도 그래프로 이동할 때 표시되는 실제 시작 대상을 찾는NavGraph
의 확장 함수입니다.getHierarchy()
는 지정된 대상이 다른 그래프의 계층 내에 있는지 확인하는 데 사용할 수 있는NavDestination
의 함수입니다.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
BottomNavigationView
를 사용하는NavigationUI
메서드가 대신 Material1.4.0
,NavigationBarView
에 도입된 슈퍼클래스를 사용하도록 업데이트되었습니다. 이렇게 하면 이러한 메서드를NavigationRailView
와 함께 사용할 수 있습니다.XML을 통해
<action>
요소를 확장할 때 애니메이션 속성은app:enterAnim="?attr/transitionEnter"
구문을 사용하여 테마에서 가져온 속성을 사용할 수 있습니다.이제 Safe Args는 각
NavArgs
클래스의fromSavedStateHandle()
메서드를 생성합니다. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
탐색 경로 및 Kotlin DSL
Navigation의 이전 버전은 동위 대상에서 대상을 고유하게 식별할 수 있는 정수형의 상수 ID를 사용하는 각 대상에 의존했습니다. 이 ID를 사용하면 작업을 통해 또는 직접 대상으로 navigate()
할 수 있었습니다. 이는 여전히 유효하고 유용하지만, 특별히 XML로 탐색 그래프를 정의하고 자동 생성된 R.id
상수 또는 Safe Args(빌드 시간에 이러한 상수를 사용하여 코드를 생성함)를 사용할 수 있는 경우, 고유한 정수를 사용하는 시스템에서 Navigation Kotlin DSL을 통해 런타임 시 프로그래매틱 방식으로 빌드된 전체 동적 그래프를 지원하는 데 필요한 구문의 의미와 표현성을 포착하지 못했습니다.
이 버전에서는 경로를 사용하여 탐색 그래프의 대상을 고유하게 식별하는 새 옵션을 도입했습니다. 경로는 대상의 고유 경로를 정의하는 String
입니다. 이제 대상 ID를 사용하던 모든 Kotlin DSL 메서드가 지원 중단되고 경로를 사용하는 동등한 API로 대체됩니다.
각 경로는 대상을 정의하는 Uri
의 '경로' 부분으로 취급되어야 합니다. 예를 들면, home
, profile/{userId}
, profile/{userId}/friends
등입니다. 대상의 ID가 특정 콘텐츠와 연결된 경우 이러한 동적 인수는 암시적 딥 링크와 동일한 규칙에 따라 경로의 일부여야 합니다.
이전에는 ID만 사용하던 모든 NavController
API에는 이제 경로 String
을 취하는 오버로드가 있습니다. 여기에는 navigate()
, popBackStack()
, popUpTo()
및 getBackStackEntry()
가 포함됩니다.
이로 인해 API에 몇 가지 영향이 있었습니다.
- Kotlin DSL에서
popUpTo
Kotlin 속성이 지원 중단되고popUpToId
로 대체되었습니다. getStartDestination()
API가 지원 중단되고getStartDestinationId()
로 대체되었습니다.
ID로 탐색할 때와 달리 경로를 통한 탐색은 중첩된 그래프에서 모든 대상으로 직접 이동할 수 있다는 점에서 암시적 딥 링크와 동일한 규칙을 따르므로 이러한 경로는 각 대상에 외부적으로 표시할 수 있는 딥 링크를 명시적으로 추가하지 않아도 다중 모듈 프로젝트에 사용할 수 있습니다.
Navigation Compose
navigation-compose
아티팩트는 Navigation 구성요소와 Jetpack Compose 간 통합을 제공합니다. @Composable
함수를 애플리케이션의 대상으로 사용합니다.
이번 버전에서는 다음을 제공합니다.
NavHost
컴포저블을 사용하면 Kotlin DSL을 통해composable
과dialog
대상을 사용하는 탐색 그래프를 구성할 수 있습니다. 또한, Accompanist Navigation Material의 Navigator와 같은 선택적 Navigator를 지원할 수 있습니다.- 대상 간 크로스 페이딩을 의무적으로 지원합니다. 실험용 Compose API를 통해 들어가기와 나가기 전환을 제어하는 데 Accompanist Navigation Animation을 사용할 수 있습니다.
- 구성 가능한 각 대상으로
Lifecycle
의 범위를 지정. 각 대상은 들어가기 전환이 종료될 때만RESUMED
상태에 도달하고 나가기 전환이 시작되면 즉시STARTED
가 됩니다. 따라서,Lifecycle
이RESUMED
일 때navigate
호출을 트리거하는 방식으로만 모든IllegalStateException
과 멀티 터치 문제를 피할 수 있습니다. - 대상 수준에서 Lifecycle ViewModel Compose
2.4.0
의viewModel()
API 또는 Hilt Navigation Compose1.0.0
의hiltViewModel()
을 통해ViewModel
의 범위를 지정. 이 ViewModel은 구성 변경사항을 유지하는 범위를 제공하고 백 스택(컴포저블 콘텐츠가 달리 배치된 경우)과 영구 폐기를 나타내는 ViewModelonCleared()
의 신호에 있으며NavBackStackEntry
와 연결된 상태를 정리합니다. - 대상 수준에서
rememberSaveable
상태 범위를 지정. 대상으로 돌아갈 때 모든 컴포저블 상태가 자동으로 저장되고 복원됩니다. - 프로세스가 중단되어 재생성된 후
NavController
의 상태와 대상의 상태를 저장하고 복원할 수 있도록 완벽하게 지원합니다. - 시스템 뒤로 버튼을 사용하여 자동으로 통합
인수 전달, 대상에 딥 링크 연결, 이전 대상에 결과 반환 지원
rememberNavController()
및currentBackStackEntryAsState()
에 특정 도우미를 작성하여 호이스팅 상태를 허용하고NavController
를NavHost
(예: 하단 탐색 메뉴) 외부의 컴포저블에 연결
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
자세한 내용은 Compose Navigation 가이드를 참고하세요.
여러 백 스택
NavController는 대상의 백 스택을 관리하고, 개발자가 백 스택으로 navigate()
하면 백 스택에 대상을 추가하고, 개발자가 popBackStack()
을 호출하거나 시스템 뒤로 버튼을 트리거하면 백 스택을 삭제하는 일을 담당합니다. 기존 NavOptions
클래스 및 탐색 그래프 XML에서 <action>
요소로의 통합이 확장되어 백 스택 저장 및 복원을 지원합니다.
이러한 변경의 일환으로 이제 onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
및 NavigationView.setupWithNavController()
의 NavigationUI
메서드는 표시된 대상의 상태를 자동으로 저장하고 복원하기 때문에 코드를 변경하지 않아도 여러 백 스택을 지원할 수 있습니다. 이는 Navigation with Fragments를 사용할 때 여러 백 스택과 통합하는 데 권장되는 방법입니다.
상태를 저장하고 복원하기 위한 기본 API는 여러 표면을 통해 노출됩니다.
Navigation XML에서
<action>
요소는 이제app:popUpToSaveState
및app:restoreState
의 부울 속성을 사용하여app:popUpTo
를 통해 표시된 모든 대상의 상태를 저장하고app:destination
으로 전달된 대상에 연결된 상태를 복원할 수 있습니다.<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
Kotlin DSL에서popUpTo
빌더에restoreState
부울 속성과saveState
부울 속성을 추가할 수 있습니다.// 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.Builder
를 통해NavOptions
객체를 수동으로 빌드할 때setRestoreState()
를 사용하고 추가saveState
매개변수를 취하는setPopUpTo()
에 새 오버로드를 사용할 수 있습니다.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);
이제
popBackStack()
에 대한 프로그래매틱 방식의 호출에는 추가로saveState
매개변수를 포함할 수 있습니다.clearBackStack()
메서드를 사용하여popBackStack()
또는popUpToSaveState
로 저장된 상태를 삭제할 수 있습니다.
어떤 경우든 NavController
는 탐색 대상 범위의 ViewModel
인스턴스를 포함하여 각 NavBackStackEntry
의 상태를 저장하고 복원합니다. 각 Navigator
가 자체 상태를 저장하고 복원할 수 있도록 Navigator
API가 업데이트되었습니다.
동작 변경사항
- 이제
NavDeepLinkBuilder
는createPendingIntent()
에서 반환된PendingIntent
에PendingIntent.FLAG_IMMUTABLE
을 추가하는 방식으로, Android 12를 타겟팅할 때 이 API가 제대로 작동하도록 합니다. - 이제 Navigation은 Lifecycle
2.3.1
에 종속되며NavBackStackEntry
Lifecycle
을 업데이트하는 메서드인setGraph()
,popBackStack()
,navigateUp()
및navigate()
를@MainThread
로 표시합니다. 이로 인해 Lifecycle2.3.0
에 도입된 기본 스레드 시행에 맞춰 Navigation이 정렬됩니다. - 이제 딥 링크가 모든 필수 인수(기본값이 없는 인수)가
Uri
에 있는지 확인합니다. - 이제
NavDeepLink
로 파싱된 인수가 물음표와 같은 방식으로 파운드 기호를 경로 세그먼트 간 구분자로 간주하여 인수가 파운드 기호를 포함하지 않도록 합니다. - 작업을 생성할 때 이제 Safe Args에서 생성된 Kotlin 코드가 기본값이 없는 인수를 기본값이 매개변수로 있는 인수 앞에 배치합니다.
- 인수를 생성할 때 Safe Args가 이제 기본값이 없는 매개변수를 기본값이 있는 매개변수 앞에 배치합니다.
- 이제 Safe-Args가 Android Gradle 플러그인 4.2.0에 종속됩니다. 즉, 더 이상
applicationIdTextResource
사용 경고가 표시되지 않습니다.
알려진 문제
- Navigation
2.5.0-alpha01
에서 수정됨: 프래그먼트의onCreate()
에서by navGraphViewModels()
를 통해 생성된ViewModel
에 액세스할 때IllegalStateException
이 발생하며 실패합니다. (b/213504272) - Navigation
2.5.0-alpha01
에서 수정됨: Safe Args 2.4.0은 Android Gradle 플러그인 7.1.0 이상과 호환되지 않습니다. (b/213086135) - 여러 개의 중첩된 탐색 그래프가 포함된 딥 링크를 사용해도 전체 백 스택이 제대로 생성되지 않습니다. (b/214383060)
버전 2.4.0-rc01
2021년 12월 15일
androidx.navigation:navigation-*:2.4.0-rc01
이 출시되었습니다. 버전 2.4.0-rc01에 포함된 커밋을 확인하세요.
동작 변경사항
- 이제
NavDeepLink
파싱된 인수가 인수 사이의 구분 기호로 물음표와 파운드 기호를 동일하게 간주합니다. (I21309, b/180042703)
버그 수정
- 딥 링크는 자리표시자 이름과 동일한 값을 가진 인수를 더 이상 무시하지 않습니다. (If8017, b/207389470)
NavController
가 복원된 후 전환을 사용하여 중첩된 대상을 표시할 때NavController
가 더 이상 비정상 종료되지 않습니다. (I0f7c9, b/205021623)- 유효하지 않은
startDestination
을 사용할 때 오류 메시지가 있는 경우 시작 대상 경로 기본값으로 설정됩니다. (I86b9d, b/208041894)
Navigation Compose 버그 수정
- 하단 탐색 메뉴 항목을 사용하여 시작 대상과 다른 대상 간의 빠른 전환으로 인해 발생할 수 있는 비정상 종료 문제를 해결했습니다. (Ic8976, b/208887901)
- 이제 구성 변경 또는 프로세스 중단 후 대화상자 대상이 화면 상단에 올바르게 복원됩니다. (I4c0dc, b/207386169)
- 대화상자를 닫을 때 대화상자의
NavBackStackEntry
에서ViewModel
을 검색하려는 시도가 실패하는 문제를 해결했습니다. (I6b96d, b/206465487) - Navigation Compose의
NavHost
와 함께activity
대상을 사용할 때 무한 재구성이 발생하는 문제를 해결했습니다. (I8f64c) - 구성 변경 또는 프로세스 종료 후 이전 활동의 참조를 보류하던 Navigation Compose의 누수 문제를 해결했습니다. (I4efcb, b/204905432)
Safe Args 버그 수정
- 프로세스 종료 후 맞춤 Parcelable 배열을 복원하려고 할 때
SafeArgs
가 더 이상 비정상 종료되지 않습니다. (I618e8, b/207315994) - 불리언 배열에서
null
값을 갖도록 허용하지 않는 Safe Args의 버그가 수정되었습니다. (I8c396, b/174787525)
버전 2.4.0-beta02
2021년 11월 3일
androidx.navigation:navigation-*:2.4.0-beta02
가 출시되었습니다. 버전 2.4.0-beta02에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 명시적 딥 링크와 암시적 딥 링크를 모두 처리하면 다른 그래프로 이동할 때 자동으로
saveState
플래그가 추가되어NavigationUI.setupWithNavController
같은 코드와 여러 백 스택을 사용하는 코드가 예상대로 작동되도록 합니다. (Ic8807)
동작 변경사항
- 이제 딥 링크 패턴이 확장 중에 컴파일되지 않고 NavDeepLink에서 느리게 컴파일됩니다. 이렇게 하면 딥 링크가 포함된 탐색 그래프의 확장 시간이 개선됩니다. (b8d257, b/184149935)
버그 수정
NavHost
가 활동의setContent()
에 직접 추가될 때 NavBackStackEntries가Lifecycle.State.STARTED
로 이동한 후Lifecycle.State.CREATED
로 푸시다운되던 문제를 수정했습니다. (Ia5ac1, b/203536683)- 대화상자가 실제로 표시되기 전에 백 스택에서
DialogFragment
대상을 삭제하면 실제로는 대화상자가 닫히지 않아 사용자가 오류가 있는 대화상자를 수동으로 닫을 때 비정상 종료가 발생하는 경합 상태 문제를 수정했습니다. (I687e5) - 실제로 탐색 그래프로
navigate()
하지 않았더라도NavigationUI
의onNavDestinationSelected
API가true
를 반환하는 문제를 수정했습니다. 이제setupWithNavController
에서 내부적으로 사용하는 것과 동일한 로직을 사용하여 대상의hierarchy
를 통해 현재 대상과 연결된MenuItem
만 선택합니다. (I2b053)
버전 2.4.0-beta01
2021년 10월 27일
androidx.navigation:navigation-*:2.4.0-beta01
이 출시되었습니다. 버전 2.4.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Fragment와 함께 Navigation Kotlin DSL을 사용하는 것을 더 잘 지원하도록 ID를 사용하는 대신 경로와 함께
by navGraphViewModel
을 사용할 수 있습니다. (I901e3, b/201446416)
API 변경사항
visibleEntries
API가 이제 실험용입니다. (I93f6f)
버그 수정
- 같은 화면 간에 이리저리 이동하여 전환이 중단될 때 ViewModel이 더 이상 소멸되지 않습니다. (Id52d8, b/200817333)
NavDestination
에 딥 링크를 추가할 때 null을 허용하는NavDeepLink
인수에 더 이상 기본값이 필요하지 않습니다. (I5aad4, b/201320030)- 이제 여러 수명 주기가 있는 NavBackStackEntries가 더 이상 동일한 것으로 간주되지 않습니다. 즉, NavHost는 singleTop으로 탐색을 실행하고 하단 메뉴 항목을 다시 선택할 때 모든 대상을 올바르게 재구성합니다. (I1b351, b/196997433)
onCreateListPaneView()
에서 반환된 목록 창의layout_width
및layout_weight
속성이 잘못 처리되거나 무시되는AbstractListDetailFragment
문제를 수정했습니다. (f5fbf3)- 이제 대화상자 대상의 시각적 상태가
DialogFragmentNavigator
의 상태와 동기화된 상태로 올바르게 유지됩니다. 즉,DialogFragment
용 비동기dismiss()
API를 수동으로 호출하면 이제 닫힌 대화상자 위의 모든 대화상자 대상이 올바르게 삭제됩니다. 이는popUpTo
나popBackStack()
을 사용하여 대화상자를 닫는 경우에는 영향을 미치지 않습니다. (I77ba2) - 이제
AbstractAppBarOnDestinationChangedListener
에onDestinationChanged()
의 더 명확한 오류 메시지가 있습니다. (Ie742d)
버전 2.4.0-alpha10
2021년 9월 29일
androidx.navigation:navigation-*:2.4.0-alpha10
이 출시되었습니다. 버전 2.4.0-alpha10에 포함된 커밋을 확인하세요.
새로운 기능
- NavController는 이제
visibleEntries
StateFlow를 통해 표시되는 모든NavBackStackEntry
인스턴스 목록을 검색하는 기능을 제공합니다. (Ia964e) - 이제
rememberNavController()
는 반환된NavController
에 추가될 선택적Navigator
인스턴스 집합을 사용하여 선택적 Navigator(예: Accompanist Navigation Material의 Navigator)를 더 효율적으로 지원합니다. (I4619e)
버그 수정
- 활동이 다시 만들어질 때 동적 탐색이 더 이상 비정상 종료되지 않습니다. (Ifa6a3, b/197942869)
NavHost
가 포함된 구성 가능한 대상으로 다시 돌아온 후에만 발생하는 시스템 뒤로 버튼 관련 문제가 수정되었습니다. (3ed148, b/195668143)- SafeArgs는 이제 적절한 매개변수 순서로
fromBundle()
및fromSavedStateHandle()
의 인수를 생성합니다. (I824a8, b/200059831)
버전 2.4.0-alpha09
2021년 9월 15일
androidx.navigation:navigation-*:2.4.0-alpha09
가 출시되었습니다. 버전 2.4.0-alpha09에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
clearBackStack()
메서드를 사용하여popBackStack()
또는popUpToSaveState
로 저장된 상태를 삭제할 수 있습니다. (I80a0f) - 이제 중첩된 탐색 그래프의 빌더에 인수 또는 딥 링크의 목록을 전달하면 결과 그래프에 자동으로 추가됩니다. (I8a470, b/182545357)
API 변경사항
navArgument
Kotlin DSL 함수가 이제navigation-compose
가 아닌navigation-common
의 일부입니다. 이 함수를 계속 사용하려면 가져오기를 업데이트해야 합니다. (I1d095)
동작 변경사항
- 인수를 생성할 때 Safe Args가 이제 기본값이 없는 매개변수를 기본값이 있는 매개변수 앞에 배치합니다. (I89709, b/198493585)
버그 수정
- Navigation Compose를 사용할 때 NavGraph는 모든 하위 요소가
DESTROYED
상태가 된 경우에만DESTROYED
상태가 됩니다. (I86552, b/198741720) - 이제 null을 허용하는
NavDeepLink
인수에 기본값이 필요하지 않습니다. (Ia14ef, b/198689811) - 새 그래프로
setGraph()
를 호출하면 이제 백 스택을 표시하는 이전 동작 외에 저장된 백 스택도 삭제됩니다. (I97f96) launchSingleTop
을 사용할 때OnDestinationChangedListener
인스턴스와currentBackStackEntryFlow
에 알림이 전송되지 않는 문제를 수정했습니다. (Iaaebc)
종속 항목 업데이트
- Navigation Compose가 이제 Activity Compose 1.3.1에 종속됩니다. (I05829)
- Navigation Compose가 이제 Lifecycle ViewModel Compose
2.4.0-beta01
에 종속됩니다. (Ib86a3)
버전 2.4.0-alpha08
2021년 9월 1일
androidx.navigation:navigation-*:2.4.0-alpha08
이 출시되었습니다. 버전 2.4.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavType
클래스를 확장하여 맞춤 NavTypes를 만들 수 있습니다. 맞춤 유형은 탐색 그래프 Kotlin DSL을 통하는 등 프로그래매틱 방식으로 탐색 그래프를 빌드할 때만 지원됩니다. (I78440, b/196871885)
동작 변경사항
- 작업을 생성할 때 이제 Safe Args에서 생성된 Kotlin 코드가 기본값이 없는 인수를 기본값이 매개변수로 있는 인수 앞에 배치합니다. (Idb697, b/188855904)
- 이제 딥 링크가 모든 필수 인수(기본값이 없는 인수)가
Uri
에 있는지 확인합니다. (#204, b/185527157)
버그 수정
- composable() 내에서
getBackStackEntry
와previousBackStackEntry
를remember()
와 함께 사용하면 백 스택에 대상이 없다는 예외가 더 이상 발생하지 않습니다. (I75138, b/194313238) - 이제 Navigation Compose가 백 스택 인수를 변경하고
launchSingleTop=true
를 사용할 때 올바르게 재구성됩니다. (Iebd69, b/186392337) - 대상이 13개 또는 29개인 그래프로
setGraph
를 호출할 때 더 이상ArrayIndexOutOfBoundsException
이 발생하지 않습니다. (I1a9f1, b/195171984) - SafeArgs 자바 생성기가 Args 클래스를 생성할 때 더 이상 린트 경고가 발생하지 않습니다. (I1a666, b/185843837)
외부 기여
- 딥 링크가 모든 필수 인수(기본값이 없는 인수)가
Uri
에 있는지 확인하도록 보장하는 것은 ospixd 덕분입니다. (#204, b/185527157)
버전 2.4.0-alpha07
2021년 8월 18일
androidx.navigation:navigation-*:2.4.0-alpha07
이 출시되었습니다. 버전 2.4.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation Compose가 구성 변경 후 그리고 여러 백 스택 기능을 사용하는 동안 그래프를 변경할 때 상태를 올바르게 저장합니다. (If5a3d, b/195141957)
- 여러 백 스택이 있는 Navigation Compose를 사용할 때 같은 탭을 다시 선택하면 더 이상 빈 화면이 표시되지 않습니다. (I860dc, b/194925622)
- 이제
NavHost
가NavBackStackEntry
의Lifecycle.State
에서 변경사항을 관찰합니다. 즉, 이제 프래그먼트에서NavHost
를 사용하면 빈 화면이 표시되는 대신 수명 주기 변경에 따라 올바르게 재구성됩니다. (I4eb85, b/195864489) DialogFragment
를 닫으면 활동을 다시 생성한 후(즉, 구성 변경 후)NavController
상태가 올바르게 업데이트되지 않는 문제를 수정했습니다. (Icd72b)- 대화상자 대상을 표시할 때 NavController의 시스템 뒤로 버튼 처리를 업데이트하지 않아 표시할 백 스택이 없어도 NavController에서 뒤로 버튼을 가로챌 수 있는 문제를 수정했습니다. (If3b34)
- 이제 Safe Args가
ViewModel
코드를 테스트하는 데 사용할 수 있는 인수의toSavedStateHandle
메서드를 자동으로 생성합니다. (If1e2d, b/193353880)
버전 2.4.0-alpha06
2021년 8월 4일
androidx.navigation:navigation-*:2.4.0-alpha06
이 출시되었습니다. 버전 2.4.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
AbstractListDetailFragment
의requireSlidingPaneLayout()
과requireDetailPaneNavHostFragment()
메서드 이름이 각각getSlidingPaneLayout()
과getDetailPaneNavHostFragment()
로 바뀌었습니다. (I34a08)
동작 변경사항
- 애니메이션을 사용하여 탐색할 때(예:
Crossfade
) 이제 새 대상의Lifecycle
은 애니메이션이 완료될 때만RESUMED
에 도달합니다. (If0543, b/172112072, b/194301889) - Navigation Compose의
NavHost
는 이제 그래프를 첫 번째 구성의 일부로 설정합니다. (Ieb7be)
버그 수정
- 탐색 그래프의 마지막 대상을 표시할 때 더 이상
ClassCastException
이 발생하지 않습니다. (If0543, b/172112072, b/194301889) Uri
없이 딥 링크를 추가하고 경로 또는 딥 링크를 통해 탐색할 때 발생하던NullPointerException
을 수정했습니다. (938a0c, b/193805425)- Navigation Compose에서 딥 링크
NavBackStackEntry
가RESUMED
상태에 도달하지 않던 문제를 해결했습니다. (I192c5) - 대화상자 대상을 표시할 때 NavController의 시스템 뒤로 버튼 처리를 업데이트하지 않아 표시할 백 스택이 없어도 NavController에서 뒤로 버튼을 가로챌 수 있는 문제가 해결되었습니다. (aosp/1782668)
버전 2.4.0-alpha05
2021년 7월 21일
androidx.navigation:navigation-*:2.4.0-alpha05
가 출시되었습니다. 버전 2.4.0-alpha05에 포함된 커밋을 확인하세요.
동작 변경사항
- 이제 Navigation Compose의
NavHost
는 대상을 탐색할 때 항상 크로스페이드를 사용합니다. (I07049, b/172112072) - 이제 NavHost 그래프를 변경할 수 있습니다. 그래프의 startDestination과 대상이 서로 동일한 그래프는 동일한 것으로 간주되며
NavController
백 스택을 삭제하지 않습니다. (I0b8db, b/175392262)
버그 수정
- NavController 상태에 관한 재진입 업데이트로 발생하는
NavBackStackEntry
에 연결된LifecycleObserver
내에서popBackStack()
을 호출할 때 발생하는NoSuchElementException
문제를 해결했습니다. (I64621) - 이제
AbstractListDetailFragment
가 사용되지 않는 경우AbstractListDetailFragment
를 통해 APK에서SlidingPaneLayout
을 완전히 삭제할 수 있습니다. (I611ad) NavGraph
및NavDestination
이 이제 equals 메서드를 재정의하므로, 동일한 값을 갖는 두 객체는 동일한 것으로 간주됩니다. (I166eb, b/175392262)
버전 2.4.0-alpha04
2021년 7월 1일
androidx.navigation:navigation-*:2.4.0-alpha04
가 출시되었습니다. 버전 2.4.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
navigation-fragment
아티팩트에는 새AbstractListDetailFragment
를 통해 사전 빌드된 두 창 레이아웃 구현이 포함되어 있습니다. 이 프래그먼트는 구현 예에 나와 있는 것처럼,SlidingPaneLayout
을 사용하여 목록 창(서브클래스에서 제공됨)과NavHostFragment
를 구현으로 사용하는 세부정보 창을 관리합니다. (Iac4be, b/191276636) navigation-compose
아티팩트의NavHost
는 이제composable
대상 외에dialog
대상도 지원합니다. 이러한 대화상자 대상은 현재composable
대상 위에 플로팅되는 컴포저블Dialog
내에 각각 표시됩니다. (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
API 변경사항
NavigatorState
의add
함수 이름이push
로 변경되었습니다. 현재 모든add()
호출을 push()로 변경해야 합니다. (Ie89fc, b/172112072)- 이제 사용자설정
Navigator
인스턴스는NavigatorState
에pushWithTransaction
및popWithTransition
API를 사용하여 대상을 비동기식으로 푸시하거나 표시할 수 있습니다. 참고로, 이 두 API는 포함된 Navigator에 아직 사용되지 않습니다. (Ic4d7c, b/172112072)
동작 변경사항
- 이제
NavDeepLinkBuilder
는createPendingIntent()
에서 반환된PendingIntent
에PendingIntent.FLAG_IMMUTABLE
을 추가하는 방식으로, Android 12를 타겟팅할 때 이 API가 제대로 작동하도록 합니다. (If8c52)
버그 수정
- 그래프에 전달된 인수가 동적으로 포함된 그래프에 올바르게 전달되지 않는
<include-dynamic>
의 문제가 해결되었습니다. (I3e115) @null
이 기본값인string[]
인수를 사용하여 대상으로 이동할 때 발생하는NullPointerException
이 수정되었습니다. (I1fbe8)@Navigator.Name
에 관한 ProGuard 규칙을 추가하여 R8 3.1 전체 모드를 사용할 때 발생하는 문제를 해결했습니다. (I2add9, b/191654433)Kotlin
의1.5.0
이전 버전으로 앱을 빌드할 때 SafeArgs에 더 이상 오류가 발생하지 않습니다. (Icd1ff, b/190739257)
버전 2.4.0-alpha03
2021년 6월 16일
androidx.navigation:navigation-*:2.4.0-alpha03
이 출시되었습니다. 버전 2.4.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- 포함된 동적 그래프로 이동하려면
navigate()
호출이 두 번 필요했던 문제가 해결되었습니다. (I7785c, b/188859835) - Navigation
2.4.0-alpha01
에 도입된 회귀 문제가 해결되었습니다. 이 문제로 인해 최상위 수준 대상에 있을 때setupActionBarWithNavController()
에서 위로 아이콘을 올바르게 삭제하지 않았습니다. (I5d443, b/189868637) - 사전에 NavController의 루트 그래프를 표시한 후
popBackStack()
을 호출할 때 발생하는IllegalStateException
문제가 해결되었습니다. (I2a330, b/190265699) navigation-common
을 사용하거나 이 항목에 종속된 아티팩트를 사용할 때 이제by navArgs()
에 관한 ProGuard 규칙이 올바르게 적용됩니다. (I68800, b/190082521)- 콜백을 처음 수신할 때
navigate()
를 호출하는OnDestinationChangedListener
가 이제 이동 대상이 포함된 두 번째 콜백을 올바르게 수신합니다. (Ie5f9e, b/190228815) - Safe Args가 동적 기능 모듈 및 AGP 7.0+와 함께 사용될 때 더 이상 비정상적으로 종료되지 않습니다. (I69518, b/189966576)
알려진 문제
- Gradle
6.7.0
을 사용하면 이전 Kotlin 버전의 종속 항목으로 인해 Safe Args가Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
오류와 함께 실패합니다. 이 문제는 Gradle 7.0을 사용하도록 업데이트하여 해결할 수 있습니다. (b/190739257)
버전 2.4.0-alpha02
2021년 6월 2일
androidx.navigation:navigation-*:2.4.0-alpha02
가 출시되었습니다. 버전 2.4.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Activity, Fragment 및 Dialog 대상뿐 아니라 DynamicNavigation Kotlin DSL 전반에서 경로가 지원됩니다. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
에 상태 저장을 선택 해제할 수 있는 실험용 API를 일시적으로 추가했습니다. 항상 상태를 저장하는 것이 정확한 동작이지만, 상태를 저장할 때 지원할 수 없는 지원 중단된 라이브러리(예: 보관된 프래그먼트)가 여전히 사용되는 경우가 있으므로 이 API를 통해 앱이 지원되지 않는 API에서 충분한 시간을 두고 변환할 수 있습니다. (Idf93c)Navigation에서 이제 맞춤 NavigationUI를 구현하는 데 사용할 수 있는
findDestination()
및getHierarchy()
API를 제공합니다.findDestination()
은 그래프 내에서 대상을 찾을 수 있는NavGraph
의 확장 함수입니다.getHierarchy()
는 주어진 대상이 다른 계층의 계층 구조 내에 있는지 확인하는 데 사용할 수 있는NavDestination
의 함수입니다. (I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
BottomNavigationView
를 사용하는 NavigationUI 메서드가 대신 Material1.4.0
,NavigationBarView
에 도입된 슈퍼클래스를 사용하도록 업데이트되었습니다. 이렇게 하면 이러한 메서드를NavigationRailView
와 함께 사용할 수 있습니다. (Ib0b36, b/182938895)XML을 통해
<action>
요소를 확장할 때 애니메이션 속성은app:enterAnim="?attr/transitionEnter"
구문을 사용하여 테마에서 가져온 속성을 사용할 수 있습니다. (I07bc1, b/178291654)
API 변경사항
- ID를 사용하는 Kotlin DSL 빌더는 지원 중단되었으며 경로를 사용하는 빌더로 대체해야 합니다. (I85b42, b/188816479) (I9f58f, b/188816479)
버그 수정
- 이제
DialogFragmentNavigator
는 시스템 뒤로 버튼을 누르거나 버튼 바깥을 클릭하여 대화상자를 닫을 때NavigatorState.pop()
API를 사용하여NavController
에 알립니다. 이를 통해NavController
상태가 항상 Navigator 상태와 동기화됩니다. (I2ead9) onDestinationChanged
콜백으로OnDestinationChangedListeners
목록을 조작할 때 Navigation에서 더 이상ConcurrentModificationException
을 제공하지 않습니다. (Ib1707, b/188860458)Kotlin에서 방향 속성을 생성하려고 할 때 Safe Args가 더 이상 다운되지 않습니다. (Id2416, b/188564435)
NavDestination의 setId 메서드가 이제
@IdRes
로 적절하게 주석 처리되어 리소스 ID만 허용합니다. (I69b80)이제
findNode
의 int 매개변수는resid
가 아닌resId
입니다. (I7711d)
종속 항목 업데이트
- 이제 Safe-Args가 Android Gradle 플러그인 4.2.0에 종속됩니다. 즉, 더 이상
applicationIdTextResource
사용 경고가 표시되지 않습니다. (I6d67b, b/172824579)
버전 2.4.0-alpha01
2021년 5월 18일
androidx.navigation:navigation-*:2.4.0-alpha01
이 출시되었습니다. 버전 2.4.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
NavController
의currentBackStackEntryAsFlow()
메서드는 현재NavBackStackEntry
가 변경될 때마다 내보내는Flow
를 제공합니다. 이 흐름은OnDestinationChangedListener
를 수동으로 관리하는 대안으로 사용할 수 있습니다. (I19c4a, #89, b/163947280)
여러 백 스택
NavController는 대상의 백 스택을 관리하고, 개발자가 백 스택으로 navigate()
하면 백 스택에 대상을 추가하고, 개발자가 popBackStack()
을 호출하거나 시스템 뒤로 버튼을 트리거하면 백 스택을 삭제하는 일을 담당합니다. 기존 NavOptions
클래스 및 탐색 그래프 XML에서 <action>
항목으로의 통합이 확장되어 백 스택 저장 및 복원을 지원합니다. (b/80029773)
이러한 변경의 일환으로 이제 onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
및 NavigationView.setupWithNavController()
의 NavigationUI
메서드는 표시된 대상의 상태를 자동으로 저장하고 복원하기 때문에 코드를 변경하지 않아도 여러 백 스택을 지원할 수 있습니다. 이는 Navigation with Fragments를 사용할 때 여러 백 스택과 통합하는 데 권장되는 방법입니다. (Ie07ca)
상태를 저장하고 복원하기 위한 기본 API는 여러 표면을 통해 노출됩니다.
Navigation XML에서
<action>
요소는 이제app:popUpToSaveState
및app:restoreState
의 부울 속성을 사용하여app:popUpTo
를 통해 표시된 모든 대상의 상태를 저장하고app:destination
으로 전달된 대상에 연결된 상태를 복원할 수 있습니다.<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
Kotlin DSL에서popUpTo
빌더에restoreState
부울 속성과saveState
부울 속성을 추가할 수 있습니다.// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
NavOptions.Builder
를 통해NavOptions
객체를 수동으로 빌드할 때setRestoreState()
를 사용하고 추가saveState
매개변수를 취하는setPopUpTo()
에 새 오버로드를 사용할 수 있습니다.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
이제
popBackStack()
에 대한 프로그래매틱 방식의 호출에는 추가saveState
매개변수를 포함할 수 있습니다.
어떤 경우든 NavController
는 탐색 대상 범위의 ViewModel
인스턴스를 포함하여 각 NavBackStackEntry
의 상태를 저장하고 복원합니다. 각 Navigator
가 자체 상태를 저장하고 복원할 수 있도록 Navigator
API가 업데이트되었습니다.
Navigation Compose에서 composable
대상에 사용되는 ComposeNavigator
와 Navigation with Fragments에서 <fragment>
대상에 사용되는 FragmentNavigator
및 DynamicFragmentNavigator
가 새 Navigator API를 사용하고 상태 저장 및 복원을 지원하도록 모두 업데이트되었습니다.
탐색 경로
경로는 대상을 고유하게 식별하는 String
입니다. 이전에는 Navigation Compose에서만 사용되었지만 이제 이 개념은 점차 핵심 Navigation API의 일부가 되었습니다. 이는 Navigation Kotlin DSL을 통해 그래프를 구성할 때 정수 ID를 사용하는 것을 대체할 대안을 제공합니다. (b/172823546)
이전에는 ID만 사용하던 모든 API에는 이제 경로 String
을 취하는 오버로드가 있습니다.
navigate()
, popBackStack()
, popUpTo()
및 getBackStackEntry()
가 이에 해당됩니다.
이로 인해 API에 몇 가지 영향이 있었습니다.
- Kotlin DSL에서
popUpTo
kotlin 속성이 지원 중단되고popUpToId
로 대체되었습니다. (I59c73, b/172823546) getStartDestination()
API가 지원 중단되고getStartDestinationId()
로 대체되었습니다. (I0887f, b/172823546)
이로 인해 이전 버전의 Navigation Compose에서 Navigation Compose 2.4.0-alpha01
로 업그레이드하는 개발자는 확장 메서드에서의 다음 가져오기가 더 이상 필요하지 않으므로 삭제해야 합니다.
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
KEY_ROUTE
인수는 NavDestination
에서 route
속성으로 대체되어 navBackStackEntry.destination.route
를 직접 호출할 수 있습니다.
API 변경사항
- 모든 Navigation 아티팩트가 Kotlin으로 다시 작성되었습니다. 이로 인해 제네릭을 사용하는 클래스(예:
NavType
서브클래스)의 null 허용 여부가 개선되었습니다.-ktx
아티팩트의 일부로 사용된 모든 Kotlin 확장 함수가 각각의 주요 아티팩트로 이동되었습니다.-ktx
아티팩트는 계속 게시되지만 현재 완전히 비어 있습니다. (b/184292145) NavDeepLinkBuilder
는 이제 생성된 백 스택에 여러 고유 대상을 추가하는 것을 지원합니다. (I3ee0d, b/147913689)DynamicNavHostFragment
의 팩토리 함수 추가 (Icd515, b/175222619)- 이제
NavBackStackEntry
의 고유 ID가 공개 API의 일부로 노출됩니다. (Ie033a) - 이제
name
및argument
필드와NamedNavArgument
의 디스트럭처링 함수가 공개 상태가 되었습니다. (#174, b/181320559) - 관련 컴포지션 로컬에
NavBackStackEntry
를 제공하는 새로운NavBackStackEntry#provideToCompositionLocals
확장 프로그램이 도입되었습니다. (#175, b/187229439)
Safe Args
이제 Safe Args는 각
NavArgs
클래스의fromSavedStateHandle()
메서드를 생성합니다. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
KotlinPoet
1.8.0
에 종속되도록 Safe Args를 업데이트했습니다. (#172, b/183990444)
동작 변경사항
- 이제 Navigation은 Lifecycle
2.3.1
에 종속되며NavBackStackEntry
Lifecycle
을 업데이트하는 메서드인setGraph()
,popBackStack()
,navigateUp()
및navigate()
를@MainThread
로 표시합니다. 이로 인해 Lifecycle2.3.0
에 도입된 기본 스레드 시행에 맞춰 Navigation이 정렬됩니다. (b/171125856) - 이제 딥 링크에서 Enum 인수를 파싱할 때 대소문자를 구분하지 않습니다. 따라서 enum에
RED
값이 있더라도http://www.example.com/red
같은 딥 링크가www.example.com/{color}
딥 링크와 일치하게 됩니다. (#152, b/135857840)
Compose 호환성
androidx.navigation:navigation-compose:2.4.0-alpha01
은 Compose 버전1.0.0-beta07
이상과만 호환됩니다.
버그 수정
- 후행 인수 자리표시자가 정확히 일치하는 접미사가 있는 딥 링크보다 우선하는 문제를 해결했습니다. (#153, b/184072811)
- 이제
NavHostFragment
는 기본DialogFragmentNavigator
와 동일한@Navigator.Name("dialog")
을 사용하는 맞춤 Navigator를 지원합니다. (Ib1c2c, b/175979140) - 동일한 인스턴스로 반복적으로 호출해도 문제가 발생하지 않도록
NavigatorProvider#addNavigator
의 동작을 개선했습니다. (#176, b/187443146)
외부 기여
- 각
NavArgs
클래스의fromSavedStateHandle()
메서드를 생성하는 Safe Args 지원을 빌드해 주신 simonschiller님께 감사드립니다. (#122, b/136967621) - 딥 링크에서 Enum 인수를 파싱할 때 대소문자를 구분하지 않도록 해 주신 Bradleycorn님께 감사드립니다. (#152, b/135857840)
- 후행 인수 자리표시자가 정확히 일치하는 접미사가 있는 딥 링크보다 우선하는 문제를 해결해 주신 osipxd님께 감사드립니다. (#153, b/184072811)
- KotlinPoet
1.8.0
에 종속되도록 Safe Args를 업데이트해 주신 tatocaster님께 감사드립니다. (#172, b/183990444) name
및argument
필드를 만들고NamedNavArgument
의 디스트럭처링 함수를 공개해 주신 jossiwolf님께 감사드립니다. (#174, b/181320559)- 관련 컴포지션 로컬에
NavBackStackEntry
를 제공하는 새로운NavBackStackEntry#provideToCompositionLocals
확장 프로그램을 도입해 주신 jossiwolf님께 감사드립니다. (#175, b/187229439) - 동일한 인스턴스로 반복적으로 호출해도 문제가 발생하지 않도록
NavigatorProvider#addNavigator
의 동작을 개선해 주신 jossiwolf님께 감사드립니다. (#176, b/187443146)
Navigation Compose 버전 1.0.0
버전 1.0.0-alpha10
2021년 4월 7일
androidx.navigation:navigation-compose:1.0.0-alpha10
이 출시되었습니다. 버전 1.0.0-alpha10에 포함된 커밋을 확인하세요.
API 변경사항
NavHost
는 이제Modifier
를 허용합니다. 이는 대상 컴포저블을 래핑하는 구성 가능한 컨테이너로 전달됩니다. (I85aca, b/175125483)
버그 수정
NavHost
는 이제OnBackPressedDispatcherOwner
를 찾을 수 없는 경우에도 작동합니다(예:NavHost
를 미리 보는 경우). (I7d8b4)- 이제 Navigation Compose가 Navigation
2.3.5
에 종속되며NavHost
대상 내에서BackHandler
를 사용할 때 발생하는 문제를 수정했습니다. (I7e63b, b/182284739)
버전 1.0.0-alpha09
2021년 3월 10일
androidx.navigation:navigation-compose:1.0.0-alpha09
가 출시되었습니다. 버전 1.0.0-alpha09에 포함된 커밋을 확인하세요.
API 변경사항
LocalViewModelStoreOwner.current
가 이제 null을 허용하는ViewModelStoreOwner
를 반환하여 현재 컴포지션에서ViewModelStoreOwner
를 사용할 수 있는지 더 효과적으로 판단합니다.ViewModelStoreOwner
가 설정되어 있지 않으면viewModel()
및NavHost
와 같이ViewModelStoreOwner
가 필요한 API에서 여전히 예외가 발생합니다. (Idf39a)
버그 수정
- 이제 Navigation Compose는 그래프를 설정한 후 동일한 ViewModelStore 객체 설정을 시도하는 수정사항이 포함된 Navigation 2.3.4에 종속됩니다. (I65c24, b/177825470)
버전 1.0.0-alpha08
2021년 2월 24일
androidx.navigation:navigation-compose:1.0.0-alpha08
이 출시되었습니다. 버전 1.0.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavHost
가LocalSavedStateRegistryOwner
CompositionLocal을 대상의NavBackStackEntry
로 채우기 때문에,SavedStateRegistry
에 바로 저장되는 상태가 대상과 함께 저장되고 복원됩니다. (I435d7, b/179469431)
버전 1.0.0-alpha07
2021년 2월 10일
androidx.navigation:navigation-compose:1.0.0-alpha07
이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- 이제 Navigation Compose는
composable
대상에viewModel()
지원을 제공하기 위해 Lifecycle ViewModel Compose 1.0.0-alpha01에 종속됩니다. (I7a374) NavHost
는 이제 Activity-Compose 1.3.0-alpha01의 새로운LocalOnBackPressedDispatcherOwner
를 사용하여NavController
에 설정된OnBackPressedDispatcher
를 가져옵니다. (I65b12)
버전 1.0.0-alpha06
2021년 1월 28일
androidx.navigation:navigation-compose:1.0.0-alpha06
이 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
NavController
에 연결된NavBackStackEntry
를 반환하는getBackStackEntry(route: String)
확장 메서드를 추가했습니다. (If8931)
버전 1.0.0-alpha05
2021년 1월 13일
androidx.navigation:navigation-compose:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
Compose 1.0.0-alpha10에 종속되도록 업데이트되었습니다.
버전 1.0.0-alpha04
2020년 12월 16일
androidx.navigation:navigation-compose:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
- Compose
1.0.0-alpha09
와의 호환성을 위해 업데이트되었습니다.
버전 1.0.0-alpha03
2020년 12월 2일
androidx.navigation:navigation-compose:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- 구성이 변경되거나 프로세스가 중단되어 다시 생성된 후에
popBackStack()
과navigateUp()
이 작동하지 않는 문제가 수정되었습니다. (Icea47, b/173281473) - 이제 NavHost 내의 중첩된 그래프로 이동하는 작업이 올바르게 작동합니다. (I0948d, b/173647694)
버전 1.0.0-alpha02
2020년 11월 11일
androidx.navigation:navigation-compose:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- Navigation Compose는 이제 popUpTo 및 launchSingleTop 작업을 사용하도록 NavOptions를 지원합니다. (If96c3, b/171468994)
- ID 대신 Navigation Compose DSL에서 중첩 그래프를 생성할 수 있는 경로를 사용하는 탐색 함수를 추가했습니다. (I1661d)
- 이제 startDestination이 NavHost용 매개변수 목록에서 경로 앞에 배치됩니다. (Ie620e)
- 이제 경로를 NavHost 컴포저블 외부의 시작 대상으로 사용하여 그래프를 만들 수 있습니다. (Iceb75)
버전 1.0.0-alpha01
2020년 10월 28일
android.navigation:navigation-compose:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
navigation-compose
아티팩트는 Navigation 구성요소와 Jetpack Compose 간 통합을 제공합니다. @Composable
함수를 애플리케이션의 대상으로 사용합니다.
이번 최초 출시에서는 다음 기능을 제공합니다.
NavHost
컴포저블을 사용하여 Kotlin DSL을 통해 탐색 그래프를 구성할 수 있음- 대상 레벨에서 수명 주기,
ViewModel
, 저장된 상태의 범위 지정 - 시스템 뒤로 버튼을 사용하여 자동으로 통합
- 인수 전달, 대상에 딥 링크 연결, 이전 대상에 결과 반환 지원
rememberNavController()
및currentBackStackEntryAsState()
에 특정 도우미를 작성하여 호이스팅 상태를 허용하고NavController
를NavHost
(예: 하단 탐색 메뉴) 외부의 컴포저블에 연결
자세한 내용은 Compose Navigation 가이드를 참고하세요.
버전 2.3.5
버전 2.3.5
2021년 4월 7일
androidx.navigation:navigation-*:2.3.5
가 출시되었습니다. 버전 2.3.5에 포함된 커밋을 확인하세요.
새로운 기능
NavDeepLinkRequest
또는Uri
를 사용하여 탐색할 때, 이제KEY_DEEP_LINK_INTENT
를 통해 인수에서 인텐트를 가져와서 결과 대상의Uri
, 작업, MIME 유형에 액세스할 수 있으며, 외부 딥 링크에서 이미 사용할 수 있는 기능을 미러링합니다. (I975c3, b/181521877)
버그 수정
- LifecycleOwner로
NavBackStackEntry
와 함께 디스패처에 추가된OnBackPressedCallbacks
는 이제 활동 수명 주기가STOPPED
가 되고STARTED
된 후 다시 적절한 시점에 호출됩니다. (Iff94f, b/182284739) - 이제 딥 링크 도메인 파싱 시 대소문자를 구분하지 않으므로
www.example.com
은www.example.com
과www.Example.com
모두와 일치합니다. 그러나 쿼리 매개변수 이름은 여전히 대소문자를 구분합니다. (#144, b/153829033) - 대상에 null을 허용하지 않는 기본 인수가 여러 개 있고 이러한 인수의 하위 집합만 재정의된 대상으로 이동하는 경우 발생하던
NullPointerException
을 수정했습니다. (aosp/1644827)
종속 항목 업데이트
- Navigation Safe Args Gradle 플러그인은 이제 Kotlin Gradle 플러그인 1.4.31에 종속됩니다. (aosp/1661058, b/181156413)
외부 기여
- 딥 링크 도메인을 파싱할 때 대소문자를 구분하지 않도록 pull 요청을 보내주신
bentrengrove
님께 감사드립니다. (#144, b/153829033)
버전 2.3.4
버전 2.3.4
2021년 3월 10일
androidx.navigation:navigation-*:2.3.4
가 출시되었습니다. 버전 2.3.4에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
ReferenceType
인수가 딥 링크 URI의 일부로 전송될 때 이 인수를 올바르게 파싱할 수 있습니다. 원시 정숫값과0x
접두어가 붙은 16진수 값이 모두 지원됩니다. (#127, b/179166693) - 이제
app:argType="float"
를 사용하는 인수의android:defaultValue
에서 정수 기본값을 지원하며 이를 통해0.0
을 사용할 필요 없이android:defaultValue="0"
을 사용하면 됩니다. (#117, b/173766247)
버그 수정
- Navigation의 동적 기능 지원 기능을 사용할 때 설치 진행률이 중단되는 문제를 수정합니다. (Ib27a7, b/169636207)
- 이제 이미 설정된 동일한 객체로
setViewModelStore
또는setLifecycleOwner
를 호출하면 노옵스(no-ops)가 됩니다. (Idf491, b/177825470) - 이제 Safe Args는 자바를 사용할 때 적절한 메서드에 억제 주석을 추가합니다. (I8fbc5, b/179463137)
외부 기여
ReferenceType
인수가 딥 링크 URI의 일부로 전송될 때 이 인수를 적절하게 파싱할 수 있도록 pull 요청을 해 주신JvmName
님께 감사드립니다. (#127, b/179166693)app:argType=”float”
를 사용하는 인수의defaultValue
가 정수 기본값을 지원하도록 pull 요청을 해 주신tatocaster
님께 감사드립니다. (#117, b/173766247)
버전 2.3.3
버전 2.3.3
2021년 1월 27일
androidx.navigation:navigation-*:2.3.3
이 출시되었습니다. 버전 2.3.3에 포함된 커밋을 확인하세요.
버그 수정
Lifecycle
이CREATED
로 이동하기 전에NavBackStackEntry
를 표시할 때 더 이상 다운되지 않습니다. (Ie3ba3)- 애니메이션 리소스 값이
0
인 활동으로 이동할 때ResourceNotFoundException
이 발생하는 b/171364502로 인한 회귀 문제를 수정했습니다. (I7aedb, b/176819931)
버전 2.3.2
버전 2.3.2
2020년 12월 2일
androidx.navigation:navigation-*:2.3.2
가 출시되었습니다. 버전 2.3.2에 포함된 커밋을 확인하세요.
버그 수정
onNavDestinationSelected
로<activity>
대상을 사용하면 활동으로 이동할 수 없던NavigationUI
의 회귀 문제가 수정되었습니다. (I22e34, b/171364502)navigation-dynamic-features-fragment
가 새로 설치된 대상으로 여러 번 이동하는 문제가 수정되었습니다. (aosp/1486056, b/169636207)launchSingleTop
사용 시 기본 인수가OnDestinationChangedListener
인스턴스로 전송되지 않는 문제가 수정되었습니다. (I2c5cb)- 중첩된 탐색 그래프로 이동할 때 백 스택에 새 그래프 인스턴스가 생성되지 않는 문제가 수정되었습니다. (Ifc831)
- 탐색 그래프에서 마지막 대상을 삭제하는
popUpTo
와 함께navigate()
를 사용하면 백 스택에서 탐색 그래프 자체가 즉시 소멸 및 삭제되지 않는 문제가 수정되었습니다. (I910a3) - Navigation SafeArgs는 이제 Kotlin의 명시적 API 모드 지원을 추가한 KotlinPoet 버전 1.7.2를 사용합니다. (I918b5)
- 이제
NavHostFragment.findNavController(Fragment)
에서는 기존에 하던 Fragment 계층 구조와 Fragment 뷰 계층 구조 확인 외에 DialogFragment의 루트 장식 뷰도 확인합니다. 이를 통해FragmentScenario
와Navigation.setViewNavController()
로 Navigation을 사용하는 대화상자 프래그먼트를 테스트할 수 있습니다. (I69e0d)
버전 2.3.1
버전 2.3.1
2020년 10월 14일
androidx.navigation:navigation-*:2.3.1
가 출시되었습니다. 버전 2.3.1에 포함된 커밋을 확인하세요.
새로운 기능
- 기본 Animator 리소스를 Navigation UI에 추가했으며, 기본 애니메이션 리소스보다 이 리소스를 사용하는 것이 좋습니다. (b/167430145)
- 이제 NavOptions에서 hashCode와 equals 메서드를 재정의합니다. (b/161586466)
- 이제 Navigation에서 'ID가 있는 대상 없음' IllegalArgumentException의 현재 대상을 포함하며 이는 개발자 디버깅 환경을 개선합니다. (b/168311416)
버그 수정
- 생성된 인수 클래스 이름이 100자를 초과하더라도 Safe Args는 더 이상 반환 행을 래핑하지 않습니다. (b/168584987)
종속 항목 변경사항
- 이제
navigation-ui
가 DrawerLayout 1.1.1에 종속되도록 하여LOCK_MODE_LOCKED_CLOSED
또는LOCK_MODE_LOCKED_OPEN
을 사용할 때NavigationUI
에서 창을 열 수 있도록 합니다. (b/162253907) - 이제 Safe Args가 KotlinPoet 1.6.0에 종속됩니다. (aosp/1435911)
- 이제 Safe Args가 AGP 4.0.1에 종속됩니다. (aosp/1442337)
버전 2.3.0
버전 2.3.0
2020년 6월 24일
androidx.navigation:navigation-*:2.3.0
가 출시되었습니다. 버전 2.3.0에 포함된 커밋을 확인하세요.
2.2.0 이후 주요 변경사항
- 기능 모듈 통합:
navigation-dynamic-features-runtime
및navigation-dynamic-features-fragment
아티팩트를 사용하면 기능 모듈에 정의된 대상으로 이동하여 필요에 따라 기능 모듈의 설치를 자동으로 처리할 수 있습니다. 자세한 내용은 기능 모듈로 탐색을 참고하세요. - 탐색 테스트:
navigation-testing
아티팩트는TestNavHostController
를 제공하며 이를 사용하면 탐색 작업 후 현재 대상을 설정하고 백 스택을 확인할 수 있습니다. 자세한 내용은 탐색 테스트를 참고하세요. - 결과 반환: 이제 탐색 백 스택의 각 대상에 연결된
NavBackStackEntry
를 사용하여 특정 백 스택 항목에 연결되어야 하는 소량의 저장된 상태를 보관하는 데 적합한SavedStateHandle
에 액세스할 수 있습니다. 자세한 내용은 이전 대상으로 결과 반환을 참고하세요. Openable
에 대한NavigationUI
지원:NavigationUI
의 모든DrawerLayout
사용은 CustomView1.1.0
에서 추가되고 DrawerLayout1.1.0
의DrawerLayout
에서 구현되는 더 일반적인Openable
인터페이스로 대체되었습니다.- 딥 링크의 작업 및 MIME 유형 지원: 이전에 사용 가능했던
app:uri
외에 딥 링크에서app:action
및app:mimeType
을 지원하도록 확장되었습니다. 이제NavController
에서 새로운NavDeepLinkRequest
클래스를 통해 이러한 필드의 조합으로 탐색할 수 있습니다. 자세한 내용은 NavDeepLinkRequest를 사용하여 탐색을 참고하세요.
알려진 문제
- 딥 링크 작업 및 MIME 유형 지원은 아직 매니페스트 병합기에서 사용할 수 없습니다. 이 작업이 완료될 때까지 매니페스트의
<nav-graph>
요소에서 생성된<intent-filter>
요소는<data>
요소 또는 맞춤<action>
에 MIME 유형을 포함하지 않습니다. 매니페스트에 적절한<intent-filter>
를 수동으로 추가해야 합니다.
버전 2.3.0-rc01
2020년 6월 10일
androidx.navigation:navigation-*:2.3.0-rc01
가 출시되었습니다. 버전 2.3.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 인수가 없는 대상 인스턴스를
singleTop
인수가 있는 다른 인스턴스로 교체할 때 발생하는NullPointerException
문제를 수정했습니다. (b/158006669) - 이제
NavController
에서 발생하는 모든destination is unknown
예외에 디버깅 정보가 추가되어NavController
의 상태를 확인할 수 있습니다. (b/157764916)
버전 2.3.0-beta01
2020년 5월 20일
androidx.navigation:navigation-*:2.3.0-beta01
이 출시되었습니다. 버전 2.3.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 프로세스 종료 후
NavBackStackEntry
의Lifecycle
이 제대로 업데이트되지 않는 문제가 수정되었습니다. (b/155218371) - 이제
setGraph()
호출 전에 등록된OnDestinationChangedListener
인스턴스가 프로세스 종료 후 복원된 대상으로 올바르게 전송됩니다. (b/155218371) singleTop
을 사용할 때 이제NavBackStackEntry
의 인수가 올바르게 업데이트되고 업데이트된 인수는 모든OnDestinationChangeListener
인스턴스로 전송됩니다. (b/156545508)
종속 항목 업데이트
- 이제
NavigationUI
아티팩트가 CustomView1.1.0-rc01
및 DrawerLayout1.1.0-rc01
에 종속됩니다. (aosp/1309696)
버전 2.3.0-alpha06
2020년 4월 29일
androidx.navigation:navigation-*:2.3.0-alpha06
가 출시되었습니다. 버전 2.3.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
- 이전에 사용 가능한
app:uri
외에app:action
및app:mimeType
을 지원하도록 딥 링크가 확장되었습니다. 이제 NavController가 새로운NavDeepLinkRequest
클래스를 통한 이러한 필드의 조합으로 탐색을 지원합니다. (b/136573074, b/135334841)
API 변경사항
- 동적 탐색 대상의 Kotlin DSL 지원이 크게 확장되었습니다. (b/148969800)
버그 수정
- 중첩된 시작 대상을 사용할 때 딥 링크 인텐트가 무시되는 문제가 수정되었습니다. (b/154532067)
버전 2.3.0-alpha05
2020년 4월 15일
androidx.navigation:navigation-*:2.3.0-alpha05
가 출시되었습니다. 버전 2.3.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
<include-dynamic>
사용을 포함하는 동적 그래프의 경우 더 이상app:graphPackage
를 지정할 필요가 없으며 기본적으로 점 다음에applicationId
에moduleName
접미사를 추가하여 사용합니다.graphPackage
를 맞춤설정해야 하는 경우${applicationId}
자리표시자가 지원됩니다. (b/152696768)- 탐색 그래프 Kotlin DSL은 이제 작업에
defaultArguments
Map
을 노출하여 탐색 XML 파일의<action>
요소에 기본값을 설정하는 기능을 미러링합니다. (b/150345605)
버그 수정
- Navigation 2.2.2에서: 활동에 여러
NavHostFragment
인스턴스가 있을 때 그래프의 시작 대상으로 딥 링크를 생성할 때 발생하는IllegalStateException
이 수정되었습니다. (b/147378752)
종속 항목 업데이트
- 탐색은 이제 Fragment
1.2.4
에 종속됩니다. (aosp/1277325) - 동적 탐색은 이제 Play Core
1.7.2
에 종속됩니다. (aosp/1282257)
버전 2.3.0-alpha04
2020년 3월 18일
androidx.navigation:navigation-*:2.3.0-alpha04
가 출시되었습니다. 버전 2.3.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 탐색 Kotlin DSL에서 기능 모듈 활동 및 프래그먼트 대상에 대한 지원이 추가되었습니다. (b/148969800)
API 변경사항
DynamicExtras
클래스는 더 이상 빌더 패턴을 사용하지 않으며 이제 직접 생성할 수 있습니다. (aosp/1253671)- 이제
DynamicActivityNavigator
는 생성자에서Activity
가 아닌Context
를 가져옵니다. (aosp/1250252)
버그 수정
NavigationUI
는 더 이상 빈 라벨(예:android:label=””
이 있는 대상)을 무시하지 않으며 이제 제목을 빈 문자열로 올바르게 설정합니다. (b/148679860)
종속 항목 업데이트
- 이제 탐색 동적 기능 아티팩트는 Play Core
1.6.5
에 종속됩니다. (b/149556401)
버전 2.3.0-alpha03
2020년 3월 4일
androidx.navigation:navigation-*:2.3.0-alpha03
가 출시되었습니다. 버전 2.3.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 구체적인
DrawerLayout
클래스에 의존하는 대신AppBarConfiguration
에서는 이제 CustomView1.1.0-alpha02
에서 도입된Openable
인터페이스(DrawerLayout
에서 DrawerLayout1.1.0-alpha04
로 구현)를 사용하여 개발자가NavigationUI
가 있는 맞춤Openable
구현을 사용할 수 있습니다. (b/129030452)
버그 수정
- 이제
navigation-common-ktx
ProGuard 규칙이 모든NavArgs
인스턴스가 아닌 사용되는NavArgs
클래스만 올바르게 유지합니다. (b/150213558)
종속 항목 변경사항
- Navigation이 Core
1.2.0
에 대한 종속성을 되돌려 이제는 Core1.1.0
에 종속됩니다. 이로써 Navigation이 Core1.2.0
의 새로운 API에 종속되지 않을 때 개발자가 새로운 종속 항목으로 강제로 이동하게 되는 것을 방지합니다.
버전 2.3.0-alpha02
2020년 2월 19일
androidx.navigation:navigation-*:2.3.0-alpha02
가 출시되었습니다. 버전 2.3.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavBackStackEntry
를 사용하면 특정 백 스택 항목과 관련된 소량의 저장된 상태를 저장하는 데 적합한SavedStateHandle
에 액세스할 수 있습니다. 사용 사례는 결과 반환을 참고하세요. (b/79672220)
API 변경사항
- 현재 및 이전 대상에 대한
NavBackStackEntry
를 더 쉽게 가져올 수 있도록getCurrentBackStackEntry()
및getPreviousBackStackEntry()
의 편의 메서드가 추가되었습니다. (b/79672220)
버그 수정
- 이제 자체 작업 스택에서 앱을 실행할 때
navigateUp()
이 현재 대상의 인수와KEY_DEEP_LINK_INTENT
를 이전 대상으로 전달합니다. (b/147456890)
종속 항목 변경사항
- 이제 Navigation이 Core
1.2.0
에 종속됩니다.
버전 2.3.0-alpha01
2020년 2월 5일
androidx.navigation:navigation-*:2.3.0-alpha01
가 출시되었습니다. 버전 2.3.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 새
navigation-testing
아티팩트는TestNavHostController
클래스를 제공합니다. 이 클래스는 Navigation 테스트 시 모의NavController
사용에 대한 대안을 제공하여 탐색 작업 후 현재 대상을 설정하고 백 스택을 확인할 수 있도록 합니다. (b/140884273) - 새로운
navigation-dynamic-features-fragment
(및 전이 종속 항목,navigation-dynamic-features-runtime
)를 사용하면 기능 모듈의 대상 또는 전체 탐색 그래프(<include-dynamic>
을 통해)를 포함하여 대상으로 이동할 때 주문형 기능 모듈을 원활하게 설치할 수 있습니다. 자세한 내용은 기능 모듈로 탐색을 참고하세요. (b/132170186)
버그 수정
- Navigation
2.2.1
에서: 이제 쿼리 매개변수가 없는 딥 링크는 뒤에 오는{argument}
요소에 쿼리 매개변수를 추가하거나 딥 링크를 일치시키지 않는 것이 아니라 쿼리 매개변수를 올바르게 무시합니다. (b/147447512) - Navigation
2.2.1
에서:android.enableJetifier=true
가 필요하지 않도록DrawerArrowDrawable
에 대한navigation-ui
ProGuard 규칙이 업데이트되었습니다. (b/147610424) - Navigation
2.2.1
에서: 이제navigation-common-ktx
모듈이navigation-runtime-ktx
처럼 동일한 매니페스트 패키지 이름을 공유하는 대신 고유한 매니페스트 패키지 이름을 갖습니다. (aosp/1141947)
종속 항목 업데이트
- Navigation
2.2.1
에서: 이제 Navigation2.2.1
은 Lifecycle ViewModel SavedState2.2.0
및 Fragment1.2.1
에 종속됩니다.
버전 2.2.2
버전 2.2.2
2020년 4월 15일
androidx.navigation:navigation-*:2.2.2
이 출시되었습니다. 버전 2.2.2에 포함된 커밋을 확인하세요.
버그 수정
- 활동에
NavHostFragment
인스턴스가 여러 개 있는 경우 그래프 시작 대상에 딥 링크를 생성할 때 발생하던IllegalStateException
을 수정했습니다. (b/147378752) NavigationUI
는 더 이상 빈 라벨(예:android:label=””
이 있는 대상)을 무시하지 않으며 이제 제목을 빈 문자열로 올바르게 설정합니다. 이전에 Navigation 2.3.0-alpha04에서 출시되었습니다. (b/148679860)- 이제
navigation-common-ktx
ProGuard 규칙이 모든NavArgs
인스턴스가 아닌 사용되는NavArgs
클래스만 올바르게 유지합니다. 이전에 Navigation 2.3.0-alpha03에서 출시되었습니다. (b/150213558)
종속 항목 업데이트
- 탐색은 이제 Fragment
1.2.4
에 종속됩니다. (aosp/1277325)
버전 2.2.1
버전 2.2.1
2020년 2월 5일
androidx.navigation:navigation-*:2.2.1
가 출시되었습니다. 버전 2.2.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제 쿼리 매개변수가 없는 딥 링크가 뒤에 오는
{argument}
요소에 추가되거나 딥 링크와 일치하지 않는 쿼리 매개변수를 올바르게 무시합니다. (b/147447512) android.enableJetifier=true
가 필요하지 않도록DrawerArrowDrawable
에 대한navigation-ui
ProGuard 규칙이 업데이트되었습니다. (b/147610424)- 이제
navigation-common-ktx
모듈이navigation-runtime-ktx
처럼 동일한 매니페스트 패키지 이름을 공유하는 대신 공유한 매니페스트 패키지 이름을 갖습니다. (aosp/1141947)
종속 항목 업데이트
- Navigation
2.2.1
이 이제 Lifecycle ViewModel SavedState2.2.0
및 Fragment1.2.1
에 종속됩니다.
버전 2.2.0
버전 2.2.0
2020년 1월 22일
androidx.navigation:navigation-*:2.2.0
이 출시되었습니다. 버전 2.2.0에 포함된 커밋을 확인하세요.
2.1.0 이후 중요 변경사항
- NavBackStackEntry: 이제
NavController.getBackStackEntry()
를 호출하여 백 스택에 있는 대상 또는 탐색 그래프의 ID를 전달할 수 있습니다. 반환된NavBackStackEntry
는 이 대상을 시작하는 데 사용되는 인수를 제공할 뿐 아니라 Navigation 기반LifecycleOwner
,ViewModelStoreOwner
(NavController.getViewModelStoreOwner()
가 반환하는 것과 동일함),SavedStateRegistryOwner
도 제공합니다. - Lifecycle ViewModel SavedState 통합:
SavedStateViewModelFactory
는 이제NavController.getBackStackEntry()
또는NavController.getViewModelStoreOwner()
에서 반환된ViewModelStoreOwner
와 함께by navGraphViewModels()
또는ViewModelProvider
생성자를 사용할 때 사용되는 기본 팩토리입니다. - 딥 링크의 쿼리 매개변수 지원: 쿼리 매개변수가 포함된 딥 링크가 이제 재정렬된 쿼리 매개변수를 지원합니다. 딥 링크를 일치시킬 때 이제 기본값이 있거나 null을 허용하는 인수는 선택사항입니다.
- 개선된 애니메이션 지원: 이제
NavHostFragment
가 Fragment 1.2.0에서FragmentContainerView
를 사용하여 애니메이션 z-순서 문제 및 Fragment로 창 인셋 전달 문제를 해결했습니다.
버전 2.2.0-rc04
2019년 12월 18일
androidx.navigation:navigation-*:2.2.0-rc04
가 출시되었습니다. 버전 2.2.0-rc04에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.2.0-rc04
에서 조정된 페이드 애니메이션에 일치시키기 위해navigation-ui
에 사용되는 기본 페이드 애니메이션을 조정했습니다. (b/145769814)
버전 2.2.0-rc03
2019년 12월 4일
androidx.navigation:navigation-*:2.2.0-rc03
이 출시되었습니다. 버전 2.2.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
- 경로에 쿼리 매개변수와 인수를 마지막 요소로 사용할 때 마지막 경로 인수의 두 개 이상 문자가 파싱되지 않던 딥 링크 파싱 문제가 해결했습니다. (b/144554689)
- 선택적 매개변수가
null
대신"@null"
을 수신하는 딥 링크 파싱 문제가 해결되었습니다. (b/141613546) - 이제
NavHostFragment
는FragmentContainerView
와 함께 사용될 경우 구성 변경 후 그래프를 올바르게 복원합니다. (b/143752103)
종속 항목 변경사항
- Navigation이 이제 Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
및 Fragment1.2.0-rc03
에 종속됩니다(해당하는 경우).
버전 2.2.0-rc02
2019년 11월 7일
androidx.navigation:navigation-*:2.2.0-rc02
가 출시되었습니다. 버전 2.2.0-rc02에 포함된 커밋을 확인하세요.
종속 항목 변경사항
- Navigation이 이제 androidx.lifecycle
2.2.0-rc02
에 종속됩니다.
버전 2.2.0-rc01
2019년 10월 23일
androidx.navigation:navigation-*:2.2.0-rc01
이 2.2.0-beta01
이후 변경사항 없이 출시되었습니다. 버전 2.2.0-rc01에 포함된 커밋을 확인하세요.
버전 2.2.0-beta01
2019년 10월 9일
androidx.navigation:navigation-*:2.2.0-beta01
이 출시되었습니다. 버전 2.2.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavDestination
및 서브클래스가toString()
을 재정의하여 디버깅 시 유용한 추가 정보를 제공합니다. (b/141264986)
동작 변경사항
- 딥 링크를 일치시킬 때 이제 추가 쿼리 매개변수가 일치 실패를 일으키지 않고 무시됩니다. (b/141482822)
버그 수정
- 쿼리 매개변수도 지정되어 있는 경우 딥 링크 경로의 인수가 무시되는 문제를 해결했습니다. (b/141505755)
- 이제
Activity
의navArgs()
Kotlin 확장 프로그램에 추가 항목이 없을 때 나타나는 오류 메시지가 개선되었습니다. (b/141408999) - Safe Args 생성
Directions
자바 클래스에 이제 기본값이 포함되었습니다. (b/141099045) - Safe Args 생성
Args
자바 클래스에 이제 기본값이 포함되었습니다. (b/140123727) Toolbar
를 사용하면NavigationUI
는 두 최상위 대상 간에 이동할 때 더 이상 텍스트 변경에 애니메이션을 적용하지 않습니다. (b/140848160)
버전 2.2.0-alpha03
2019년 9월 18일
androidx.navigation:navigation-*:2.2.0-alpha03
가 출시되었습니다. 버전 2.2.0-alpha03에 포함된 커밋을 확인하세요.
동작 변경사항
setGraph
호출 후setViewModelStore()
를 호출할 때 이제IllegalStateException
이 발생합니다. 항상 초기 설정 과정에서NavHost
를 통해 설정함으로써 모든NavBackStackEntry
인스턴스가ViewModel
인스턴스를 위한 일관된 저장소를 가지도록 해야 합니다. (aosp/1111821)
버그 수정
- 여러 개의 탐색 그래프 범위
ViewModelStore
인스턴스에 연결된ViewModel
인스턴스를 사용할 때 발생하는ConcurrentModificationException
을 수정했습니다. (aosp/1112257)
버전 2.2.0-alpha02
2019년 9월 5일
androidx.navigation:navigation-*:2.2.0-alpha02
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 쿼리 매개변수가 포함된 딥 링크가 이제 재정렬된 쿼리 매개변수를 지원합니다. 딥 링크를 일치시킬 때 이제 기본값이 있거나 null을 허용하는 인수는 선택사항입니다. (b/133273839)
- 이제
NavController.getBackStackEntry()
를 호출하여 백 스택에 있는 대상 또는 탐색 그래프의 ID를 전달할 수 있습니다. 반환된NavBackStackEntry
는 이 대상을 시작하는 데 사용되는 인수를 제공할 뿐 아니라 Navigation 기반LifecycleOwner
,ViewModelStoreOwner
(NavController.getViewModelStoreOwner()
가 반환하는 것과 동일함),SavedStateRegistryOwner
도 제공합니다. (aosp/1101691, aosp/1101710)
버그 수정
ViewPager2
에NavHostFragment
를 추가할 때 실패하고IllegalArgumentException
이 발생하는 문제를 해결했습니다. (b/133640271)NavInflater
가 이제 불필요하게getResourceName()
을 호출하지 않아 인플레이션 시간을 최대 40% 단축합니다. (b/139213740)
버전 2.2.0-alpha01
2019년 8월 7일
androidx.navigation:navigation-*:2.2.0-alpha01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
SavedStateViewModelFactory
는 이제by navGraphViewModels()
를 사용하거나NavController.getViewModelStoreOwner()
에서 반환된ViewModelStoreOwner
와 함께ViewModelProvider
생성자를 사용할 때 기본 팩토리입니다. (b/135716331)
API 변경사항
- Navigation
2.1.0-rc01
에서 변경:2.1.0-alpha02
에 도입된NavController
의 지원 중단된getViewModelStore()
API를 삭제했습니다. (aosp/1091021)
버그 수정
- 이제
NavHostFragment
가FragmentContainerView
를 사용하여 애니메이션 z-순서 문제 및 Fragment로 창 인셋 전달 문제를 해결했습니다. (b/137310379)
버전 2.1.0
버전 2.1.0
2019년 9월 5일
androidx.navigation:navigation-*:2.1.0
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
2.0.0 이후 중요 변경사항
- ViewModel의 범위를 탐색 그래프로 지정: 이제
-ktx
라이브러리를 사용하는 Kotlin 사용자를 위한by navGraphViewModels()
속성 위임을 사용하거나NavController
에 추가된getViewModelStoreOwner()
API를 사용하여 탐색 그래프 수준으로 범위가 지정된 ViewModel을 만들 수 있습니다. 자세한 내용은 대상 간 UI 관련 데이터 공유를 참고하세요. - 대화상자 대상: 이제
navigate
시DialogFragment
를 표시하는<dialog>
대상을 만들 수 있습니다.NavHostFragment
는 기본적으로 대화상자 대상을 지원합니다. 자세한 내용은 DialogFragment에서 대상 만들기를 참고하세요. - URI로 탐색: 이제
Uri
를 사용한navigate
가 가능하며 이 경우 대상에 추가한<deepLink>
를 사용하여 탐색합니다. 자세한 내용은 URI를 사용하여 이동을 참고하세요. - NavHostController: 특히 맞춤
NavHost
를 생성하는 데 사용되는 API를NavHostController
로 이동했으므로 호스팅LifecycleOwner
,OnBackPressedDispatcher
,ViewModelStore
에NavController
를 연결하도록 구현할 수 있습니다.
버전 2.1.0-rc01
2019년 8월 7일
androidx.navigation:navigation-*:2.1.0-rc01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
2.1.0-alpha02
에 도입된NavController
의 지원 중단된getViewModelStore()
API를 삭제했습니다. (aosp/1091021)
버전 2.1.0-beta02
2019년 7월 19일
androidx.navigation:*:2.1.0-beta02
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
2.1.0-beta01
에 도입된 의도치 않은 jacoco 종속 항목이 삭제되었습니다. (b/137782950)
버전 2.1.0-beta01
2019년 7월 17일
androidx.navigation:*:2.1.0-beta01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
setupWithNavController()
를Toolbar
또는CollapsingToolbarLayout
과 함께 사용할 때 이제NavigationUI
가 위로 버튼의 삭제를 애니메이션합니다. (b/131403621)
버그 수정
- 동일한 컨테이너가 포함된 여러 NavHostFragment를
findNavController()
와 함께 사용할 때 발생하는 타이밍 문제를 해결했습니다. (b/136021571)
버전 2.1.0-alpha06
2019년 7월 2일
androidx.navigation:*:2.1.0-alpha06
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- NavHostFragment에 사용되는
app:navGraph
속성을navigation-runtime
아티팩트로 이동했습니다. XML을 통해 추가할 수 있는 맞춤 탐색기는 이 속성을 사용하여 Navigation Editor의 Host 패널과의 통합을 가져와야 합니다. (b/133880955)
API 변경사항
NavController
의getViewModelStore()
API를 지원 중단하고ViewModelStoreOwner
를 반환하는 새getViewModelStoreOwner()
메서드를 도입했습니다. (aosp/987010)- 부동 창 대상(예:
<dialog>
대상)의 구현을 마커 인터페이스인FloatingWindow
로 일반화하여 이제 모든<dialog>
대상이 구현됩니다. 이제 상단의 앱 바와 상호작용하는 NavigationUI 메서드는FloatingWindow
대상을 무시합니다. (b/133600763)
동작 변경사항
- 이제 Navigation이
<dialog>
대상 사용 시 화면에 표시되는 내용과의 동기화 상태를 올바르게 유지합니다. 결과적으로<fragment>
대상과 같은 비 대화상자 및 비 활동 대상으로 이동할 때 이제 Navigation에서<dialog>
대상을 자동으로 표시합니다. (b/134089818)
버그 수정
- 이제 Navigation에서 딥 링크를 처리하는 경우 액티비티를 다시 생성할 때 발생하는 애니메이션을 표시하지 않도록 하여 시각적 플래시 문제를 해결했습니다. (b/130362979)
- 초기 프래그먼트가 추가되는 동안 Fragment를 표시할 때 Navigation 백 스택이 동기화되지 않는 버그를 수정했습니다. (b/133832218)
버전 2.1.0-alpha05
2019년 6월 5일
androidx.navigation:*:2.1.0-alpha05
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
NavController
의 호스트 관련 API를NavController
의 새로운 서브클래스인NavHostController
로 이동했으며 그 이름을 변경했습니다. (aosp/966091)NavController
setHostOnBackPressedDispatcherOwner()
메서드를NavHostController
의setOnBackPressedDispatcher()
메서드로 대체했으며 이제 이 메서드를 호출하기 전에setLifecycleOwner()
를 호출해야 합니다. (aosp/965409)- 이제
NavHostController
가 이전에setHostOnBackPressedDispatcherOwner()
에서 반환된NavHostOnBackPressedManager
클래스를 대체하는enableOnBackPressed(boolean)
메서드를 포함합니다. (aosp/966091)
버그 수정
- URI로 탐색한 후 백 스택이 잘못되는 문제가 해결되었습니다. (b/132509387)
- 이제 NavController에서 자동으로 처리되는 딥 링크는 한 번만 트리거됩니다. (b/132754763)
버전 2.1.0-alpha04
2019년 5월 16일
androidx.navigation:*:2.1.0-alpha04
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
NavHostFragment
가 시스템 뒤로 버튼 이벤트를 가로챌 때app:defaultNavHost
를 올바르게 적용하도록 하여 Navigation2.1.0-alpha03
의 회귀 문제를 해결했습니다. (b/132077777)DialogFragmentNavigator
가 이제popBackStack()
및navigateUp()
작업을 올바르게 처리합니다. (b/132576764)- 중첩된 그래프 사이를 반복적으로 탐색할 때 발생하는
IllegalStateException: unknown destination during restore
문제를 해결했습니다. (b/131733658)
버전 2.1.0-alpha03
2019년 5월 7일
androidx.navigation:*:2.1.0-alpha03
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
알려진 문제
app:defaultNavHost="false"
를 사용하더라도 NavHostFragment가 계속해서 시스템 뒤로 버튼을 가로챕니다. (b/132077777)
새로운 기능
- 이제 대상으로
navigate
할 때DialogFragment
를 표시하는<dialog>
대상을 만들 수 있습니다.NavHostFragment
는 기본적으로 대화상자 대상을 지원합니다. (b/80267254) - 리소스 ID 또는
NavDirections
인스턴스로navigate
를 호출하는 것뿐 아니라 이제Uri
를 통해 탐색할 수 있으며 이때 대상에 추가한<deepLink>
를 사용하여 올바른 대상으로 이동합니다. (b/110412864)
동작 변경사항
- NavigationUI에서 제공하는 기본 애니메이션의 속도가 활동 및 프래그먼트의 기본 애니메이션 속도와 일치하도록 400ms에서 220ms로 빨라졌습니다. (b/130055522)
API 변경사항
NavHostFragment
의createFragmentNavigator()
메서드를 지원 중단하고 기능을 새onCreateNavController()
메서드로 이동했으며 이로써NavHostFragment
를 서브클래스로 분류할 때 맞춤 Navigator 추가의 올바른 진입점이라는 것을 더 명확하게 나타냈습니다. (b/122802849)NavDestination
에hasDeepLink()
메서드를 추가했으며 이를 사용하여 제공된Uri
가 대상(또는NavGraph
의 경우 탐색 그래프의 임의의 대상)에서 처리될 수 있는지를 확인할 수 있습니다. (b/117437718)
버그 수정
- 이제 기본 인수가
OnDestinationChangedListener
인스턴스에 올바르게 전달됩니다. (b/130630686) - 이제
NavHostFragment
에서OnBackPressedDispatcher
를 사용해 시스템 뒤로 이벤트를 가로채도록 함으로써 Fragment로 돌아갈 때 Fragment 수명 주기 메서드에서 조건부 탐색을 할 때 발생하는 문제를 해결했습니다. (b/111598096) - Safe Args의 경우 지정되지 않은
app:argType
이 있는android:defaultValue=”@null”
이 이제string
인수로 올바르게 추론됩니다. (b/129629192)
버전 2.1.0-alpha02
2019년 4월 3일
androidx.navigation:*:2.1.0-alpha02
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제 Kotlin 사용자를 위한
by navGraphViewModels()
속성 위임을 통해 또는NavController
에 추가된getViewModelStore()
API를 사용하여 탐색 그래프 수준으로 범위가 지정된 ViewModel을 만들 수 있습니다. (b/111614463)
API 변경사항
- 이제
app:targetPackage
를<activity>
대상에 추가하여 일치하는 패키지 이름을 제한할 수 있습니다. 패키지를 자체 애플리케이션 ID로 제한하는app:targetPackage="${applicationId}"
를 지원합니다. (b/110975456)
버그 수정
<activity>
대상의android:name
이 더 이상 인플레이션 시간에 클래스로 파싱되지 않으며 동적 기능 사용 시 ClassNotFoundExceptions를 방지합니다. (b/124538597)
버전 2.1.0-alpha01
2019년 3월 19일
Navigation 2.1.0
의 첫 번째 알파 릴리스입니다.
종속 항목 변경사항
- Navigation이 이제
androidx.core:core:1.0.1
및androidx.fragment:fragment:1.1.0-alpha05
에 종속됩니다. 이 출시에서는 또한androidx.legacy:legacy-support-core-utils:1.0.0
의 종속 항목이 삭제되었습니다. (b/128632612)
API 변경사항
- 리소스 ID와 번들로 클릭 리스너를 만드는 대신 새로운
Navigation.createNavigateOnClickListener(NavDirections)
메서드가 추가되었습니다. (b/127631752) FragmentNavigator.instantiateFragment
를 이제 지원 중단했습니다. 이제 기본 구현에서는FragmentFactory
를 사용하여 Fragment를 인스턴스화합니다. (b/119054429)
버그 수정
- 대상에 연결된 인수가 있는 경우 더 이상 Navigation에서 null
Bundle
을 전송하지 않도록 하여android:defaultValue="@null"
을 사용할 때 발생하는 문제를 해결했습니다. (b/128531879) - 이제 Safe Args가 KotlinPoet 1.1.0에 종속되도록 하여 지나치게 긴 패키지 이름 관련 문제를 해결했습니다. (b/123654948)
버전 2.0.0
버전 2.0.0
2019년 3월 14일
Navigation 2.0.0
이 2.0.0-rc02
에서 변경사항 없이 출시되었습니다.
버전 2.0.0-rc02
2019년 3월 6일
Navigation 2.0.0-rc02는 androidx.navigation
그룹 ID가 포함된 새로운 아티팩트를 제공하고 해당 종속 항목을 상응하는 AndroidX 종속 항목으로 변경합니다.
2.0.0-rc02의 동작은 Navigation 1.0.0-rc02의 동작과 동일하며 새로운 종속 항목에 맞춰 종속 항목을 업데이트하는 것 외에 1.0.0-rc02에서 코드 변경사항을 업데이트할 필요가 없습니다.
프로젝트가 AndroidX로 이전되어야 2.X 버전의 Navigation을 사용할 수 있습니다. Navigation 1.0 안정화 버전은 지원 라이브러리 종속 항목을 사용하는 마지막 출시가 될 것입니다. 앞으로 1.0 이후의 모든 개발은 AndroidX를 기반으로 하며 2.0 안정화 버전에서 빌드됩니다.
AndroidX 이전 종속 항목
Navigation의 AndroidX 이전 버전의 경우 다음 종속 항목을 포함합니다.
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
Safe args의 경우 최상위 build.gradle
파일에 다음 클래스 경로를 추가합니다.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
버전 1.0.0
버전 1.0.0
2019년 3월 14일
Navigation 1.0.0
이 1.0.0-rc02
에서 변경사항 없이 출시되었습니다.
버전 1.0.0-rc02
2019년 2월 26일
Navigation 1.0.0 안정화 릴리스의 두 번째 출시 후보입니다. 이 릴리스에는 다양한 버그 수정이 포함되어 있습니다.
버그 수정
- 루트 그래프에 ID가 없는 경우
popBackStack()
이 무시되는 문제를 해결했습니다. (b/126251695) - 이제
navigateUp()
이FLAG_ACTIVITY_NEW_TASK
없이 딥 링크를 처리한 후 호출될 때 앱의 작업으로 돌아가기를 올바르게 처리합니다. (b/126082008) - 올바른 열기 종료 애니메이션을 적용하지 않는
ActivityNavigator.applyPopAnimationsToPendingTransition
문제를 해결했습니다. (b/126237567) - 이제 Safe Args에서 생성된 Kotlin 코드가
R
클래스와 연결된 패키지 이름의in
및fun
과 같은 Kotlin 키워드를 올바르게 이스케이프 처리합니다. (b/126020455)
버전 1.0.0-rc01
2019년 2월 21일
Navigation 1.0.0 공개 버전의 출시 후보입니다. 이 버전에는 한 가지 버그 수정이 포함되어 있습니다.
버그 수정
- Fragment 및
singleTop
탐색 작업을 사용할 때 발생하는 문제를 해결했습니다. (b/124294805)
버전 1.0.0-beta02
2019년 2월 12일
이 릴리스에는 다양한 소규모 변경사항 및 중요한 버그 수정이 포함되어 있습니다.
새로운 기능
- 이제
0
을reference
인수의android:defaultValue
로 사용할 수 있습니다. (b/124248602)
동작 변경사항
- 이제 정확한 딥 링크 일치가
.*
또는 인수 일치가 있는 딥 링크보다 높은 우선순위를 차지합니다. (b/123969518)
버그 수정
- 백 스택에서 마지막 대상을 표시할 때 이제
popBackStack()
및navigateUp
이false
를 올바르게 반환하도록 하여1.0.0-beta01
에서 나타난 회귀 문제를 해결했습니다. (b/123933201) - 저장된 인스턴스 상태를 복원하는 동안 Navigation이 이제
ClassLoader
를 올바르게 설정하므로Navigator
저장된 상태 또는NavDestination
에 전송된 인수의 맞춤 클래스를 사용할 때 발생하는 문제를 방지합니다. (b/123893858) - 저장된 인스턴스 상태에서
Parcelable[]
인수를 복원할 때 Safe Args 생성 NavArgs 클래스가 더 이상 비정상 종료되지 않습니다. (b/123963545) - 이제 Safe Args가 불필요하게 생성된 Kotlin 클래스를 올바르게 정리합니다. (b/124120883)
버전 1.0.0-beta01
2019년 2월 4일
Navigation의 첫 번째 베타 출시입니다. 앞으로 심각한 문제만 없다면 다음 버전까지 Navigation API가 안정적으로 유지될 것으로 예상됩니다. 이 출시에는 몇 가지 버그 수정 및 동작 변경사항이 포함되어 있습니다.
동작 변경사항
- Navigation에서 이제 런타임 시 그리고 Safe Args를 통해 인수 기본값이 동일하게 취급되도록 합니다. 따라서
app:argType="reference"
가 있는 인수만 다른 리소스를 가리키는 기본값을 가질 수 있습니다(예:@color/colorPrimary
). 탐색 XML을 파싱할 때 다른app:argType
이 포함된 참조 기본값을 사용하려고 하면 예외가 발생합니다. (b/123551990) - Safe Args가 이제 Android Gradle 플러그인 3.3.0에 종속됩니다. (aosp/888413)
- Safe Args가 이제 Kotlin 1.3.20에 종속됩니다. (aosp/888414)
버그 수정
- 이제 Safe Args를 모든 버전의 Android Gradle 플러그인의 라이브러리 및 기능 모듈에서 사용할 수 있습니다. (b/121304903)
- 단일
popBackStack()
작업이 한 번에 하나의 대상만 표시하지 않고 백 스택 상단에서 대상의 모든 사본을 표시하는 회귀 문제를 해결했습니다. (b/123552990) FragmentNavigator
상태가NavController
의 상태와 비동기화되어 백 스택을 복원하려고 할 때IllegalStateException
이 발생하는 문제를 해결했습니다. (b/123803044)- 난독화와 함께 ProGuard를 사용할 때
NavigationUI
처리된 뒤로 화살표가 표시되지 않는 문제를 해결했습니다. (b/123449431) - Safe Args에서 생성된 코드가 이제
.OuterClass$InnerClass
형식의 정적 내부 클래스를 가리키는app:argType
의 사용을 제대로 처리합니다. (b/123736741) - 이제 Safe Args에서 생성된 자바 코드가 전역 작업 및 깊이 중첩된 대상을 올바르게 처리합니다. (b/123347762)
버전 1.0.0-alpha11
2019년 1월 23일
Safe Args 관련 문제를 해결하는 1.0.0-alpha10
의 핫픽스 릴리스입니다.
버그 수정
- Safe Args에서 전역 작업과 연결된 Directions 클래스를 가져오지 못하는 문제가 해결되었습니다. (b/123307342)
버전 1.0.0-alpha10
2019년 1월 23일
알려진 문제
- Safe Args에서 전역 작업과 연결된 Directions 클래스를 가져오지 못합니다. (b/123307342)
이 릴리스에는 획기적인 API 변경사항이 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
새로운 기능
- 이제 Kotlin 사용자는
by navArgs()
속성 위임을 사용하여Activity
또는Fragment
의 Safe Args 생성NavArgs
클래스 참조를 느리게 가져올 수 있습니다. (b/122603367) - 이제 Safe Args에서
androidx.navigation.safeargs.kotlin
플러그인을 적용하여 Kotlin 코드를 생성할 수 있습니다. Kotlin 코드는 Kotlin 전용 모듈을 위해 특별히 빌드되었으며 이전androidx.navigation.safeargs
플러그인을 통해 여전히 사용할 수 있는 빌더 패턴 위에 기본 인수 및 불변 클래스를 사용합니다. (b/110263087)
동작 변경사항
- 일치하는 딥 링크가 이제 가장 일치하는 인수가 있는 딥 링크로 편중됩니다. (b/118393029)
NavController
에서setGraph()
를 호출하면 이제 백 스택이 재설정됩니다. (b/111450672)- 알 수 없는 딥 링크가 더 이상
IllegalStateException
을 유발하지 않고 무시되도록 하여 중첩되었거나 여러 개의NavHostFragment
와 관련된 문제를 해결했습니다. (b/121340440)
브레이킹 체인지
- Activity에 열기 애니메이션을 적용하는
NavOptions.applyPopAnimationsToPendingTransition()
메서드를ActivityNavigator
로 이동했습니다. (b/122413117) - Safe Args는 이제 인수가 없는 작업의 동일한 클래스를 복제하지 않습니다. 생성된 NavDirections 클래스에서 인수가 없는 메서드의 반환 유형은 이제
NavDirections
입니다. (b/123233147) - Safe Args 생성 Directions 클래스에 이제 공개 생성자가 없습니다. 생성된 정적 메서드로만 상호작용해야 합니다. (b/123031660)
- 이제 Safe Args 생성
NavDirections
클래스에 공개 생성자가 없으므로 생성된 Directions 클래스의 정적 메서드를 통해서만 생성해야 합니다. (b/122963206) NavDirections
의getArguments()
에서 반환된Bundle
이 이제@Nullable
이 아니라@NonNull
로 표시됩니다. (b/123243957)
버그 수정
- 이제
NavDeepLinkBuilder
에서 고유성을 확인하기 위해 전달한 인수를 사용하여 동일한 대상에 연결된 여러 개의 동시PendingIntent
를 올바르게 처리합니다. (b/120042732) - 중첩된
NavHostFragment
또는 백 스택이 있는 기타 하위 Fragment를 사용할 때 이제NavController
에서popBackStack()
작업을 올바르게 처리합니다. (b/122770335) - 이제
NavigationUI
에서 위로 버튼의 콘텐츠 설명을 올바르게 설정합니다. (b/120395362) - Safe Args 생성 Directions 클래스에서 이제 대상의 작업과 동일한 ID를 사용하는 전역 작업을 올바르게 처리합니다. (b/122962504)
- 이제 Safe Args 생성
NavDirections
클래스에는equals()
가 참을 반환할 때 동일한hashCode()
값이 올바르게 있습니다. (b/123043662) NavHostFragment
의FragmentManager
에서 맞춤FragmentTransactions
를 시도할 때FragmentNavigator
에서 발생하는 오류 메시지가 개선되었습니다. 항상getChildFragmentManager()
를 사용해야 합니다. (b/112927148)
버전 1.0.0-alpha09
2018년 12월 18일
이 릴리스에는 획기적인 API 변경사항이 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
android.arch.navigation:navigation-testing
아티팩트의 개발을 계속하지 않기로 결정했습니다. NavController
의 내부 테스트에는 도움이 되는 것으로 입증되었지만, navigate()
가 올바르게 호출되고 있는지 확인하기 위해 모의 NavController
인스턴스를 만드는 것과 같은 대체 테스트 전략을 사용할 것을 권장합니다. 이 방법은 AndroidDevSummit 2018의 단일 활동 소개에서 자세히 논의되었으며 Google에서는 Navigation을 통한 테스트와 관련된 추가 문서를 제작하고 있습니다.
새로운 기능
menuCategory="secondary"
가 포함된MenuItem
이NavigationUI
메서드와 함께 사용될 때 더 이상 백 스택을 표시하지 않습니다. (b/120104424)- 이제
AppBarConfiguration
을 사용하여navController.navigateUp()
에서false
를 반환할 때 호출되는 대체OnNavigateUpListener
인스턴스를 설정할 수 있습니다. b/79993862 b/120690961
브레이킹 체인지
argType="reference"
인<argument>
를 사용할 때 Navigation에서 더 이상 참조를 파싱하지 않는 대신 원시 리소스 ID 자체를 제공합니다. b/111736515onNavDestinationSelected()
가 이제 기본적으로 탐색 그래프의 시작 대상으로 돌아가서setup
메서드와 일치하도록 만듭니다.MenuItem
에menuCategory="secondary"
를 추가하여 백 스택이 표시되지 않도록 합니다. aosp/852869- 생성된
Args
클래스의fromBundle()
메서드가 이제 null이 허용되는Bundle
대신 null이 아닌Bundle
을 사용합니다. aosp/845616
버그 수정
- 이제 인수가 항상 문자열로 파싱되지 않고 딥 링크에서 올바른
argType
으로 파싱됩니다. b/110273284 - Navigation에서 이제 공개 리소스를 올바르게 내보냅니다. b/121059552
- 이제 Safe Args가 Android Gradle 플러그인 3.4 Canary 4 이상과 호환됩니다. (b/119662045)
버전 1.0.0-alpha08
2018년 12월 6일
이 릴리스에는 획기적인 API 변경사항이 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
새로운 기능
- 이제
NavigationUI
메서드와 함께 사용하면 대상 라벨이android:label
의{argName}
인스턴스를 올바른 인수로 자동 대체합니다. b/80267266 - Navigation에서 이제 지원 라이브러리 28.0.0을 사용합니다. b/120293333
브레이킹 체인지
OnNavigatedListener
에서OnDestinationChangedListener
로 이름이 변경되었습니다. b/118670572OnDestinationChangedListener
에서 이제 인수의Bundle
도 전달합니다. aosp/837142app:clearTask
,app:launchDocument
속성 및 관련 메서드가 삭제되었습니다. 그래프의 루트와 함께app:popUpTo
를 사용하여 백 스택의 모든 대상을 삭제합니다. b/119628354ActivityNavigator.Extras
가 이제Builder
패턴을 사용하며 임의의Intent.FLAG_ACTIVITY_
플래그를 설정하는 기능을 추가합니다. aosp/828140NavController.onHandleDeepLink
에서handleDeepLink
로 이름이 변경되었습니다. aosp/836063NavOptions
,NavInflater
,NavDeepLinkBuilder
,AppBarConfiguration
과 같이 서브클래스 목적이 아닌 여러 클래스와 메서드가final
로 설정되었습니다. aosp/835681- 지원 중단된
NavHostFragment.setGraph()
메서드가 삭제되었습니다. aosp/835684 - 지원 중단된
NavigationUI.navigateUp(DrawerLayout, NavController)
메서드가 삭제되었습니다. aosp/835684 - Fragment 생성이
FragmentNavigator
로 이동하여 더욱 간편하게FragmentFactory
에 Fragment 생성을 위임할 수 있습니다. b/119054429 NavGraphNavigator
생성자가 더 이상Context
를 가져오지 않습니다. aosp/835340- NavigatorProvider는 이제 인터페이스가 아닌 클래스입니다.
getNavigatorProvider()
에서 반환되는NavigatorProvider
의 기능은 변경되지 않았습니다. aosp/830660 NavDestination.navigate()
를 삭제했습니다. 대신Navigator
에서navigate()
를 호출하세요. (aosp/830663)Navigator
를 대규모로 리팩터링하고OnNavigatorNavigatedListener
의 필요성을 제거했으며 대신navigate
가 이전에 이동했던NavDestination
을 반환합니다.Navigator
인스턴스에서 더 이상 열기 이벤트를NavController
에 전송할 수 없습니다.OnBackPressedCallback
을 사용하여 뒤로 버튼 누르기를 가로채고navController.popBackStack()
을 호출하는 방법을 고려해 보세요. (aosp/833716)
버그 수정
- 이제 대상이
<navigation>
요소인 경우popUpTo
가 일관되게 작동합니다. (b/116831650) - 중첩된 그래프를 사용할 때
IllegalArgumentException
을 유발하는 여러 버그를 수정했습니다. (b/118713731, b/113611083, b/113346925, b/113305559) - 이제
<activity>
대상의dataPattern
속성이toString()
을 호출하여 문자열이 아닌 인수를 채웁니다. (b/120161365)
Safe Args
- Safe Args는 Enum 값을 포함하여 직렬화 가능한 객체를 지원합니다. Enum 유형은 클래스 이름 없이 enum 리터럴을 사용하여 기본값을 설정할 수 있습니다(예:
app:defaultValue="READ"
). (b/111316353) - Safe Args는 지원되는 모든 유형의 배열을 지원합니다. b/111487504
- Safe Args는 이제 리소스 디렉터리의 하위 폴더를 무시합니다. b/117893516
- Safe Args는 적절한 위치에
@Override
주석을 추가합니다. (b/117145301)
버전 1.0.0-alpha07
2018년 10월 29일
새로운 기능
- 새로운 AppBarConfiguration 클래스를 사용하여 최상위 대상으로 고려할 대상을 맞춤설정할 수 있습니다. 자세한 내용은 업데이트된 문서를 참고하세요. b/117333663
- 이제 그래프의 시작 대상으로 인수를 전달할 수 있습니다. b/110300470
- 이제 딥 링크에서 마침표, 하이픈, 더하기 기호가 있는 맞춤 체계를 지원합니다. b/112806402
브레이킹 체인지
navigation-testing-ktx
모듈이navigation-testing artifact
에 포함되었으며 더 이상 게시되지 않습니다.navigation-testing
아티팩트가 이제 Kotlin 표준 라이브러리 종속 항목을 갖습니다. API가 Kotlin 규칙과 더욱 일관성 있게 변경되었지만 계속해서 자바로 작성된 테스트에 사용할 수 있습니다.- 메타데이터 매니페스트 등록 탐색 그래프가 더 이상 지원되지 않습니다. b/118355937
- 작업이 더 이상 <activity> 대상에 연결되지 않습니다. (aosp/785539)
버그 수정
- 이제 딥 링크가 쿼리 매개변수를 올바르게 파싱합니다. b/110057514
- 이제 Activity 대상이 모든 시작 및 종료 애니메이션을 올바르게 적용합니다. b/117145284
- 맞춤 Navigator를 사용할 때 구성을 변경한 이후에 발생하는 비정상 종료 문제가 수정되었습니다. b/110763345
Safe Args
- Safe args가 이제 Android Gradle 플러그인 3.2.1에 고정된 종속 항목을 갖습니다. b/113167627
- 이제 내부 클래스의 Direction을 생성할 수 있습니다. b/117407555
- <include> 그래프에 Direction을 생성하는 문제가 수정되었습니다. (b/116542123)
버전 1.0.0-alpha06
2018년 9월 20일
새로운 기능
- 이제 Fragment 및 Activity 대상의 공유된 요소 전환이 지원됩니다. b/79665225. 자세한 내용은 탐색 아키텍처 구성요소를 통한 탐색 구현을 참고하세요.
NavigationView
의 항목을 선택하면 포함된 모든 하단 시트가 닫힙니다. b/112158843
API 변경사항
- 브레이킹 체인지: Navigator
navigate()
메서드가 이제Navigator.Extras
매개변수를 취합니다. - NavController의
getGraph()
메서드가 이제NonNull
입니다. b/112243286
버그 수정
- 개별 대상의 뷰와 함께 사용되는 경우 더 이상
NavigationUI.setupWithNavController()
에서 뷰를 누출하지 않습니다. b/111961977 - Navigator
onSaveState()
가 이제 한 번만 호출됩니다. b/112627079
Safe Args
- 탐색 대상 Direction 클래스에 상위 Direction 클래스가 있는 경우 이를 확장합니다. (b/79871405)
- 이제 Directions 및 Args 클래스가 유용한
toString()
을 구현합니다. (b/111843389)
버전 1.0.0-alpha05
2018년 8월 10일
버그 수정
- 잘못된 백 스택 동작을 일으키는 버그가 수정되었습니다. b/111907708
- Generated Args 클래스의
equals()
에 있는 버그가 수정되었습니다. b/111450897 - Safe Args의 빌드 실패가 해결되었습니다. b/109409713
- 리소스 식별자에서 자바 이름으로의 변환이 수정되었습니다. b/111602491
- Safe Args 플러그인의 null 허용 여부 관련 오류 메시지가 수정되었습니다.
- 누락된 null 허용 여부 주석이 추가되었습니다.
버전 1.0.0-alpha04
2018년 7월 19일
Navigation 1.0.0-alpha04
및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.
API/동작 변경사항
- NavHostFragment는 항상 현재 Fragment를 기본 탐색 프래그먼트로 설정하여, 하위 프래그먼트 관리자가 열린 후에야 외부 NavController가 열리도록 합니다. (b/111345778)
Safe Args
- 브레이킹 체인지: ConstraintLayout 2.0.0-alpha1과 같은 다른 라이브러리와의 충돌을 피하기 위해
app:type
이app:argType
으로 변경되었습니다. (b/111110548) - 이제 Safe Args의 오류 메시지를 클릭할 수 있습니다. (b/111534438)
- 이제 Args 클래스에서
NonNull
속성이 실제로 null이 아님을 확인합니다. (b/111451769) - NavDirections 및 Args에서 생성한 클래스에
NonNull
주석이 추가되었습니다. (b/111455455 및 b/111455456)
버그 수정
- fragment 대상으로 딥 링크 후 발생하는 시스템 뒤로 버튼의 문제가 해결되었습니다. (b/111515685)
버전 1.0.0-alpha03
2018년 7월 12일
Navigation 1.0.0-alpha03
및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.
API/동작 변경사항
- 툴바에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. (b/109868820)
- CollapsingToolbarLayout에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. (b/110887183)
- 이제 popBackStack()은 백 스택이 비어 있거나 지정된 대상 ID가 백 스택에 없으면 false를 반환합니다. (b/110893637)
- 이제 FragmentManager가 상태를 저장하고 나면 FragmentNavigator가 탐색 작업을 무시하여 'onSaveInstanceState 후 이 작업을 실행할 수 없음' 예외가 방지됩니다. (b/110987825)
Safe Args
- 브레이킹 체인지: 작업과 인수 이름에 포함된 영숫자 이외의 문자는 각각의 NavDirections 메서드 이름에서 카멜식 대소문자 표기로 대체됩니다.
- 예를 들어
DemoController.index
는setDemoControllerIndex
가 됩니다. (b/79995048) - 예를 들어
action_show_settings
는actionShowSettings
가 됩니다. (b/79642240)
- 예를 들어
- 브레이킹 체인지: 이제 인수는 기본적으로 null이 아닌 것으로 간주됩니다. 문자열과 Parcelable 인수에 null 값을 허용하려면
app:nullable="true"
를 추가합니다. (b/79642307) - 이제
app:type="long"
을 defaultValues와 함께 '123L' 형태로 사용할 수 있습니다. (b/79563966) - Parcelable 인수가 이제
app:type
의 정규화된 클래스 이름을 사용하여 지원됩니다. 지원되는 유일한 기본값은"@null"
입니다. (b/79563966) - Args 클래스에서 이제
equals()
및hashCode()
를 구현합니다. (b/79642246) - 이제 라이브러리 프로젝트에 Safe Args 플러그인을 적용할 수 있습니다. (b/80036553)
- 이제 기능 프로젝트에 Safe Args 플러그인을 적용할 수 있습니다. (b/110011752)
버그 수정
- Fragment 수명 주기 메서드가 수행되는 동안 탐색할 때 발생하는 문제가 해결되었습니다. b/109916080
- 중첩된 그래프를 여러 번 탐색할 때 발생하는 문제가 해결되었습니다. (b/110178671)
- 그래프에서 첫 번째 대상으로
setPopUpTo
를 사용할 때 발생하는 문제가 해결되었습니다. (b/109909461) - 모든
app:defaultValue
값이 문자열로 전달되는 문제를 해결했습니다. (b/110710788) - Android Gradle 플러그인 3.2 베타 01에 번들로 제공되는 aapt2에서 이제 Navigation XML 파일의 모든
android:name
속성에 Keep 규칙을 추가합니다. (b/79874119) - 기본 FragmentNavigator를 대체할 때 발생하는 메모리 누수가 해결되었습니다. (b/110900142)
버전 1.0.0-alpha02
2018년 6월 7일
동작 변경사항
FragmentNavigator
에서 이제setReorderingAllowed(true)
를 사용합니다. (b/109826220)탐색이 이제 딥 링크 URL에서 파싱된 URLDecodes 인수를 디코딩합니다. (b/79982454)
버그 수정
Fragment 수명 주기 메서드에서 탐색을 호출할 때 발생하는
IllegalStateException
을 수정했습니다. (b/79632233)애니메이션 사용 시 깜박이는 문제를 해결하기 위해 탐색에서 이제 지원 라이브러리 27.1.1을 사용합니다. (b/80160903)
하위 fragment로 defaultNavHost="true"를 사용할 때 발생하는
IllegalArgumentException
을 수정했습니다. (b/79656847)NavDeepLinkBuilder를 사용할 때 발생하는
StackOverflowError
를 해결했습니다. (b/109653065)중첩된 그래프로 다시 이동할 때 발생하는
IllegalArgumentException
을 수정했습니다. (b/80453447)launchSingleTop
사용 시 Fragment가 중복되는 문제를 해결했습니다. (b/79407969)탐색에서 이제 중첩된 그래프의 올바른 합성 백 스택을 빌드합니다. (b/79734195)
MenuItem
으로 중첩된 그래프를 사용할 때 NavigationUI는 올바른 항목을 강조표시합니다. (b/109675998)
API 변경사항
NavOptions
에 포함된 작업 및 관련 API의clearTask
속성 지원을 중단했습니다. (b/80338878)NavOptions
에 포함된 작업 및 관련 API의launchDocument
속성을 지원 중단했습니다. (b/109806636)
버전 1.0.0-alpha01
2018년 5월 8일
탐색은 인앱 탐색 빌드를 위한 프레임워크를 제공합니다. 최초 출시는 1.0.0-alpha01
입니다.