Fragment
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 7월 24일 | 1.8.2 | - | - | - |
종속 항목 선언
Fragment의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용을 알아보려면 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { def fragment_version = "1.8.2" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.2" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 1.8
버전 1.8.2
2024년 7월 24일
androidx.fragment:fragment-*:1.8.2
이 출시되었습니다. 버전 1.8.2에 포함된 커밋을 확인하세요.
버그 수정
- 이제
AndroidFragment
가 상위 프래그먼트가 프래그먼트 백 스택에 배치되는 사례를 올바르게 처리하여 'id의 뷰를 찾을 수 없음'을 방지합니다. 문제가 발생할 수 있습니다. 추가했습니다. (I94608) ViewGroup
를 사용하는FragmentTransaction.add
메서드를 통해 추가된 프래그먼트는 이제onStart()
로 진행하기 전에onContainerAvailable
를 기다립니다. 이는AndroidFragment
와 같은 API 사용자에게 영향을 미칩니다. 즉,AndroidFragment
는onStart()
를 통해 이동하기 전에AndroidFragment
가 컴포지션에 다시 들어갈 때까지 기다립니다. 추가했습니다. (I94608)
버전 1.8.1
2024년 6월 26일
androidx.fragment:fragment-*:1.8.1
이 출시되었습니다. 버전 1.8.1에 포함된 커밋을 확인하세요.
버그 수정
- 컨테이너가 없는 프래그먼트가 뒤로 탐색 예측 동작을 시작할 때 즉시
DESTROYED
이 되는 문제를 수정했습니다. 이제 동작이 완료될 때까지CREATED
상태로 유지됩니다. 추가했습니다. (If6b83, b/345244539)
버전 1.8.0
2024년 6월 12일
androidx.fragment:fragment-*:1.8.0
이 출시되었습니다. 버전 1.8.0에 포함된 커밋을 확인하세요.
1.7.0 이후 중요 변경사항
- 이제
fragment-compose
아티팩트에는 프래그먼트 클래스 이름을 통해 Compose 계층 구조에 프래그먼트를 추가할 수 있는AndroidFragment
Composable
가 포함됩니다. 프래그먼트 상태 저장 및 복원을 자동으로 처리합니다. 이는AndroidViewBinding
를 사용하여 프래그먼트를 확장하는 이전에 권장된 접근 방식을 직접 대체하여 사용해야 합니다. - 이제
FragmentManager
의OnBackStackChangedListener
인터페이스에 있는onBackStackChangeCancelled
콜백이FragmentManager
에서 작업을 실행하는 과정에서 실행되고onBackStackChangeCommitted
콜백의 타이밍에 더 가깝게 이동합니다.
버전 1.8.0-rc01
2024년 5월 29일
androidx.fragment:fragment-*:1.8.0-rc01
이 출시되었습니다. 버전 1.8.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
FragmentManagers OnBackStackChangedListener
인터페이스의onBackStackChangeCancelled
콜백이FragmentManager
에서 작업을 실행하는 과정에서 실행되고onBackStackChangeCommitted
콜백의 타이밍에 더 가깝게 이동합니다. 추가했습니다. (I5ebfb, b/332916112)
버전 1.8.0-beta01
2024년 5월 14일
androidx.fragment:fragment-*:1.8.0-beta01
이 출시되었습니다. 버전 1.8.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.7.1
에서: 뒤로 탐색 예측은 이제 모든 프래그먼트에 Animator 또는 탐색 가능한 Androidx 전환이 있는 트랜잭션에만 실행됩니다. 이를 통해 부분적으로 탐색 가능한 거래를 취소하면 검은색 화면이 나타나는 문제가 해결되었습니다. 추가했습니다. (I43037, b/339169168)
버전 1.8.0-alpha02
2024년 4월 17일
androidx.fragment:fragment-*:1.8.0-alpha02
이 출시되었습니다. 버전 1.8.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.7.0-rc02
에서: 다른 전환 없이sharedElement
를 설정하면 실행되지 않는 이유를 나타내는 로그를 추가했습니다. 추가했습니다. (Iec48e) - Fragment
1.7.0-rc02
에서: 찾을 수 없는 공유 요소가 다른 모든 전환을 찾을 수 있는 트랜잭션에 추가되면 비정상 종료가 발생하는 버그가 수정되었습니다. 이제 거래가 탐색 불가로 올바르게 간주됩니다. 추가했습니다. (I18ccd)
버전 1.8.0-alpha01
2024년 4월 3일
androidx.fragment:fragment-*:1.8.0-alpha01
이 출시되었습니다. 버전 1.8.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 새
AndroidFragment
Composable
를 사용하면 프래그먼트 클래스 이름을 통해 Compose 계층 구조에 프래그먼트를 추가할 수 있습니다. 프래그먼트 상태 저장 및 복원을 자동으로 처리합니다. 이는 AndroidViewBindingComposable
의 직접 대체로 사용할 수 있습니다.(b/312895363, Icf841)
문서 변경사항
- API가 호출되는 시기와 사용 방법을 나타내도록
OnBackStackChangedListener
API 관련 문서를 업데이트했습니다. 추가했습니다. (I0bfd9)
종속 항목 업데이트
- 프래그먼트가 이제 프로필 설치 프로그램 1.3.1에 종속됩니다.
버전 1.7
버전 1.7.1
2024년 5월 14일
androidx.fragment:fragment-*:1.7.1
이 출시되었습니다. 버전 1.7.1에 포함된 커밋을 확인하세요.
버그 수정
- 뒤로 탐색 예측은 이제 모든 프래그먼트에 Animator 또는 탐색 가능한 Androidx 전환이 있는 트랜잭션에서만 실행됩니다. 이를 통해 부분적으로 탐색 가능한 거래를 취소하면 빈 화면이 표시되는 문제가 해결되었습니다. 추가했습니다. (I43037, b/339169168)
버전 1.7.0
2024년 5월 1일
androidx.fragment:fragment-*:1.7.0
이 출시되었습니다. 버전 1.7.0에 포함된 커밋을 확인하세요.
뒤로 탐색 예측 동작 지원
- 프래그먼트는 이제
Animator
를 사용하거나 AndroidX Transition 1.5.0을 사용할 때 예측 인앱 뒤로를 지원합니다. 이렇게 하면 사용자가 동작 완료 또는 취소를 통해 트랜잭션을 커밋할지 결정하기 전에 Animator/Transition을 탐색하여 뒤로 동작을 사용하여 이전 프래그먼트를 볼 수 있습니다.
전환 시스템 | XML 리소스 | 뒤로 탐색 예측 지원 |
---|---|---|
Animation |
R.anim |
아니요 |
Animator |
R.animator |
예 |
프레임워크 Transition |
R.transition |
아니요 |
Transition 1.4.1 이하의 AndroidX Transition |
R.transition |
아니요 |
Transition 1.5.0이 포함된 AndroidX Transition |
R.transition |
예 |
뒤로 탐색 예측 동작을 선택한 후 프래그먼트의 뒤로 탐색 예측 지원에 문제가 있는 경우 문제를 재현하는 샘플 프로젝트를 통해 프래그먼트 관련 문제를 제출해 주세요. 활동의 onCreate()
에서 FragmentManager.enabledPredictiveBack(false)
를 사용하여 뒤로 탐색 예측을 사용 중지할 수 있습니다.
이제 FragmentManager.OnBackStackChangedListener()
가 뒤로 탐색 예측 진행 및 취소된 이벤트를 수신하기 위한 onBackStackChangeProgressed()
및 onBackStackChangeCancelled()
를 제공합니다.
프래그먼트 Compose 아티팩트
프래그먼트 기반 아키텍처에서 완전한 Compose 기반 아키텍처로 전환 중인 앱 지원에 중점을 둔 새로운 fragment-compose
아티팩트를 만들었습니다.
이 새로운 아티팩트에서 사용할 수 있는 첫 번째 기능은 Fragment
의 content
확장 메서드입니다. ComposeView
를 만들고 올바른 ViewCompositionStrategy
를 설정하여 개별 프래그먼트의 UI에 Compose를 더 쉽게 사용할 수 있도록 합니다.
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
버전 1.7.0-rc02
2024년 4월 17일
androidx.fragment:fragment-*:1.7.0-rc02
이 출시되었습니다. 버전 1.7.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 다른 전환 없이
sharedElement
를 설정하면 실행이 실패하는 이유를 나타내는 로그를 추가했습니다. 추가했습니다. (Iec48e) - 찾을 수 없는 공유 요소가 다른 모든 전환을 찾을 수 있는 트랜잭션에 추가되면 비정상 종료가 발생하는 버그를 수정했습니다. 이제 거래가 탐색 불가로 올바르게 간주됩니다. 추가했습니다. (I18ccd)
버전 1.7.0-rc01
2024년 4월 3일
androidx.fragment:fragment-*:1.7.0-rc01
이 출시되었습니다. 버전 1.7.0-rc01에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- 프래그먼트가 이제 프로필 설치 프로그램 1.3.1에 종속됩니다.
버전 1.7.0-beta01
2024년 3월 20일
androidx.fragment:fragment-*:1.7.0-beta01
이 출시되었습니다. 버전 1.7.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 호스트 일반 유형의 null 허용 여부가
onGetHost()
반환 유형의 null 허용 여부와 일치하도록FragmentHostCallback
가 Kotlin으로 작성됩니다. 추가했습니다. (I40af5)
버그 수정
- 컨테이너에 없는 프래그먼트에서 뒤로 탐색 예측 동작을 커밋할 때 해당 프래그먼트가 절대 소멸되지 않는 문제가 수정되었습니다. 이제 프래그먼트가 즉시 최종 상태로 이동합니다. 추가했습니다. (Ida0d9)
- 뒤로 탐색 예측 동작으로 수신 전환을 중단하면 들어가는 뷰가 소멸되고 빈 화면이 남는 프래그먼트의 문제를 수정했습니다. 추가했습니다. (Id3f22, b/319531491)
버전 1.7.0-alpha10
2024년 2월 7일
androidx.fragment:fragment-*:1.7.0-alpha10
이 출시되었습니다. 버전 1.7.0-alpha10에 포함된 커밋을 확인하세요.
버그 수정
Animator
또는 AndroidX 전환에 프래그먼트의 뒤로 탐색 예측 지원을 사용하면addOnBackStackChangedListener
를 통해FragmentManager.OnBackStackChangedListener
가 추가되지 않은 경우 프래그먼트가handleOnBackProgressed
에서NullPointerException
을 발생시키는 이전 프래그먼트 버전의 알려진 문제를 수정했습니다. 추가했습니다. (I7c835)
버전 1.7.0-alpha09
2024년 1월 24일
androidx.fragment:fragment-*:1.7.0-alpha09
이 출시되었습니다. 버전 1.7.0-alpha09에 포함된 커밋을 확인하세요.
프래그먼트 Compose 아티팩트
프래그먼트 기반 아키텍처에서 완전한 Compose 기반 아키텍처로 전환 중인 앱 지원에 중점을 둔 새로운 fragment-compose
아티팩트를 만들었습니다.
이 새로운 아티팩트에서 사용할 수 있는 첫 번째 기능은 Fragment
의 content
확장 메서드입니다. ComposeView
를 만들고 올바른 ViewCompositionStrategy
를 설정하여 개별 프래그먼트의 UI에 Compose를 더 쉽게 사용할 수 있도록 합니다. 추가했습니다. (561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
새로운 기능
- 이제
FragmentManager.OnBackStackChangedListener()
가 뒤로 탐색 예측 진행 및 취소된 이벤트를 수신하기 위한onBackStackChangeProgressed()
및onBackStackChangeCancelled()
를 제공합니다. 추가했습니다. (214b87)
알려진 문제
Animator
또는 AndroidX 전환에 프래그먼트의 뒤로 탐색 예측 지원을 사용할 때addOnBackStackChangedListener
를 통해FragmentManager.OnBackStackChangedListener
가 추가되지 않은 경우 프래그먼트는handleOnBackProgressed
에서NullPointerException
을 발생시킵니다. 리스너를 수동으로 추가하면 비정상 종료가 해결됩니다. Fragment의 다음 출시에서 이를 수정할 수 있습니다.
버전 1.7.0-alpha08
2024년 1월 10일
androidx.fragment:fragment-*:1.7.0-alpha08
이 출시되었습니다. 버전 1.7.0-alpha08에 포함된 커밋을 확인하세요.
정리
- 전환
1.5.0-alpha06
에서 수정된 전환 라이브러리의 해결 방법을 삭제했습니다. 추가했습니다. (I04356)
버전 1.7.0-alpha07
2023년 11월 29일
androidx.fragment:fragment-*:1.7.0-alpha07
이 출시되었습니다. 버전 1.7.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
- 공유 요소 전환을 설정하고 Enter/exitTransition도 설정하지 않아 발생하는
NullPointerException
을 수정했습니다. 추가했습니다. (I8472b) - Fragment
1.6.2
에서:FragmentContainerView
의 프래그먼트가 확장되면 이제onInflate
콜백에서FragmentManager
, Host, id와 같은 상태에 액세스할 수 있습니다. 추가했습니다. (I1e44c, b/307427423) - Fragment
1.6.2
에서:clearBackStack
를 사용하여 프래그먼트 세트를 삭제할 때 이제 상위 프래그먼트의ViewModels
가 삭제될 때 중첩된 프래그먼트의ViewModel
가 지워집니다. 추가했습니다. (I6d83c, b/296173018)
버전 1.7.0-alpha06
2023년 10월 4일
androidx.fragment:fragment-*:1.7.0-alpha06
이 출시되었습니다. 버전 1.7.0-alpha06에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- Transition
1.5.0-alpha04
에 추가된 새로운animateToStart
API에 종속되도록 프래그먼트가 업데이트되었습니다.
버전 1.7.0-alpha05
2023년 9월 20일
androidx.fragment:fragment-*:1.7.0-alpha05
이 출시되었습니다. 버전 1.7.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- 프래그먼트는 이제 Androidx 전환을 사용할 때 뒤로 탐색 예측을 지원합니다. 이렇게 하면 완료된 동작을 통해 트랜잭션을 커밋할지 취소할지 결정하기 전에 뒤로 동작을 사용하여 맞춤 Androidx 전환과 함께 이전 프래그먼트를 탐색할 수 있습니다. 이 기능을 사용 설정하려면 Transition
1.5.0-alpha03
버전을 사용해야 합니다. 추가했습니다. (Ib49b4, b/285175724)
알려진 문제
- 현재 전환과 함께 뒤로 동작을 한 번 취소한 후 다음에 뒤로 동작을 시작하면 전환 실행에 실패하여 빈 화면이 표시되는 문제가 있습니다. 전환 라이브러리의 문제로 인해 발생할 수 있습니다. b/300157785를 참조하세요. 이 문제가 발생하면 문제를 재현하는 샘플 프로젝트를 사용하여 프래그먼트 관련 문제를 제출하세요. 활동의
onCreate()
에서FragmentManager.enabledPredictiveBack(false)
를 사용하여 뒤로 탐색 예측을 사용 중지할 수 있습니다.
버전 1.7.0-alpha04
2023년 9월 6일
androidx.fragment:fragment-*:1.7.0-alpha04
이 출시되었습니다. 버전 1.7.0-alpha04에 포함된 커밋을 확인하세요.
버그 수정
- 프래그먼트가 올바른 수명 주기 상태로 전환하지 못하는 뒤로 탐색 예측 동작을 취소할 때 발생하는 문제를 수정했습니다. 추가했습니다. (I7cffe, b/297379023)
- 애니메이션이 전환과 함께 실행될 수 있었던 회귀 문제를 해결했습니다. 추가했습니다. (I59f36)
- 프래그먼트와 함께 뒤로 탐색 예측을 사용할 때 백 스택의 두 번째에서 마지막 프래그먼트까지 빠르게 연속해서 두 번 뒤로 이동하려고 하면 비정상 종료되는 문제가 수정되었습니다. 추가했습니다. (Ifa1a4)
버전 1.7.0-alpha03
2023년 8월 23일
androidx.fragment:fragment-*:1.7.0-alpha03
이 출시되었습니다. 버전 1.7.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- 뒤로 탐색 예측을 사용할 때 3버튼 탐색 또는 뒤로 탐색 예측 동작을 통해 시스템 뒤로 기능을 사용할 때 프래그먼트 관리자의 백 스택에 있는 첫 번째 프래그먼트를 건너뛰고 활동이 완료되는 문제를 수정했습니다. 추가했습니다. (I0664b, b/295231788)
버전 1.7.0-alpha02
2023년 8월 9일
androidx.fragment:fragment-*:1.7.0-alpha02
이 출시되었습니다. 버전 1.7.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- API 34의 뒤로 탐색 예측 동작과 함께 프래그먼트를 사용할 때 탐색 (
Animations
,Transitions
)을 지원하지 않거나 전환이 전혀 없는 전환 시스템을 사용하는 경우 프래그먼트는 동작이 완료될 때까지 기다렸다가 뒤로 작업을 실행합니다. 추가했습니다. (I8100c)
버전 1.7.0-alpha01
2023년 6월 7일
androidx.fragment:fragment-*:1.7.0-alpha01
이 출시되었습니다. 이 버전은 내부 브랜치에서 개발되었습니다.
새로운 기능
- 프래그먼트는 이제
Animator
사용 시 예측 인앱 뒤로를 지원합니다. 이렇게 하면 완료된 동작을 통해 트랜잭션을 커밋할지 아니면 취소할지 결정하기 전에 뒤로 동작을 사용하여 맞춤 Animator로 이전 프래그먼트를 확인할 수 있습니다. 실험용enablePredictiveBack()
를 사용하고false
를 전달하여 이 새 동작을 사용 중지할 수도 있습니다.
버전 1.6
버전 1.6.2
2023년 11월 1일
androidx.fragment:fragment-*:1.6.2
이 출시되었습니다. 버전 1.6.2에 포함된 커밋을 확인하세요.
버그 수정
FragmentContainerView
의 프래그먼트가 확장되면 이제onInflate
콜백에서FragmentManager
, Host, id와 같은 상태에 액세스할 수 있습니다. 추가했습니다. (I1e44c, b/307427423)clearBackStack
를 사용하여 프래그먼트 세트를 삭제할 때 이제 상위 프래그먼트의ViewModels
가 삭제될 때 중첩된 프래그먼트의ViewModel
가 삭제됩니다. 추가했습니다. (I6d83c, b/296173018)
버전 1.6.1
2023년 7월 26일
androidx.fragment:fragment-*:1.6.1
이 출시되었습니다. 버전 1.6.1에 포함된 커밋을 확인하세요.
버그 수정
- 활동이 중지되었지만 소멸되지 않은 경우 저장된 상태가 프래그먼트 인스턴스가
RESUMED
상태로 다시 돌아간 후에도 잘못 캐시되는 문제를 수정했습니다. 이로 인해 여러 백 스택 API를 사용하여 프래그먼트를 저장하고 복원할 때 해당 프래그먼트 인스턴스가 백 스택에 있는 경우 캐시된 상태가 재사용됩니다. 추가했습니다. (I71288, b/246289075)
종속 항목 업데이트
- Fragment가 이제 Activity 1.7.2에 종속됩니다. 이를 통해 Kotlin 사용자가 Activity에 관한 명시적인 종속 항목 없이
ComponentDialog
를 확장할 수 없었던 문제가 수정되었습니다. b/287509323을 참조하세요.
버전 1.6.0
2023년 6월 7일
androidx.fragment:fragment-*:1.6.0
이 출시되었습니다. 버전 1.6.0에 포함된 커밋을 확인하세요.
1.5.0 이후 중요 변경사항
Fragment
의 저장된 상태가 비공개 라이브러리 상태(맞춤Parcelable
클래스)와 개발자가 제공하는 상태 간에 완전히 분할되었습니다. 이 상태는 이제 항상Bundle
에 저장되어 프래그먼트의 상태가 시작되는 위치를 정확하게FragmentManager.OnBackStackChangedListener
인터페이스가 프래그먼트 백 스택에서 추가/삭제되기 직전과 트랜잭션이 커밋된 직후에 각각Fragment
와 함께 호출되는 두 개의 추가onBackStackChangeStarted
및onBackStackChangeCommitted
콜백으로 확장되었습니다.FragmentStrictMode
에 새로운WrongNestedHierarchyViolation
이 추가되어, 하위 프래그먼트가 상위 요소의 뷰 계층 구조 내에 중첩되지만 상위 요소의childFragmentManager
에는 추가되지 않을 때 이를 감지합니다.- 이제
Intent
또는IntentSender
를 사용하는Fragment
및FragmentManager
API가 null 값을 전달하지 않도록@NonNull
로 올바르게 주석 처리됩니다. null 값이 항상 이러한 메서드가 호출하는 각 Android 프레임워크 API를 즉시 비정상 종료하기 때문입니다. DialogFragment
는 이제requireComponentDialog()
API를 통해 기본ComponentDialog
에 대한 액세스를 제공합니다.- 프래그먼트가 이제 Lifecycle
2.6.1
에 종속됩니다. - 프래그먼트가 이제 SavedState
1.2.1
에 종속됩니다. - 프래그먼트가 이제 ProfileInstaller
1.3.0
에 종속됩니다. fragment-testing-manifest
아티팩트가 매니페스트 항목을 나머지 프래그먼트 테스트 구성요소와 분리합니다. 즉, 다음을 실행할 수 있습니다.debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
이렇게 하면
fragment-testing
및androidx.test
간 버전 편향으로 인한 충돌을 방지할 수 있습니다.
버전 1.6.0-rc01
2023년 5월 10일
androidx.fragment:fragment-*:1.6.0-rc01
이 출시되었습니다. 버전 1.6.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 여러
startActivityForResult
요청이 연속으로 이루어진 경우ActivityResult
가 잘못된 요청 코드와 함께 전송되는 문제가 해결되었습니다. 추가했습니다. (If0b9d, b/249519359) - 백 스택이 변경되는 트랜잭션과 혼합될 경우 실제로 백 스택을 변경하지 않는 트랜잭션에
onBackStackChangeListener
콜백이 전달되는 문제를 수정했습니다. 추가했습니다. (I0eb5c, b/279306628)
버전 1.6.0-beta01
2023년 4월 19일
androidx.fragment:fragment-*:1.6.0-beta01
이 출시되었습니다. 버전 1.6.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 제한 시간과 함께
postponeEnterTransition
를 사용하고 연기된 프래그먼트를 교체해도 더 이상 연기된 프래그먼트가 유출되지 않습니다. 추가했습니다. (I2ec7d, b/276375110) - 이제 여러 트랜잭션에 동일한 프래그먼트가 포함되어 있더라도 새
onBackStackChangeStarted
및onBackStackChangeCommitted
콜백이 프래그먼트를 한 번만 전달합니다. 추가했습니다. (Ic6b69)
버전 1.6.0-alpha09
2023년 4월 5일
androidx.fragment:fragment-*:1.6.0-alpha09
이 출시되었습니다. 버전 1.6.0-alpha09에 포함된 커밋을 확인하세요.
API 변경사항
DialogFragment
는 이제requireComponentDialog()
API를 통해 기본ComponentDialog
에 대한 액세스를 제공합니다. 추가했습니다. (I022e3, b/234274777)- 프래그먼트
commitNow()
,executePendingTransactions()
,popBackStackImmediate()
API는@MainThread
로 주석이 지정되었습니다. 즉, 이제 런타임 시 실패할 때까지 기다리는 대신 기본 스레드에서 호출되지 않을 때 모두 빌드 오류를 발생시킵니다. 추가했습니다. (Ic9665, b/236538905)
버그 수정
FragmentManager
에서 동일한 프레임에서 저장하고 복원할 때 비정상 종료가 발생할 수 있는 버그를 수정했습니다. 추가했습니다. (Ib36af, b/246519668)OnBackStackChangedListener
onBackStackChangeStarted
및onBackStackChangeCommitted
콜백은 이제FragmentManager
백 스택이 변경될 때만 실행됩니다. 추가했습니다. (I66055, b/274788957)
버전 1.6.0-alpha08
2023년 3월 22일
androidx.fragment:fragment-*:1.6.0-alpha08
이 출시되었습니다. 버전 1.6.0-alpha08에 포함된 커밋을 확인하세요.
동작 변경
OnBackStackChangedListener.onBackStackChangeCommited
콜백의 타이밍은 프래그먼트 작업이 실행되기 전에 실행되도록 조정되었습니다. 이렇게 하면 분리된 프래그먼트가 콜백에 전달되지 않습니다. 추가했습니다. (I66a76, b/273568280)
버그 수정
- Fragment
1.5.6
에서:Lifecycle
가 이미STARTED
이고 결과가 이미 있는 경우setFragmentResultListener
내에서clearFragmentResultListener
를 호출하면 작동하지 않던 문제가 수정되었습니다. (If7458 참조)
종속 항목 업데이트
- 프래그먼트가 이제 Lifecycle
2.6.1
에 종속됩니다. (586fe7 참조) - 프래그먼트가 이제 SavedState
1.2.1
에 종속됩니다. 추가했습니다. (078e4e) - 프래그먼트가 이제 ProfileInstaller
1.3.0
에 종속됩니다. 추가했습니다. (3fc05b)
버전 1.6.0-alpha07
2023년 3월 8일
androidx.fragment:fragment-*:1.6.0-alpha07
이 출시되었습니다. 버전 1.6.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.5.6
에서: 메뉴 항목을 추가했는지와 관계없이 프래그먼트를 삭제하면 활동의 메뉴가 무효화되는 문제가 수정되었습니다. 추가했습니다. (50f098, b/244336571)
버전 1.6.0-alpha06
2023년 2월 22일
androidx.fragment:fragment-*:1.6.0-alpha06
이 출시되었습니다. 버전 1.6.0-alpha06에 포함된 커밋을 확인하세요.
동작 변경사항
- 이제
FragmentManager
의onBackStackChangedListener
에서 새로운onBackStackChangedStarted
콜백이 프래그먼트가 타겟 상태로 이동하기 전에 실행됩니다. (I34726)
버전 1.6.0-alpha05
2023년 2월 8일
androidx.fragment:fragment-*:1.6.0-alpha05
가 출시되었습니다. 버전 1.6.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
FragmentManager.OnBackStackChagnedListener
인터페이스에서 두 가지 추가 콜백onBackStackChangeStarted
와onBackStackChangeCommitted
를 제공합니다. 이 콜백은 추가 정보를 허용하고FragmentManager
에서 백 스택 변경사항이 발생하는 시점을 제어합니다. (Ib7ce5, b/238686802)
API 변경사항
Intent
나IntentSender
를 사용하는Fragment
와FragmentManager
API는 이제 null 값을 전달하는 것을 방지하기 위해 적절한@NonNull
주석을 지정합니다. null 값은 이러한 메서드가 호출하는 각각의 Android 프레임워크 API를 항상 즉각적으로 다운시키기 때문입니다. (I06fd4)
버전 1.6.0-alpha04
2022년 12월 7일
androidx.fragment:fragment-*:1.6.0-alpha04
가 출시되었습니다. 버전 1.6.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
FragmentStrictMode
에 새로운WrongNestedHierarchyViolation
이 추가되어, 하위 프래그먼트가 상위 요소의 뷰 계층 구조 내에 중첩되지만 상위 요소의childFragmentManager
에는 추가되지 않을 때 이를 감지합니다. (I72521, b/249299268)
동작 변경사항
- 이제 프래그먼트가
onAttach()
전에SavedStateRegistry
상태를 복원하여 모든 상향 수명 주기 메서드에서 사용할 수 있도록 합니다. (I1e2b1)
API 변경사항
fragment-testing-manifest
아티팩트가 매니페스트 항목을 나머지 프래그먼트 테스트 구성요소와 분리합니다. 즉, 다음을 실행할 수 있습니다.
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
이렇게 하면 fragment-testing
과 androidx.test
간의 버전 차이로 인한 충돌을 방지할 수 있습니다. (I8e534, b/128612536)
버그 수정
- Fragment
1.5.5
에서: Fragment가 더 이상 뷰 레지스트리 저장 상태의 일부로ViewModel
상태를 잘못 저장하지 않습니다. (I10d2b, b/253546214)
버전 1.6.0-alpha03
2022년 10월 5일
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
및 androidx.fragment:fragment-testing:1.6.0-alpha03
이 출시되었습니다. 버전 1.6.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
DialogFragment
를 확장하는 클래스는onDismiss()
재정의에서 super를 호출해야 합니다. (I14798, b/238928865)
버그 수정
- 프래그먼트가 항상 적절한 콜백을 받을 수 있도록 새 제공자 콜백 인터페이스(
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
)의 통합으로 인한 회귀 문제를 해결했습니다. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
버전 1.6.0-alpha02
2022년 8월 24일
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
, androidx.fragment:fragment-testing:1.6.0-alpha02
가 출시되었습니다. 버전 1.6.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.5.2
에서:popBackStack()
및replace()
트랜잭션을 동시에 실행하면 기존 프래그먼트에서 잘못된Animation
/Animator
를 실행하는 문제를 수정했습니다. (Ib1c07, b/214835303)
버전 1.6.0-alpha01
2022년 7월 27일
androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
, androidx.fragment:fragment-testing:1.6.0-alpha01
이 출시되었습니다. 버전 1.6.0-alpha01에 포함된 커밋을 확인하세요.
동작 변경사항
Fragment
의 저장된 상태가 비공개 라이브러리 상태(맞춤Parcelable
클래스)와 개발자가 제공하는 상태 간에 완전히 분할되었습니다. 이 상태는 이제 항상Bundle
에 저장되어 프래그먼트의 상태가 시작되는 위치를 정확하게 파악할 수 있습니다. (b/207158202)
버그 수정
- Fragment
1.5.1
에서: AGP 7.4와 함께 번들로 제공되는 린트 버전을 사용하면 린트가 다운되는DialogFragmentCallbacksDetector
의 회귀 문제를 수정했습니다. (b/237567009)
종속 항목 업데이트
- Fragment
1.5.1
에서: 이제 Fragment 라이브러리가 Lifecycle2.5.1
에 종속됩니다. (Id204c) - Fragment
1.5.1
에서: 이제 Fragment 라이브러리가 Activity1.5.1
에 종속됩니다. (I10f07)
버전 1.5
버전 1.5.7
2023년 4월 19일
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
및 androidx.fragment:fragment-testing:1.5.7
가 출시되었습니다. 버전 1.5.7에 포함된 커밋을 확인하세요.
버그 수정
- 제한 시간과 함께
postponeEnterTransition
를 사용하고 연기된 프래그먼트를 교체해도 더 이상 연기된 프래그먼트가 유출되지 않습니다. 추가했습니다. (I2ec7d, b/276375110)
버전 1.5.6
2023년 3월 22일
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
및 androidx.fragment:fragment-testing:1.5.6
가 출시되었습니다. 버전 1.5.6에 포함된 커밋을 확인하세요.
버그 수정
- 메뉴 항목을 추가했는지와 관계없이 프래그먼트를 삭제하면 활동의 메뉴가 무효화되는 문제를 수정했습니다. 추가했습니다. (50f098, b/244336571)
Lifecycle
가 이미STARTED
이고 결과가 이미 제공된 경우setFragmentResultListener
내에서clearFragmentResultListener
를 호출하면 작동하지 않던 문제를 수정했습니다. (If7458 참조)
버전 1.5.5
2022년 12월 7일
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
, androidx.fragment:fragment-testing:1.5.5
가 출시되었습니다. 버전 1.5.5에 포함된 커밋을 확인하세요.
버그 수정
- Fragment가 더 이상 뷰 레지스트리 저장 상태의 일부로
ViewModel
상태를 잘못 저장하지 않습니다. (I10d2b, b/253546214)
버전 1.5.4
2022년 10월 24일
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
, androidx.fragment:fragment-testing:1.5.4
가 출시되었습니다. 버전 1.5.4에 포함된 커밋을 확인하세요.
버그 수정
- 제공업체 콜백 인터페이스(
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
)를 구현하지 않는 호스트에서 맞춤FragmentController
를 사용하고 지원 중단된 전달 함수를 호출하면 하위 프래그먼트로의 전달에 실패하는 오류를 수정했습니다. (I9b380)
버전 1.5.3
2022년 9월 21일
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
및 androidx.fragment:fragment-testing:1.5.3
이 출시되었습니다. 버전 1.5.3에 포함된 커밋을 확인하세요.
버그 수정
- 백 스택의 프래그먼트에서
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
,onConfigurationChanged()
콜백을 가져오는 오류를 수정했습니다. (I34581, I8dfe6, b/242570955) - 중첩된 하위 프래그먼트가 더 이상
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
또는onConfigurationChanged()
콜백을 여러 개 수신하지 않습니다. (I690b3, Id0096, If9d6b, I2cba2)
버전 1.5.2
2022년 8월 10일
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
, androidx.fragment:fragment-testing:1.5.2
가 출시되었습니다. 버전 1.5.2에 포함된 커밋을 확인하세요.
버그 수정
popBackStack()
및replace()
트랜잭션을 동시에 실행하면 기존 프래그먼트에서 잘못된Animation
/Animator
를 실행하는 문제를 수정했습니다. (Ib1c07, b/214835303)
버전 1.5.1
2022년 7월 27일
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
, androidx.fragment:fragment-testing:1.5.1
이 출시되었습니다. 버전 1.5.1에 포함된 커밋을 확인하세요.
버그 수정
- AGP 7.4와 함께 번들로 제공되는 린트 버전을 사용하면 린트가 다운되는
DialogFragmentCallbacksDetector
의 회귀 문제를 수정했습니다. (b/237567009)
종속 항목 업데이트
- Fragment 라이브러리가 이제 Lifecycle
2.5.1
에 종속됩니다. (Id204c) - Fragment 라이브러리가 이제 Activity
1.5.1
에 종속됩니다. (I10f07)
버전 1.5.0
2022년 6월 29일
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
, androidx.fragment:fragment-testing:1.5.0
이 출시되었습니다. 버전 1.5.0에 포함된 커밋을 확인하세요.
1.4.0 이후 중요 변경사항
- CreationExtras 통합: 이제
Fragment
에서 Lifecycle2.5.0
의CreationExtras
를 통해 스테이트리스(Stateless)ViewModelProvider.Factory
를 제공할 수 있습니다. - 구성요소 대화상자 통합: 이제
DialogFragment
가 Activity1.5.0
을 통해ComponentDialog
를onCreateDialog()
에서 반환된 기본 대화상자로 사용합니다. - 저장된 인스턴스 상태 리팩터링: 프래그먼트가 인스턴스 상태를 저장하는 방식을 변경하기 시작했습니다. 이는 프래그먼트에 저장된 상태와 상태의 소스를 명확히 파악하는 데 도움이 됩니다. 현재 변경사항은 다음과 같습니다.
- 이제
FragmentManager
는 저장된 인스턴스 상태를 직접 맞춤Parcelable
에 저장하는 대신Bundle
에 저장합니다. - 아직 전송되지 않은
Fragment Result APIs
를 통해 설정된 결과는 이제FragmentManager
의 내부 상태와 별개로 저장됩니다. - 이제 개별 프래그먼트와 연결된 상태가
FragmentManager
의 내부 상태와 별개로 저장되므로 개별 프래그먼트와 연결된 저장된 상태의 양을Fragment
디버그 로깅에 있는 고유 ID와 연결할 수 있습니다.
- 이제
기타 변경사항
- 이제
FragmentStrictMode
가 클래스 이름과 함께allowViolation()
을 사용하여 특정 위반 불이익을 우회하는 비공개 서드 파티 프래그먼트 기능을 제공합니다. - 활동의
ActionBar
에 메뉴를 제공하는 Fragment API가 지원 중단되었습니다. Activity1.4.0
에 추가된MenuHost
및MenuProvider
API는 테스트 가능하고 수명 주기를 인식하는 API 노출 영역을 제공하며 프래그먼트에서 이를 사용해야 합니다.
버전 1.5.0-rc01
2022년 5월 11일
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
, androidx.fragment:fragment-testing:1.5.0-rc01
이 출시되었습니다. 버전 1.5.0-rc01에 포함된 커밋을 확인하세요.
저장된 인스턴스 상태 리팩터링
- 이제 개별 프래그먼트와 연결된 상태가
FragmentManager
의 내부 상태와 별개로 저장되므로 개별 프래그먼트와 연결된 저장된 상태의 양을 Fragment 디버그 로깅에 있는 고유 ID와 연결할 수 있습니다. (a153e0, b/207158202)
버전 1.5.0-beta01
2022년 4월 20일
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
, androidx.fragment:fragment-testing:1.5.0-beta01
이 출시되었습니다. 버전 1.5.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
DialogFragment
는showNow
함수와의 패리티를 위해commitNow
를 사용하는 새로운 메서드dismissNow
를 추가했습니다. 이로 인해Dialog
가 즉시 닫히는 것은 아니며 동기화 방식으로만FragmentManager
의 상태를 업데이트합니다. (I15c36, b/72644830)
저장된 인스턴스 상태 리팩터링
- 이제
FragmentManager
는 저장된 인스턴스 상태를 직접 맞춤Parcelable
에 저장하는 대신Bundle
에 저장합니다. 이는 Fragment에서 실제로 저장하는 내용을 추가로 투명하게 만드는 첫 번째 단계입니다. (I93807, b/207158202) - 아직 전송되지 않은 Fragment Result API를 통해 설정된 결과는
FragmentManager
의 내부 상태와 별개로 저장됩니다. 이렇게 하면 저장된 인스턴스 상태의 일부로 저장되는 결과를 추가로 투명하게 만들 수 있습니다. (I6ea12, b/207158202)
버전 1.5.0-alpha05
2022년 4월 6일
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
, androidx.fragment:fragment-testing:1.5.0-alpha05
가 출시되었습니다. 버전 1.5.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
Fragment
의setHasOptionsMenu()
가 지원 중단되었습니다. 메뉴 및 메뉴 항목을 관리하려면 Fragment1.5.0-alpha04
출시 노트에 따라 대신 새 메뉴 API를 사용해야 합니다. (I7b4b4, b/226438239)
버전 1.5.0-alpha04
2022년 3월 23일
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
, androidx.fragment:fragment-testing:1.5.0-alpha04
가 출시되었습니다. 버전 1.5.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 활동의
ActionBar
에 메뉴를 제공하는 Fragment API는 프래그먼트를 활동과 긴밀하게 결합하며 분리하여 테스트할 수 없으므로 지원 중단되었습니다. Activity1.4.0-alpha01
에 추가된MenuHost
및MenuProvider
API는 테스트 가능하고 수명 주기를 인식하는 API 노출 영역을 제공하며 프래그먼트에서 이를 사용해야 합니다. (I50a59, I20758)
버그 수정
- 이제
SavedStateViewFactory
가SavedStateRegistryOwner
로 초기화된 경우에도CreationExtras
사용을 지원합니다. 추가 인수가 제공되면 초기화된 인수는 무시됩니다. (I6c43b, b/224844583)
버전 1.5.0-alpha03
2022년 2월 23일
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
및 androidx.fragment:fragment-testing:1.5.0-alpha03
이 출시되었습니다. 버전 1.5.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
CreationExtras
를by viewModels()
및by activityViewModels()
함수에 전달할 수 있습니다. (Ibefe7, b/217601110)
동작 변경사항
- 이제
DialogFragment
에서onCreateDialog()
가 반환하는 기본 대화상자로ComponentDialog
를 사용합니다. (If3784, b/217618170)
버전 1.5.0-alpha02
2022년 2월 9일
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
, androidx.fragment:fragment-testing:1.5.0-alpha02
가 출시되었습니다. 버전 1.5.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
FragmentStrictMode
가 클래스 이름과 함께allowViolation()
을 사용하여 특정 위반 불이익을 우회하는 비공개 서드 파티 프래그먼트 기능을 제공합니다. (I8f678)
버전 1.5.0-alpha01
2022년 1월 26일
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
, androidx.fragment:fragment-testing:1.5.0-alpha01
이 출시되었습니다. 버전 1.5.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
Fragment
는 이제 Lifecycle2.5.0-alpha01
의 일부로 도입된 ViewModel CreationExtras와 통합됩니다. (I3060b, b/207012585)
버그 수정
- Fragment
1.4.1
에서: xml에서 생성된 뷰 ID에 음수 값이 있을 때FragmentContainerView
에서 더 이상 잘못된 상태 예외가 발생하지 않습니다. (Ic185b, b/213086140) - Fragment
1.4.1
에서: 맞춤ownerProducer
람다를by viewModels()
지연 함수에서 사용할 때 맞춤ViewModelProvider.Factory
가 제공되지 않는 경우 항상 프래그먼트 팩토리를 사용하는 것이 아니라 이제 해당 소유자의defaultViewModelProviderFactory
를 사용합니다. (I56170, b/214106513) Fragment
의registerForActivityResult()
콜백에서 처음으로ViewModel
에 액세스할 때 발생하는 비정상 종료 문제가 수정되었습니다. (Iea2b3)
버전 1.4
버전 1.4.1
2022년 1월 26일
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
, androidx.fragment:fragment-testing:1.4.1
이 출시되었습니다. 버전 1.4.1에 포함된 커밋을 확인하세요.
버그 수정
- xml에서 생성된 뷰 ID에 음수 값이 있을 때
FragmentContainerView
에서 더 이상 잘못된 상태 예외가 발생하지 않습니다. (Ic185b, b/213086140) - 맞춤
ownerProducer
람다를by viewModels()
지연 함수에서 사용할 때 맞춤ViewModelProvider.Factory
가 제공되지 않는 경우 항상 프래그먼트 팩토리를 사용하는 것이 아니라 이제 해당 소유자의defaultViewModelProviderFactory
를 사용합니다. (I56170, b/214106513)
버전 1.4.0
2021년 11월 17일
androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
및 androidx.fragment:fragment-testing:1.4.0
이 출시되었습니다. 버전 1.4.0에 포함된 커밋을 확인하세요.
1.3.0 이후 중요 변경사항
FragmentStrictMode
API는 개발자가 사용하는 앱 또는 라이브러리가 지원 중단된 프래그먼트 API를 호출하지 않는지 확인할 수 있는 런타임 검사를 제공합니다. 위반이 감지되면 로그 메시지를 출력하거나 맞춤 리스너를 트리거하거나 앱을 다운시킬 수 있습니다. 사용 설정할 검사와 트리거할 '패널티'를 제어하는FragmentStrictMode.Policy
는 새로운setStrictModePolicy()
메서드를 통해FragmentManager
에 설정할 수 있습니다. 이 정책은FragmentManager
에 적용되며 고유한 정책을 설정하지 않는 하위 프래그먼트 관리자에게 전이 형태로 적용됩니다. 프래그먼트의 StrictMode를 참고하세요.이제
FragmentContainerView
는 컨테이너에 가장 최근에 추가된 프래그먼트를 반환하는getFragment()
메서드를 제공합니다. 이는FragmentContainerView
의 ID를 가진findFragmentById()
와 동일한 로직을 사용하지만 호출 체인을 허용합니다.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
가 이제Closeable
을 구현하므로 이를 Kotlin의use
메서드 또는 try-with-resources와 함께 사용할 수 있습니다.Fragment 전환 시 테마에서 가져온 표준 활동 전환 애니메이션을 사용 설정할지 지정하기 위해
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
가 추가되었습니다.FragmentManager.enableNewStateManager(boolean)
의 실험용 API가 삭제되어 이제 새 상태 관리자가 사용할 수 있는 유일한 옵션입니다.
여러 백 스택
FragmentManager
는 addToBackStack()
을 사용한 프래그먼트 트랜잭션으로 구성된 백 스택을 유지합니다. 이를 통해 개발자는 프래그먼트가 적절히 상태를 복원할 수 있도록 프래그먼트로 상태 저장 메커니즘을 사용하여 트랜잭션을 팝하고 이전 상태로 돌아갈 수 있습니다.
이 출시는 세 가지 새로운 FragmentManager
API(saveBackStack(String name)
, restoreBackStack(String name)
, clearBackStack(String name)
)를 제공하여 이러한 메커니즘을 확장합니다. 이러한 API는 addToBackStack()
과 동일한 name
을 사용하여 FragmentTransaction
의 상태와 그 트랜잭션에 추가된 모든 프래그먼트의 상태를 저장합니다. 따라서 개발자는 이후에 트랜잭션과 프래그먼트를 원래 상태로 복원할 수 있습니다. 이를 통해 현재 백 스택을 저장하고 저장된 백 스택을 복원하여 여러 백 스택 간에 효과적으로 '스왑'할 수 있습니다.
saveBackStack()
은 비동기식이며 특정 이름으로 돌아가는 모든 프래그먼트 트랜잭션이 취소되고('팝이 실행됨') 추가된 모든 프래그먼트가 소멸 및 삭제된다는 점에서 popBackStack()
과 유사하게 작동합니다. 하지만 여기에는 몇 가지 중요한 차이점이 있습니다.
saveBackStack()
이 항상 포함됩니다.- 지정된 이름을 백 스택에서 찾을 수 없거나 null 이름이 제공되는 경우 백 스택에서 모든 트랜잭션을 팝하는
popBackStack()
과 달리saveBackStack()
은 개발자가 null이 아닌 정확한 이름으로addToBackStack()
을 사용하여 이전에 프래그먼트 트랜잭션을 커밋하지 않은 경우에는 아무런 작업을 하지 않습니다. - 이러한 트랜잭션에서 추가된 모든 프래그먼트의 상태가 저장됩니다. 즉, 모든 프래그먼트의 뷰 상태가 저장되고 모든 프래그먼트의
onSaveInstanceState()
가 호출되며, 각 상태가 복원되고 그러한 프래그먼트와 관련된 모든ViewModel
인스턴스가 보관됩니다(onCleared()
가 프래그먼트에서 호출되지 않음).
saveBackStack()
과 함께 사용할 수 있는 프래그먼트 트랜잭션은 특정 기준을 충족해야 합니다.
- 모든 프래그먼트 트랜잭션은
setReorderingAllowed(true)
를 사용하여 트랜잭션이 단일 원자성 작업으로 복원될 수 있도록 해야 합니다. - 저장된 트랜잭션 집합은 자체 포함된 형태여야 합니다(즉, 트랜잭션 집합 외부에 있는 프래그먼트를 명시적으로 참조해서는 안 됨). 그래야 작업 중에 백 스택에 어떤 변경사항이 있었는지와 관계없이 나중에 언제든지 트랜잭션을 복원할 수 있습니다.
- 저장된 프래그먼트는 보관된 프래그먼트가 되거나, 하위 프래그먼트의 전이적 집합에 보관된 프래그먼트를 가질 수 없습니다. 그래야 백 스택이 저장된 후
FragmentManager
가 저장된 프래그먼트에 관한 참조를 반환하지 않습니다.
saveBackStack()
과 마찬가지로 각각 이전에 저장된 백 스택을 복원하거나 이전에 저장된 백 스택을 지우는 restoreBackStack()
과 clearBackStack()
은 같은 이름으로 이전에 saveBackStack()
을 호출하지 않은 경우 둘 다 아무 작업도 실행하지 않습니다.
자세한 내용은 여러 백 스택: 자세히 알아보기를 참고하세요.
버전 1.4.0-rc01
2021년 11월 3일
androidx.fragment:fragment:1.4.0-rc01
이 Fragment 1.4.0-beta01에서 변경사항 없이 출시되었습니다. 버전 1.4.0-rc01에 포함된 커밋을 확인하세요.
버전 1.4.0-beta01
2021년 10월 27일
androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
및 androidx.fragment:fragment-testing:1.4.0-beta01
이 출시되었습니다. 버전 1.4.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 이제 상위 프래그먼트가 자체 콜백을 실행하기 전에 전체 계층 구조로
onHiddenChanged()
를 전달합니다. (Iedc20, b/77504618) - 이제 키보드가 열려 있는 프래그먼트에서 recycler 뷰가 있는 프래그먼트로 이동할 때 키보드가 자동으로 닫힙니다. (I8b842, b/196852211)
- 이제
DialogFragment
는show()
,showNow()
또는dismiss()
를 호출할 때 생성되는 모든 트랜잭션에setReorderingAllowed(true)
를 사용합니다. (Ie2c14) DetachAndAttachFragmentInSameFragmentTransaction
이라는 매우 긴 린트 경고가DetachAndAttachSameFragment
로 단축되었습니다. (e9eca3)
버전 1.4.0-alpha10
2021년 9월 29일
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
및 androidx.fragment:fragment-testing:1.4.0-alpha10
이 출시되었습니다. 버전 1.4.0-alpha10에 포함된 커밋을 확인하세요.
린트
- 동일한
FragmentTransaction
에서 동일한Fragment
의detach()
와attach()
호출을 모두 감지하는DetachAndAttachFragmentInSameFragmentTransaction
린트 경고를 추가했습니다. 이러한 보완 작업이 동일한 트랜잭션에서 실행되면 서로 취소되므로 별도의 트랜잭션으로 분할하여 작업을 실제로 실행해야 합니다. (aosp/1832956, b/200867930) MenuHost
의addMenuProvider
API를 사용할 때 Fragment 수명 주기 사용을 Fragment 뷰 수명 주기로 수정하는FragmentAddMenuProvider
린트 오류를 추가했습니다. (aosp/1830457, b/200326272)
문서 업데이트
- 이제 Activity Result API에서 처리되는 API의 지원 중단 메시지, 즉
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
,onRequestPermissionsResult
가 모두 자세하게 확장되었습니다. (cce80f) Fragment
및DialogFragment
의 경우 모두onActivityCreated()
의 지원 중단 메시지가 자세하게 확장되었습니다. (224db4)
버전 1.4.0-alpha09
2021년 9월 15일
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
및 androidx.fragment:fragment-testing:1.4.0-alpha09
가 출시되었습니다. 버전 1.4.0-alpha09에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
clearBackStack(name)
을 호출하여 이전에saveBackStack(name)
으로 저장된 모든 상태를 삭제할 수 있습니다. (I70cd7)
API 변경사항
getFragment
함수가 null 허용 여부를 올바르게 준수하는지 확인하기 위해FragmentContainerView
클래스를 다시 작성했습니다. (If694a, b/189629145)- 이제 FragmentStrictMode가 Kotlin으로 작성되었습니다. (I11767, b/199183506)
버그 수정
setReorderingAllowed(true)
로 추가된 후 대기 중인 트랜잭션을 실행하기 전에 즉시 삭제된 프래그먼트의 상태가 올바르게 삭제되지 않는 문제가 수정되었습니다. (I8ccb8)
버전 1.4.0-alpha08
2021년 9월 1일
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
및 androidx.fragment:fragment-testing:1.4.0-alpha08
이 출시되었습니다. 버전 1.4.0-alpha08에 포함된 커밋을 확인하세요.
버그 수정
- 중복 괄호를 더 잘 처리하도록
UseRequireInsteadOfGet
린트 검사가 개선되었습니다. (I2d865) - 특수한 추가 케이스를 처리하도록
UseGetLayoutInflater
린트 검사가 개선되었습니다. (Ie5423)
버전 1.4.0-alpha07
2021년 8월 18일
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
및 androidx.fragment:fragment-testing:1.4.0-alpha07
이 변경사항 없이 출시되었습니다. 버전 1.4.0-alpha07에 포함된 커밋을 확인하세요.
버전 1.4.0-alpha06
2021년 8월 4일
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
및 androidx.fragment:fragment-testing:1.4.0-alpha06
이 출시되었습니다. 버전 1.4.0-alpha06에 포함된 커밋을 확인하세요.
버그 수정
FragmentTransaction
복원 중에IllegalStateException
으로 표시되거나, 나타난 프래그먼트의 두 번째 사본으로 표시되는 백 스택 간에 빠르게 전환할 때 여러 백 스택에서 발생하던 문제를 해결했습니다. (I9039f)- 상태가 복원된 후
FragmentManager
에서 이전에saveBackStack()
을 통해 저장된 상태 사본을 보유하던 문제가 해결되었습니다. (Ied212) - 특히
show(FragmentTransaction, String)
메서드를 통해 DialogFragment를 추가하면 상태가 저장된 후DialogFragment
의dismissAllowingStateLoss()
메서드를 호출할 때 이 메서드가 더 이상 다운되지 않습니다. (I84422)
버전 1.4.0-alpha05
2021년 7월 21일
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
및 androidx.fragment:fragment-testing:1.4.0-alpha05
가 출시되었습니다. 버전 1.4.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.3.6
에서:hide()
를 사용할 때 루트 뷰에transitionGroup=”true”
가 설정되어 있으면 이제 프래그먼트의 뷰가GONE
으로 올바르게 설정됩니다. (aosp/1766655, b/193603427) - Fragment
1.3.6
에서: 이제 항상FragmentActivity
는 저장된 상태를 자신이 재정의된 수명 주기 콜백의 첫 번째 작업으로 잠금 해제합니다. (I6db7a)
종속 항목 업데이트
- Fragment
1.3.6
에서: 이제 Fragment는 Activity1.2.4
에 종속됩니다. (I3a66c)
버전 1.4.0-alpha04
2021년 6월 30일
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
및 androidx.fragment:fragment-testing:1.4.0-alpha04
가 출시되었습니다. 버전 1.4.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
FragmentManager
는 이제 내부에서SavedStateRegistry
를 사용하여 상태를 저장합니다.saveAllState()
및restoreSavedState()
메서드도FragmentController
에서 지원 중단되었습니다.FragmentController
를 사용하여FragmentActivity
외부에서 프래그먼트를 호스팅하는 경우FragmentHostCallbacks
를 통해SavedStateRegistryOwner
를 구현해야 합니다. (Iba68e, b/188734238)
버그 수정
- 여러 백 스택을 지원하는 과정에서
saveBackStack()
을 호출하는 작업을replace()
를 사용하는FragmentTransaction
실행과 동시에 진행하면 작업이 실패하던 문제가 해결되었습니다. (I73137) - 여러 백 스택 지원에
restoreBackStack()
API를 사용할 때, 저장된 백 스택 중 여러 트랜잭션이 포함된 백 스택을 수동으로 복원한 후 발생하는NullPointerException
을 수정했습니다. 또한 일부 트랜잭션의setReorderingAllowed(true)
가 확인되지 않던 문제도 해결되었습니다. (I8c593) - 프래그먼트가
FragmentManager
에서 삭제된 후에도FragmentManager
가 관련 프래그먼트의 이전 저장 상태를 잘못 복원해 시간이 지남에 따라 저장 상태의 크기가 지속적으로 커지는 문제를 해결했습니다. (I1fb8e)
버전 1.4.0-alpha03
2021년 6월 16일
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
및 androidx.fragment:fragment-testing:1.4.0-alpha03
이 출시되었습니다. 버전 1.4.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 위반 세부정보에 관해 더 자세한 오류 메시지를 제공하도록 모든 Fragment StrictMode
Violation
클래스를 업데이트했습니다. (b/187871638)- 이제
FragmentTagUsageViolation
은 프래그먼트가 추가되었을 수 있는 상위 컨테이너를 포함하는 더 자세한 오류 메시지를 제공합니다. (Ic33a7) - 이제
WrongFragmentContainerViolation
은 프래그먼트가 추가되었던 컨테이너가 포함된 더 자세한 오류 메시지를 제공합니다. (Ib55f8) - 이제
TargetFragmentUsageViolation
의 사용 사례 클래스는 위반을 일으키는 프래그먼트와 그 외 포함된 정보가 담긴 더 자세한 오류 메시지를 제공합니다. (Icc6ac) - 이제
RetainInstanceUsageViolation
을 확장하는 클래스는 위반을 일으키는 프래그먼트가 포함된 더 자세한 오류 메시지를 제공합니다. (I6bd55) - 이제
FragmentReuseViolation
은 프래그먼트의 이전 ID가 포함된 자세한 오류 메시지를 제공합니다. (I28ce2) - 이제
SetUserVisibleHintViolation
은 사용자에게 표시되는 힌트가 설정되었던 항목이 포함된 더 자세한 오류 메시지를 제공합니다. (Ib2d5f)
- 이제
동작 변경사항
FragmentContainerView
의fitsSystemWindows
호출 제한이 취소되었습니다. 더 이상 이로 인해 앱이 다운되지 않습니다. (6b8ddd, b/190622202)
버그 수정
- Fragment
1.3.5
이상: aosp/1679887에 의해 Fragment1.3.4
에 도입된 공유 요소 전환의 회귀 문제가 수정되었습니다. 이제 프래그먼트는 전환 그룹을 올바르게 처리하며(transitionGroup="true"
를 통해 직접 설정하거나transitionName
또는background
를 통해 간접 설정함) 더 이상 공유 요소로 인한IndexOutOfBoundsException
이 발생하지 않습니다. (I16484, b/188679569, b/188969304) - 삭제 프래그먼트를 숨기려고 할 때
FragmentManager
가 더 이상 다운되지 않습니다. (I573dd, b/183634730) - 최상위 변수를 평가할 때
OnCreateDialogIncorrectCallback
린트 검사가 더 이상 다운되지 않습니다. (0a9efa, b/189967522)
버전 1.4.0-alpha02
2021년 6월 2일
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
및 androidx.fragment:fragment-testing:1.4.0-alpha02
가 출시되었습니다. 버전 1.4.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 현재 사용되는 엄격 모드 정책과 관계없이
FragmentManager
를 통해 로깅이 사용 설정되면FragmentStrictMode
는 항상 위반을 기록합니다. (I02df6, b/187872638) 이제
FragmentStrictMode
는 엄격 모드Violation
에서 특정Fragment
클래스를 제외하도록 지원하여 클래스가 모든 페널티를 우회할 수 있습니다. (Ib4e5d, b/184786736)각 위반을 기반으로 구조체 정보를 추가하도록
FragmentStrictMode
Violation
클래스가 확장되었습니다. 이렇게 하면 위반한 프래그먼트와 함께 위반을 일으킨 원인을 정확하게 확인할 수 있습니다. (If5118, b/187871150) 각Violation
에는 다음이 포함됩니다.- 이제
WrongFragmentContainerViolation
에는Fragment
가 추가되려고 한ViewGroup
이 포함됩니다. (I83c75, b/187871150) TargetFragmentUsageViolation
이 대상 프래그먼트와 요청 코드를 포함하는SetTargetFragmentUsageViolation
과 함께SetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
,GetTargetFragmentRequestCodeUsageViolation
으로 확장되었습니다. (I741b4, b/187871150)- 이제
SetUserVisibleHintViolation
은setUserVisibleHint()
로 전달되는 부울 값을 포함합니다. (I00585, b/187871150) - 이제
FragmentTagUsageViolation
에<fragment>
태그가 프래그먼트를 확장하려고 시도한 ViewGroup이 포함됩니다. (I5dbbc, b/187871150) - 이제
FragmentReuseViolation
에 위반을 일으킨Fragment
의 이전 인스턴스의 고유 ID가 포함됩니다. (I0544d, b/187871150) - 이제
RetainInstanceUsageViolation
은 추상 클래스이며 두 가지 경우의 위반 유형을 나타내는 두 개의 서브클래스SetRetainInstanceUsageViolation
과GetRetainInstanceUsageViolation
을 포함합니다. (Ic81e5, b/187871150)
- 이제
동작 변경사항
- 이제
FragmentContainerView
가 프로그래매틱 방식이나 XML을 통해fitsSystemWindow
속성을 변경하려고 할 때 예외가 발생합니다. 삽입은 각각의 개별 프래그먼트 뷰에서 처리해야 합니다. (Ie6651, b/187304502)
버전 1.4.0-alpha01
2021년 5월 18일
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
및 androidx.fragment:fragment-testing:1.4.0-alpha01
이 출시되었습니다. 버전 1.4.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
이제
FragmentContainerView
는 컨테이너에 가장 최근에 추가된 프래그먼트를 반환하는getFragment()
메서드를 제공합니다. 이는FragmentContainerView
의 ID를 가진findFragmentById()
와 동일한 로직을 사용하지만 호출 체인을 허용합니다. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Fragment 전환 시 테마에서 가져온 표준 활동 전환 애니메이션을 사용 설정할지 지정하기 위해
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
가 추가되었습니다. (I46652)
여러 백 스택
FragmentManager
는 addToBackStack()
을 사용한 프래그먼트 트랜잭션으로 구성된 백 스택을 유지합니다. 이를 통해 개발자는 프래그먼트가 적절히 상태를 복원할 수 있도록 프래그먼트로 상태 저장 메커니즘을 사용하여 트랜잭션을 팝하고 이전 상태로 돌아갈 수 있습니다.
이 출시는 두 가지 새로운 FragmentManager
API(saveBackStack(String name)
및 restoreBackStack(String name)
)를 제공하여 이러한 매커니즘을 확장합니다. 이러한 API는 addToBackStack()
과 동일한 name
을 사용하여 FragmentTransaction
의 상태와 그 트랜잭션에 추가된 모든 프래그먼트의 상태를 저장합니다. 따라서 개발자는 이후에 트랜잭션과 프래그먼트를 원래 상태로 복원할 수 있습니다. 이를 통해 현재 백 스택을 저장하고 저장된 백 스택을 복원하여 여러 백 스택 간에 효과적으로 '스왑'할 수 있습니다.
saveBackStack()
은 비동기식이며 특정 이름으로 돌아가는 모든 프래그먼트 트랜잭션이 취소되고('팝이 실행됨') 추가된 모든 프래그먼트가 소멸 및 삭제된다는 점에서 popBackStack()
과 유사하게 작동합니다. 하지만 여기에는 몇 가지 중요한 차이점이 있습니다.
saveBackStack()
이 항상 포함됩니다.- 지정된 이름을 백 스택에서 찾을 수 없거나 null 이름이 제공되는 경우 백 스택에서 모든 트랜잭션을 팝하는
popBackStack()
과 달리saveBackStack()
은 개발자가 null이 아닌 정확한 이름으로addToBackStack()
을 사용하여 이전에 프래그먼트 트랜잭션을 커밋하지 않은 경우에는 아무런 작업을 하지 않습니다. - 이러한 트랜잭션에서 추가된 모든 프래그먼트의 상태가 저장됩니다. 즉, 모든 프래그먼트의 뷰 상태가 저장되고 모든 프래그먼트의
onSaveInstanceState()
가 호출되며, 각 상태가 복원되고 그러한 프래그먼트와 관련된 모든ViewModel
인스턴스가 보관됩니다(onCleared()
가 프래그먼트에서 호출되지 않음).
saveBackStack()
과 함께 사용할 수 있는 프래그먼트 트랜잭션은 특정 기준을 충족해야 합니다.
- 모든 프래그먼트 트랜잭션은
setReorderingAllowed(true)
를 사용하여 트랜잭션이 단일 원자성 작업으로 복원될 수 있도록 해야 합니다. - 저장된 트랜잭션 집합은 자체 포함된 형태여야 합니다(즉, 트랜잭션 집합 외부에 있는 프래그먼트를 명시적으로 참조해서는 안 됨). 그래야 작업 중에 백 스택에 어떤 변경사항이 있었는지와 관계없이 나중에 언제든지 트랜잭션을 복원할 수 있습니다.
- 저장된 프래그먼트는 보관된 프래그먼트가 되거나, 하위 프래그먼트의 전이적 집합에 보관된 프래그먼트를 가질 수 없습니다. 그래야 백 스택이 저장된 후
FragmentManager
가 저장된 프래그먼트에 관한 참조를 반환하지 않습니다.
saveBackStack()
과 마찬가지로 restoreBackStack()
은 개발자가 이전에 동일한 이름으로 saveBackStack()
을 호출하지 않았다면 아무런 작업을 하지 않습니다. (b/80029773)
Fragment StrictMode
FragmentStrictMode
API는 개발자가 사용하는 앱 또는 라이브러리가 지원 중단된 프래그먼트 API를 호출하지 않는지 확인할 수 있는 런타임 검사를 제공합니다. 위반이 감지되면 로그 메시지를 출력하거나 맞춤 리스너를 트리거하거나 앱을 다운시킬 수 있습니다. 사용 설정할 검사와 트리거할 '패널티'를 제어하는 FragmentStrictMode.Policy
는 새로운 setStrictModePolicy()
메서드를 통해 FragmentManager
에 설정할 수 있습니다. 이 정책은 FragmentManager
에 적용되며 고유한 정책을 설정하지 않는 하위 프래그먼트 관리자에게 전이 형태로 적용됩니다. (#123, #131, #150, b/143774122)
detectFragmentReuse()
는 이전에 삭제된Fragment
인스턴스가FragmentManager
에 다시 추가되는지를 감지합니다.Fragment
인스턴스가 소멸되고FragmentManager
에서 삭제된 후에는 이 인스턴스와 상호작용하거나 이 인스턴스에 관한 참조를 유지해서는 안 됩니다. (#142, b/153738653)detectFragmentTagUsage()
는 개발자가 레이아웃 XML에서<fragment>
태그를 사용하는 경우를 감지합니다. 개발자는 프래그먼트를 레이아웃의 일부로 확장할 때 항상FragmentContainerView
를 사용해야 합니다. (#141, b/153738235)detectWrongFragmentContainer()
는 개발자가FragmentContainerView
가 아닌 컨테이너에 프래그먼트를 추가하는 경우를 감지합니다. 개발자는 항상 레이아웃에서FragmentContainerView
를 프래그먼트의 컨테이너로 사용해야 합니다. (#146, b/181137036)detectRetainInstanceUsage()
는 개발자가 지원 중단된setRetainInstance()
또는getRetainInstance()
API를 사용하는 경우를 감지합니다. (#140, b/153737954)detectSetUserVisibleHint()
는 개발자가 지원 중단된setUserVisibleHint()
API를 사용하는 경우를 감지합니다. (#136, b/153738974)detectTargetFragmentUsage()
는 개발자가 지원 중단된setTargetFragment()
,getTargetFragment()
또는getTargetRequestCode()
API를 사용하는 경우를 감지합니다. (#139, b/153737745)
API 변경사항
FragmentManager.enableNewStateManager(boolean)
의 실험용 API가 삭제되어 이제 새 상태 관리자가 사용할 수 있는 유일한 옵션입니다. (I90036, b/162776418)FragmentScenario
가 이제Closeable
을 구현하므로 이를 Kotlin의use
메서드 또는 try-with-resources와 함께 사용할 수 있습니다. (#121, b/143774122)
새로운 린트 검사
- 이제
DialogFragment
내에서LayoutInflater.from(Context)
를 사용하면UseGetLayoutInflater
린트 검사에서 경고가 표시됩니다. 개발자는LayoutInflater
에 적합한 항목을 가져오려면 항상 대화상자 프래그먼트의getLayoutInflater()
메서드를 사용해야 합니다. (#156, b/170781346) - 이제
DialogFragment
의onCreateDialog()
메서드에서setOnCancelListener
또는setOnDismissListener
를 호출하면DialogFragmentCallbacksDetector
린트 검사에서 경고가 표시됩니다. 이러한 리스너는DialogFragment
자체 소유이므로 개발자는 콜백을 수신하려면onCancel()
및onDismiss()
를 재정의해야 합니다. (#171, b/181780047, b/187524311)
버그 수정
- Fragment 1.3.4에서:
ViewModelProvider
와 함께ViewTreeViewModelStoreOwner.get()
API를 사용하거나 프래그먼트 내에서viewModel()
의 Jetpack Compose 메서드와 함께 사용할 때 Fragment1.3.3
에서 발생하는 회귀 문제가 해결되었습니다. 이러한 사용 사례에서는 이제getDefaultViewModelProviderFactory()
를 재정의하는 경우 프래그먼트에서 제공하는ViewModelProvider.Factory
를 올바르게 사용합니다(Hilt를 사용할 때@AndroidEntryPoint
로 주석 처리된 프래그먼트에서 하는 것처럼). 개발자가 이 메서드를 재정의하지 않으면 Fragment의 뷰와 함께 상태를 저장하고 복원하는SavedStateViewModelFactory
가 기본 팩토리로 생성됩니다. (I5cbfa, b/186097368) - Fragment 1.3.4에서: API 29에서
FragmentContainerView
를 사용할 경우 인셋은 더 이상 무기한으로 전달되지 않으며,BottomNavigationBar
및FloatingActionButton
인스턴스의 문제를 해결합니다. (I1bb78, b/186012452) - Fragment 1.3.4에서: 이제 프로세스 중단 후 프래그먼트 결과 번들에서 Parcelable를 가져올 수 있습니다. (I65932, b/187443158)
- Fragment 1.3.4에서: ViewGroup에서 공유 요소 전환을 실행할 때 ViewGroup의
transitionGroup
이 false로 설정되어 있으면 이제 제대로 전환이 이루어집니다. (I99675)
외부 기여
FragmentScenario
에서Closeable
을 구현할 수 있게 해 주신 시몬 쉴러 님에게 감사드립니다. (#121, b/143774122)- 이 출시를 위해
FragmentStrictMode
API를 전체 추가해 주신 simonschiller에 감사드립니다. (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) UseGetLayoutInflater
린트 검사를 추가해 주신 tatocaster에 감사드립니다. (#156, b/170781346)DialogFragmentCallbacksDetector
린트 검사를 추가해 주신 tatocaster에 감사드립니다. (#171, b/181780047)
버전 1.3
버전 1.3.6
2021년 7월 21일
androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
및 androidx.fragment:fragment-testing:1.3.6
이 출시되었습니다. 버전 1.3.6에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.4.0-alpha03
에서: 삭제 중인 프래그먼트를 숨기려고 할 때FragmentManager
가 더 이상 비정상 종료되지 않습니다. (I573dd, b/183634730) hide()
를 사용할 때 루트 뷰에transitionGroup=”true”
가 설정되어 있으면 이제 프래그먼트의 뷰가GONE
으로 올바르게 설정됩니다. (aosp/1766655, b/193603427)- 이제 항상
FragmentActivity
는 저장된 상태를 자신이 재정의된 수명 주기 콜백의 첫 번째 작업으로 잠금 해제합니다. (I6db7a)
종속 항목 업데이트
- Fragment
1.3.6
에서: 이제 Fragment는 Activity1.2.4
에 종속됩니다. (I3a66c)
버전 1.3.5
2021년 6월 16일
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
및 androidx.fragment:fragment-testing:1.3.5
가 출시되었습니다. 버전 1.3.5에 포함된 커밋을 확인하세요.
버그 수정
- aosp/1679887에 의해 Fragment
1.3.4
에 도입된 공유 요소 전환의 회귀 문제를 수정했습니다. 이제 프래그먼트는 전환 그룹을 올바르게 처리하며(transitionGroup="true"
를 통해 직접 설정하거나transitionName
또는background
를 통해 간접 설정함) 더 이상 공유 요소로 인한IndexOutOfBoundsException
이 발생하지 않습니다. (I16484, b/188679569, b/188969304)
버전 1.3.4
2021년 5월 18일
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
및 androidx.fragment:fragment-testing:1.3.4
가 출시되었습니다. 버전 1.3.4에 포함된 커밋을 확인하세요.
버그 수정
ViewModelProvider
와 함께ViewTreeViewModelStoreOwner.get()
API를 사용하거나 Hilt를 사용하여 Fragment 내에서viewModel()
의 Jetpack Compose 메서드와 사용할 때 Fragment1.3.3
에서 발생하는 회귀 문제가 해결되었습니다. 이러한 사용 사례는 이제getDefaultViewModelProviderFactory()
를 재정의하면 Fragment에서 제공하는ViewModelProvider.Factory
를 정확하게 사용합니다(@AndroidEntryPoint
로 주석 처리된 Fragment처럼). 개발자가 이 메서드를 재정의하지 않으면 Fragment의 뷰와 함께 상태를 저장하고 복원하는SavedStateViewModelFactory
가 기본 팩토리로 생성됩니다. (I5cbfa, b/186097368)- API 29에서
FragmentContainerView
를 사용할 경우 인셋은 더 이상 무기한으로 전달되지 않으며,BottomNavigationBar
및FloatingActionButton
인스턴스의 문제를 해결합니다. (I1bb78, b/186012452) - 이제 프로세스 중단 후 프래그먼트 결과 번들에서 Parcelable를 가져올 수 있습니다. (I65932, b/187443158)
- ViewGroup에서 공유 요소 전환을 실행할 때 ViewGroup의
transitionGroup
이 false로 설정되어 있으면 이제 제대로 전환이 이루어집니다. (I99675)
버전 1.3.3
2021년 4월 21일
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
및 androidx.fragment:fragment-testing:1.3.3
이 출시되었습니다. 버전 1.3.3에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 프래그먼트의 뷰에서
ViewTreeSavedStateRegistryOwner.get()
으로 반환된SavedStateRegistryOwner
와 함께 사용할 경우SavedStateViewModelFactory
가 작동합니다. (I21acf, b/181577191)
버그 수정
NavHostFragment
에 의해 사용되는 것과 같은setPrimaryNavFragment
작업이 포함된FragmentTransaction
을 표시할 때popEnter
애니메이션이 실행되지 않는 프레그먼트1.3.2
의 회귀 문제를 해결했습니다. (I38c87, b/183877426)- 이제
FragmentContainerView
로 인해Fragment
가 새로운WindowInsets
집합을 전달하므로 각 프래그먼트가 인셋을 독립적으로 사용할 수 있습니다. (I63f68, b/172153900) - 이제
DialogFragment
가 맞춤Dialog
클래스의 컨테이너와 ID가 동일한 컨테이너에 하위 프래그먼트가 추가되는 경우를 적절하게 처리하여,BottomSheetDialog
와 같은 대화상자에서 내부적으로 사용되는 ID를 재사용할 때 발생하는 뷰 계층 구조 문제를 해결합니다. (Ie6279, b/180021387) - 이제
FragmentManager.dump()
가 활성 프래그먼트의 첫 번째 프래그먼트를 적절하게 들여씁니다. (If5c33, b/183705451)
새로운 상태 관리자 버그 수정
- 이제 새 프래그먼트 상태 관리자가 숨기기 작업으로 종료 전환을 올바르게 처리합니다. (I9e4de, b/184830265)
버전 1.3.2
2021년 3월 24일
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
및 androidx.fragment:fragment-testing:1.3.2
가 출시되었습니다. 버전 1.3.2에 포함된 커밋을 확인하세요.
새로운 상태 관리자 버그 수정
popBackStack()
및commit()
작업을 함께 실행하는 경우 이제 마지막 작업이 일부 팝 애니메이션과 진입 애니메이션을 실행하는 대신 모든 애니메이션의 방향을 설정합니다. (I7072e, b/181142246)- 공유 요소 계층 구조 내의 뷰에서 공유 요소를 전환할 때 전환 이름이 더 이상 삭제되지 않습니다. (I4d4a6, b/179934757)
종속 항목 업데이트
- Fragment가 이제 Activity 1.2.2에 종속되므로 Fragment 1.3.1 이상을 사용할 때 Activity의
InvalidFragmentVersionForActivityResult
린트 검사 문제와 관련된 문제가 해결됩니다. - Fragment가 이제 Lifecycle 2.3.1에 종속됩니다.
버전 1.3.1
2021년 3월 10일
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
및 androidx.fragment:fragment-testing:1.3.1
이 출시되었습니다. 버전 1.3.1에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
DialogFragment
내 대화상자에서 DecorView를 통해 ViewTree 소유자에 액세스할 수 있으므로DialogFragment
를ComposeView
와 함께 사용할 수 있습니다. (Ib9290, b/180691023)
버그 수정
- FragmentContainerView를 사용하여 이미
RESUMED
활동으로 확장된 프래그먼트가 이제 구성 변경 후 제대로 표시됩니다. (Ie14c8, b/180538371) - 프래그먼트
toString()
끝에 더 이상 추가}
기호가 없습니다. (I54705, b/177761088) - FragmentActivity의 재정의된 메서드가 이제 기본 메서드 javaDoc을 제대로 상속합니다. (I736ce, b/139548782)
setFragmentResult
및setFragmentResultListener
의 문서에서 더 이상 nullable을 허용하지 않음을 반영하도록 매개변수 문서를 업데이트했습니다. (I990ba, b/178348386)
새로운 상태 관리자 버그 수정
mFocusedView
로 인해 발생한 프래그먼트의 메모리 누수 문제를 수정했습니다. (Ib4e9e, b/179925887)- 이제 프래그먼트가 트랜잭션 표시/숨기기를 사용할 때
onCreateOptionsMenu
를 제대로 호출합니다. (I8bce8, b/180255554) - 프래그먼트가 배치되기 전에 시작하는 전환이 있는 하위 프래그먼트가 이제
RESUMED
에 제대로 도달합니다. (Ic11e6, b/180825150) - 이제
<fragment>
태그를 사용하여 확장된 프래그먼트가 항상RESUMED
로 이동합니다. (I452ac, I9fa49)
종속 항목 업데이트
- Fragment 1.3.1은 Activity
1.2.1
에 종속됩니다. (I557b9)
버전 1.3.0
2021년 2월 10일
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
및 androidx.fragment:fragment-testing:1.3.0
이 출시되었습니다. 버전 1.3.0에 포함된 커밋을 확인하세요.
1.2.0 이후 주요 변경사항
- 새 상태 관리자:
FragmentManager
의 내부 기능을 대대적으로 재작성하여 수명 주기 이벤트, 애니메이션, 전환의 전달과 연기된 프래그먼트 처리 방식에 관한 여러 문제를 해결했습니다. Activity Result API 통합: Fragment의 메서드를 재정의하지 않고
startActivityForResult()
+onActivityResult()
및requestPermissions()
+onRequestPermissionsResult()
흐름을 처리하도록 Activity1.2.0
에 도입된ActivityResultRegistry
API에 대한 지원이 추가되었습니다. 이러한 흐름을 테스트하기 위한 후크도 제공됩니다. 업데이트된 활동에서 결과 가져오기를 참고하세요.- 이 버전에서는 잘못된 요청 코드 및
FragmentActivity
이전 버전에서 Activity Result API의 작동을 막는 권한 요청 전달과 관련된 여러 문제를 해결했습니다.FragmentActivity
또는AppCompatActivity
에서 Activity Result API를 사용하려면 Fragment 1.3.0으로 업그레이드해야 합니다.
- 이 버전에서는 잘못된 요청 코드 및
Fragment Result API:
FragmentManager
의 새 API를 통해 두 Fragment 간에 결과를 전달하는 기능이 추가되었습니다. 이는 탐색의 계층 구조 프래그먼트(상위/하위), DialogFragment 및 Navigation의 프래그먼트에서 작동하며 결과가STARTED
이상인 경우에만 프래그먼트로 전송되도록 합니다. 타겟 프래그먼트 API가 지원 중단되었으며 이 새로운 API로 대체되었습니다. Fragment Result API를 사용하여 결과 가져오기를 참고하세요.FragmentOnAttachListener
:FragmentActivity
및Fragment
의onAttachFragment()
콜백이 지원 중단되었습니다. 더 유연한 대안을 제공하기 위해 새FragmentOnAttachListener
가 추가되었습니다.onAttachFragment()
를 테스트 가능한 별도의 리스너에 위임하고 직계 하위 FragmentManager 이외의 FragmentManager에 리스너를 추가하는 작업을 지원할 수 있습니다.FragmentScenario
개선사항:fragment-testing
아티팩트의FragmentScenario
클래스를 Kotlin으로 재작성하여 다음과 같이 개선했습니다.- 이제
FragmentScenario
는moveToState()
를 구현하기 위해setMaxLifecycle()
을 사용하여 모든 API 수준에서 일관된 동작을 보장하고 기본 Activity에서 Fragment의 상태를 분리합니다. - 이제
FragmentScenario
는 각Lifecycle.State
로 처음 이동하기 전에 프래그먼트 상태의 어설션을 지원하도록 초기Lifecycle.State
설정을 지원합니다. - 이제 값을 반환할 수 있는 Kotlin의 구체화된 확장 메서드인
withFragment
의 형태로onFragment
의FragmentScenario
API에 대한 대안이 마련되었습니다. 특히, 특정 블록에서 발생한 예외가 다시 발생합니다.
- 이제
ViewTree
지원: 이제Fragment
는 Lifecycle2.3.0
과 SavedState1.1.0
에 추가된ViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
및ViewTreeSavedStateRegistryOwner
API를 지원하여 Fragment를Fragment
내에서View
를 사용할 때 프래그먼트의 뷰 수명 주기에 연결된SavedStateRegistryOwner
,LifecycleOwner
와ViewModelStoreOwner
로 반환합니다.TRANSIT_
애니메이션 변경사항: 프래그먼트 기본 효과인TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
가 이제Animation
대신Animator
를 사용합니다. 이 Animator를 빌드하는 데 사용된 리소스가 이제 공개되지 않습니다.setRetainInstance()
지원 중단: Fragment의setRetainInstance()
메서드가 지원 중단되었습니다. ViewModels가 도입되면서 개발자는 활동, 프래그먼트, 탐색 그래프와 연결할 수 있는 상태를 유지하기 위한 특정 API를 갖게 됩니다. 이를 통해 개발자는 보존된 상태가 아닌 일반 상태의 Fragment를 사용하고 별도로 보관하고자 하는 특정 상태를 유지할 수 있습니다. 또한, 단일 생성의 유용한 속성을 유지하면서 누수의 일반적인 원인을 피하고 보관되는 상태(즉,ViewModel
의 생성자 및 생성자가 수신하는onCleared()
콜백)의 파괴를 방지할 수 있습니다.ViewPager 1 어댑터 지원 중단: ViewPager2
1.0.0
이 출시되면서ViewPager
와 상호작용하는FragmentPagerAdapter
및FragmentStatePagerAdapter
클래스가 지원 중단되었습니다. ViewPager에서 ViewPager2로 이전을 참고하세요.
버전 1.3.0-rc02
2021년 1월 27일
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
및 androidx.fragment:fragment-testing:1.3.0-rc02
가 출시되었습니다. 버전 1.3.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 구성 변경 후 상위
DialogFragment
가 하위DialogFragment
위에 표시되는 문제를 수정했습니다. 하위 대화상자 프래그먼트는 이제 항상 상위 대화상자 프래그먼트 위에 표시됩니다. (I30806, b/177439520) Animation
으로hide
작업을 실행하면 애니메이션 종료 시 숨기기 프래그먼트가 플래시되는 문제를 수정했습니다. (I57e22, b/175417675)- 뷰 계층 구조가 연결되기 전에 전환이 추가된 프래그먼트가 이제
RESUMED
에 적절하게 도달합니다. (I1fc1d, b/177154873)
새로운 상태 관리자 버그 수정
Lifecycle
이CREATED
에 도달하기 전에 Fragment의 뷰가 소멸되는 사례를 이제 Fragment의 뷰Lifecycle
에서 적절하게 처리하여 'INITIALIZED에서 중단된 이벤트 없음'이라는 예외를 방지합니다. (eda2bd, b/176138645)Animator
를 사용하는 프래그먼트가 이제FragmentContainerView
를 사용할 때 올바른 순서로 표시됩니다. (Id9aa3, b/176089197)
버전 1.3.0-rc01
2020년 12월 16일
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
및 androidx.fragment:fragment-testing:1.3.0-rc01
이 출시되었습니다. 버전 1.3.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
onPrepareOptionsMenu()
가onCreateOptionsMenu()
와 동일한 로직을 따르며 상위 프래그먼트가setMenuVisibility(false)
를 호출할 때 더 이상 호출되지 않습니다. (Id7de8, b/173203654)
새로운 상태 관리자 버그 수정
Animation
이 포함된 프래그먼트를FragmentContainerView
에 추가한 다음 팝업 창 작업으로 추가를 중단할 때 발생하는 누수 및 시각적 아티팩트를 수정했습니다. (I952d8)onCreate()
또는onViewCreated()
메서드 중에 프래그먼트의 뷰가 교체되어도 뷰 계층 구조에 유지되는 문제를 수정했습니다. (I8a7d5)- 이제 프래그먼트 루트 뷰가 다시 시작될 때 포커스가 프래그먼트 루트 뷰로 올바르게 복원됩니다. (Ifc84b)
- 동일한 프래그먼트 트랜잭션에서 팝업 창 작업과 교체 작업을 결합하면 이제 적절한 애니메이션이 표시됩니다. (Ifd4e4, b/170328691)
버전 1.3.0-beta02
2020년 12월 2일
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
및 androidx.fragment:fragment-testing:1.3.0-beta02
가 출시되었습니다. 버전 1.3.0-beta02에 포함된 커밋을 확인하세요.
새로운 기능
- Kotlin 1.4의
FragmentAction
용 기능적 인터페이스를 통해 소스 및 바이너리 호환성을 유지하면서FragmentScenario
가 Kotlin으로 완전히 변환되었습니다. (I19d31)
동작 변경사항
class
또는android:name
속성을 사용하여 프래그먼트를 확장하지 않는 FragmentContainerViews를 이제FragmentActivity
외부에서 사용할 수 있습니다. (Id4397, b/172266337)- 프래그먼트의 최대 수명 주기를
DESTROYED
로 설정하려고 하면 이제IllegalArgumentException
이 발생합니다. (Ie7651, b/170765622) DESTROYED
상태로 FragmentScenario를 초기화하면 이제IllegalArgumentException
이 발생합니다. (I73590, b/170765622)
새로운 상태 관리자 버그 수정
TRANSIT_FRAGMENT_
옵션 중 하나 또는Animator
를 사용하는 프래그먼트 전환이 중단되면 뷰가 최종 상태에 도달하지 않는 문제를 수정했습니다. (I92426, b/169874632)- 종료
Animation
이 있는 프래그먼트가 올바르게 소멸되지 못하던 문제를 수정했습니다. (I83d65) - 효과가 반전된 종료 프래그먼트가 이제 올바르게 취소되고 적절한 입력 효과로 다시 시작됩니다. (I62226, b/167092035)
hide()
의 종료Animator
가 실행되지 않는 문제를 수정했습니다. (Id7ffe)- 프래그먼트가 이제 연기되었다가 즉시 시작될 때 올바르게 표시됩니다. (Ie713b, b/170022857)
- 애니메이션 중에 포커스가 지정된 뷰를 삭제하는 프래그먼트가
RESUMED
에 도달하면 더 이상 분리된 뷰의 포커스를 복원하려고 하지 않습니다. (I38c65, b/172925703)
외부 기여
FragmentFactory
가 이제 다양한ClassLoader
인스턴스의 프래그먼트 클래스를 별도로 캐시합니다. 사이먼 쉴러님께 감사드립니다. (#87, b/113886460)
버전 1.3.0-beta01
2020년 10월 1일
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
및 androidx.fragment:fragment-testing:1.3.0-beta01
가 출시되었습니다. 버전 1.3.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
setMaxLifecycle()
이 프래그먼트가CREATED
로 이동되지 않은 한Lifecycle
상태를INITIALIZING
으로 설정하는 것을 지원합니다. (b/159662173)
API 변경사항
- Kotlin 1.4를 사용하도록 androidx를 업그레이드합니다. (Id6471, b/165307851, b/165300826)
동작 변경사항
- 프래그먼트 리소스 파일이 올바르게 비공개로 설정되었습니다. (aosp/1425237)
버그 수정
<fragment>
태그를 사용하여 확장된 프래그먼트가 이제 STARTED로 이동하기 전에 컨테이너에 뷰가 추가될 때까지 올바르게 대기합니다. (I02f4c)- 표시된 다음
setMaxLifecycle()
을CREATED
로 설정한 프래그먼트가 이제 종료 효과를 올바르게 실행합니다. (b/165822335) - 백 스택에 추가되지 않은 분리된 프래그먼트를 삭제해도 더 이상 메모리 누수가 발생하지 않습니다. 니클라스 안스만 기어츠 씨께 감사드립니다. (b/166489383)
- 이제 활성 프래그먼트에 항상 null이 아닌
FragmentManager
가 있으며 null이 아닌FragmentManager
가 있는 프래그먼트는 항상 활성 상태로 간주됩니다. (aosp/1422346) - 프래그먼트 기본 효과
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
및TRANSIT_FRAGMENT_FADE
가 이제Animation
대신Animator
를 사용합니다. (b/166155034)
새로운 상태 관리자 버그 수정
- 이제 프래그먼트가 애니메이션을 시작하기 직전에 뷰 포커스 상태를 올바르게 복원합니다. (Icc256)
- 공유 요소 전환만 있는 프래그먼트가 이제 특수 효과를 올바르게 완료합니다. 즉, 실제로 최종 상태로 이동합니다. (Iaebc7, b/166658128)
- 이제 프래그먼트 뷰가 제거되기 전에 항상 컨테이너에서 삭제됩니다. (Id5876)
- 새로운 상태 관리자가 이제 진입 프래그먼트 뷰를 추가하기 전에 이탈 프래그먼트 뷰를 일관되게 삭제합니다. (I41a6e)
- 이제 프래그먼트 뷰의 명시적인 가시성 변경사항이 새로운 상태 관리자에 적용됩니다. 즉, 애니메이션이 시작되기 전에 진입 프래그먼트의 뷰를
INVISIBLE
로 설정하면 실제로 계속 표시되지 않습니다. (b/164481490) - 이제 프래그먼트가
Animations
보다Animators
를 우선합니다. 즉, 두 개 다 있는 프래그먼트는Animator
만 실행하고Animation
을 무시합니다. (b/167579557) - 새로운 상태 관리자가 진입 애니메이션을 사용할 때 더 이상 프래그먼트가 플래시되지 않습니다. (b/163084315)
알려진 문제
새로운 상태 관리자를 사용할 때 이전 프래그먼트로 돌아가지 않고 진입 특수 효과 중에 뒤로를 누르면 이전 프래그먼트가 다시 추가되지 않아 빈 화면이 표시됩니다. (b/167259187, b/167092035, b/168442830)
버전 1.3.0-alpha08
2020년 8월 19일
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
및 androidx.fragment:fragment-testing:1.3.0-alpha08
가 출시되었습니다. 버전 1.3.0-alpha08에 포함된 커밋을 확인하세요.
새 상태 관리자
이 출시 버전에는 수명 주기 메서드, 애니메이션 및 전환의 디스패치와 연기된 트랜잭션 처리 방식에 영향을 주는 FragmentManager
의 내부 상태 관리에 관한 주요 리팩터링이 포함되어 있습니다. 이 기능은 기본적으로 사용 설정되어 있습니다. 자세한 내용은 프래그먼트: 내부 요소 다시 빌드 블로그 게시물을 참조하세요. (b/139536619, b/147749580)
FragmentManager.enableNewStateManager(boolean)
의 실험용 API를 사용하여 FragmentManager가 새 상태 관리자를 사용할지 여부를 제어할 수 있습니다. (I7b6ee)
다음 문제는 새 상태 관리자를 사용할 때만 수정됩니다.
- 이제 새 프래그먼트가 시작되기 전에
replace
작업의 이전 프래그먼트가 올바르게 중지됩니다. (b/161654580) - 프래그먼트는 이제 동일한 프래그먼트에서 여러 경쟁 애니메이션을 방지하여
Animation
이 모든Transition
효과를 재정의하거나 개별 프래그먼트의Animator
와Transition
이 모두 실행되는 경우를 방지합니다. (b/149569323) - 이제 마지막 진입 프래그먼트와 첫 번째 이탈 프래그먼트만이 아니라 진입 및 이탈하는 모든 프래그먼트의
enterTransition
및exitTranstion
이 실행됩니다. (b/149344150) - 연기된 프래그먼트가 더 이상
CREATED
상태에서 중단되지 않고 대신 다른 프래그먼트와 함께STARTED
로 이동합니다. (b/129035555) - 연기되고 재정렬된 트랜잭션과 재정렬되지 않은 트랜잭션을 혼합할 때
FragmentManager
가 순서에 상관없이 작업을 실행하는 문제가 수정되었습니다. (b/147297731) - 여러 프래그먼트를 동시에 표시하는 경우 프래그먼트를 연기할 때 중간 프래그먼트가 일시적으로 표시되는 문제가 더 이상 발생하지 않습니다. (b/37140383)
- 이제
FragmentManager
는onAttachFragment()
콜백 내에서findFragmentById()
또는findFragmentByTag()
를 호출할 때 올바른 프래그먼트를 반환합니다. (b/153082833) - 다른 프래그먼트를 대체하는 프래그먼트가 연기될 때 이 프래그먼트는 소멸되는 프래그먼트에서
onCreateView()
를 더 이상 호출하지 않습니다. (b/143915710) - 이제 프레임워크
Transition
과 AndroidXTransition
인스턴스를 결합하려고 할 때 오류 메시지에 잘못된 전환이 있는 프래그먼트가 표시됩니다. (b/155574969)
동작 변경사항
- 이제 프래그먼트의
onCreate()
수명 주기 메서드에서ActivityResultLauncher
의launch()
를 호출할 수 있습니다. (b/161464278) onCreate()
이후에registerForActivityResult()
를 호출하는 경우 이제 예외가 발생하여 이 호출이 허용되지 않음을 나타냅니다(이전에는 구성 변경 후에 결과를 전달하지 않았으며 이에 대한 알림도 표시되지 않았음). (b/162255449)- 이제
FragmentActivity
는 Activity1.2.0-alpha08
에 도입된OnContextAvailableListener
API를 사용하여FragmentManager
의 상태를 복원합니다.FragmentActivity
의 서브클래스에 추가된 모든 리스너는 이 리스너 이후에 실행됩니다. (I513da)
버그 수정
- 이제
startIntentSenderForResult()
사용 시 전달되는ActivityOptions
가 준수됩니다. (b/162247961)
알려진 문제
- 새 상태 관리자를 사용할 때
onViewCreated()
이후와onResume()
이전에 프래그먼트의 루트 뷰 공개 상태를 직접 설정하면 루트 뷰의 공개 상태를 제어하는FragmentManager
에서 설정된 공개 상태를 재정의합니다. 이 문제를 해결하려면 항상hide()
및show()
작업을 사용하여 프래그먼트의 공개 상태를 변경해야 합니다. (b/164481490)
버전 1.3.0-alpha07
2020년 7월 22일
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
및 androidx.fragment:fragment-testing:1.3.0-alpha07
가 출시되었습니다. 버전 1.3.0-alpha07에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
FragmentScenario
에서 항상 Fragment를RESUMED
상태로 이동하는 대신 초기 수명 주기 상태를CREATED
,STARTED
또는RESUMED
로 설정할 수 있습니다. (b/159662750) - 값을 반환할 수 있는 Kotlin의 구체화된 확장 메서드인
withFragment
의 형태로onFragment
의FragmentScenario
API에 대한 대안을 추가했습니다. 특히, 특정 블록에서 발생한 예외가 다시 발생합니다. (b/158697631)
동작 변경사항
- 이제
FragmentScenario
는moveToState()
를 구현하기 위해setMaxLifecycle()
을 사용하여 모든 API 수준에서 일관된 동작을 보장하고 기본 Activity에서 Fragment의 상태를 분리합니다. (b/156527405) - 이제
ViewTreeSavedStateRegistryOwner
에서 반환하는SavedStateRegistryOwner
는 프래그먼트 뷰의 수명 주기에 연결됩니다. 이렇게 하면 프래그먼트 뷰와 동시에 상태가 저장되고 복원됩니다. (b/158503763)
버그 수정
- 이제 프래그먼트는 인셋 요청이 삭제되는 경우를 방지하기 위해
ViewCompat.requestApplyInsets()
를 호출하기 전에 프래그먼트 뷰가 연결될 때까지 대기합니다. (b/158095749) - 이제
clearFragmentResultListener
를 호출하면 수명 주기 관찰자가 적절히 삭제됩니다. (b/159274993)
버전 1.3.0-alpha06
2020년 6월 10일
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
및 androidx.fragment:fragment-testing:1.3.0-alpha06
가 출시되었습니다. 버전 1.3.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
FragmentActivity
및Fragment
의onAttachFragment()
콜백이 지원 중단되었습니다. 더 유연한 대안을 제공하려고 새FragmentOnAttachListener
가 추가되었습니다.onAttachFragment()
를 테스트 가능한 별도의 리스너에 위임하고 직계 하위 FragmentManager 이외의 FragmentManager에 리스너를 추가하는 작업을 지원할 수 있습니다. (I06d3d)
버그 수정
- 이제 상위 프래그먼트가 하위 프래그먼트 전에 뷰 상태를 복원하여
DialogFragment
가 다른DialogFragment
를 하위 프래그먼트로 표시할 때 구성 변경 후 시각적 순서 지정 문제를 수정합니다. (b/157195715) UseRequireInsteadOfGet
린트 검사가?.
및!!
연산자의 연결된 사용을 올바르게 처리하지 못하는 문제가 수정되었습니다. (b/157677616)
버전 1.3.0-alpha05
2020년 5월 20일
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
및 androidx.fragment:fragment-testing:1.3.0-alpha05
가 출시되었습니다. 버전 1.3.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
Fragment
내에서View
를 사용할 때 수명 주기2.3.0-alpha03
의ViewTreeViewModelStoreOwner
및 SavedState1.1.0-alpha01
의ViewTreeSavedStateRegistryOwner
지원이 추가되었습니다. (aosp/1297993, aosp/1300264)
API 변경사항
- 이제
setFragmentResult()
및setFragmentResultListener()
API는 null이 아닌Bundle
및FragmentResultListener
를 각각 사용합니다. 이전에 설정한 결과 또는 리스너를 명시적으로 삭제하려면 새clearFragmentResult()
및clearFragmentResultListener()
메서드를 사용하세요. (b/155416778) - 람다를 사용하는
setFragmentResultListener()
Kotlin 확장 프로그램이 이제inline
으로 표시됩니다. (b/155323404)
동작 변경사항
- 이전에 지원 중단된
Fragment
의startActivityForResult()
,startIntentSenderForResult()
,requestPermissions
가 이제 내부적으로ActivityResultRegistry
를 사용하므로 이러한 API를 사용할 때 요청 코드에 하위 비트(0xFFFF
미만)만 사용하는 제한사항이 삭제됩니다. (b/155518741)
문서 업데이트
Fragment(@LayoutRes int)
및DialogFragment(@LayoutRes int)
생성자에 관한 문서를 확장하여 기본FragmentFactory
를 사용할 때 서브클래스의 인수가 없는 생성자에서 호출해야 한다고 명시했습니다. (b/153042497)
버전 1.3.0-alpha04
2020년 4월 29일
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
및 androidx.fragment:fragment-testing:1.3.0-alpha04
가 출시되었습니다. 버전 1.3.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
FragmentManager
의 새 API를 통해 두 프래그먼트 간에 결과를 전달하는 기능이 추가되었습니다. 이는 계층 구조 프래그먼트(상위/하위), DialogFragment 및 Navigation의 프래그먼트에서 작동하며 결과가STARTED
이상인 경우에만 Fragment로 전송되도록 합니다. (b/149787344)
API 변경사항
- 타겟 프래그먼트 API가 지원 중단되었습니다. 프래그먼트 간에 데이터를 전달하려면 대신 새 Fragment Result API를 사용해야 합니다. (b/149787344)
- 프래그먼트의
startActivityForResult()
/onActivityResult()
및requestPermissions()
/onRequestPermissionsResult()
API가 지원 중단되었습니다. Activity Result API를 사용하세요. (aosp/1290887) - 활동
1.2.0-alpha04
의 브레이킹 체인지:prepareCall()
메서드는registerForActivityResult()
로 이름을 바꾸었습니다. (aosp/1278717)
버그 수정
- 이제 프래그먼트의 수명 주기 동작을 미러링하여
onSaveInstanceState()
가 호출되기 전에 프래그먼트의getViewLifecycleOwner()
가 중지됩니다. (b/154645875) - 이제 프래그먼트에서
setMenuVisibility(false)
를 호출하면 하위 프래그먼트에서 제공하는 메뉴의 공개 상태가 올바르게 변경됩니다. (b/153593580) FragmentContainerView
를 사용하여DialogFragment
의 뷰 계층 구조에 프래그먼트를 추가할 때 발생하는illegalStateException
을 수정했습니다. (b/154366601)- 활동 외부에서 프래그먼트를 호스팅할 때 프래그먼트의
getDefaultViewModelProviderFactory()
메서드가 더 이상 비정상 종료되지 않습니다. (b/153762914)
버전 1.3.0-alpha03
2020년 4월 1일
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
및 androidx.fragment:fragment-testing:1.3.0-alpha03
가 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
Fragment
의prepareCall
메서드는 현재final
입니다. (b/152439361)
버그 수정
BottomSheetDialogFragment
를 사용할 때 프래그먼트1.3.0-alpha02
에 도입되는 회귀 문제가 해결되었습니다. (b/151652127, aosp/1263328, aosp/1265163)- 구성 변경 후 프래그먼트에서
prepareCall
사용 시 비정상 종료 문제가 해결되었습니다. (b/152137004) setTargetFragment()
사용 시 공유 요소 및 이탈 전환이 무시되던 문제가 해결되었습니다. (b/152023196)- Fragment
1.2.4
에서: 보관된 프래그먼트의 난독화를 허용하도록 Fragment ProGuard 규칙이 업데이트되었습니다. (b/151605338) - Fragment
1.2.4
에서: 수명 주기와 뷰 수명 주기가 항상 동기화되므로observe
호출 시this
또는viewLifecycleOwner
를 안전하게 사용할 수 있도록DialogFragment
클래스에서FragmentLiveDataObserve
린트 규칙이 사용 중지되었습니다. (b/151765086)
종속 항목 변경사항
- 프래그먼트는 Activity
1.2.0-alpha03
에 따라 달라지며, 이는 Activity1.2.0-alpha02
에 도입된 Activity Result API를 대폭 개선했습니다.
버전 1.3.0-alpha02
2020년 3월 18일
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
및 androidx.fragment:fragment-testing:1.3.0-alpha02
가 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- Fragment의 메서드를 재정의하지 않고
startActivityForResult()
+onActivityResult()
및requestPermissions()
+onRequestPermissionsResult()
흐름을 처리하도록 Activity1.2.0-alpha02
에 도입된ActivityResultRegistry
API에 대한 지원이 추가되었습니다. 이러한 흐름을 테스트하기 위한 후크도 제공됩니다. 업데이트된 활동에서 결과 가져오기를 참고하세요. (b/125158199)
API 변경사항
DialogFragment
는 이제onCreateView()
가 기본적으로 확장해야 하는 레이아웃을 표시하는@LayoutRes
를 가져오는 생성자를 제공합니다. (b/150327080)onActivityCreated()
메서드가 지원 중단되었습니다. 프래그먼트의 뷰를 터치하는 코드는onViewCreated()
(onActivityCreated()
직전에 호출됨)에서 실행되어야 하며 다른 초기화 코드는onCreate()
에 있어야 합니다. 활동onCreate()
가 완료되었을 때 콜백을 받으려면LifeCycleObserver
가onAttach()
내 활동의Lifecycle
에 등록되어 있어야 하며onCreate()
콜백이 수신된 후에는 제거되어야 합니다. (b/144309266)
버그 수정
- Fragment
1.2.3
에서:onCreateDialog()
에서getLayoutInflater()
호출 시StackOverflowError
를 일으키던DialogFragment
내 버그가 수정되었습니다. (b/117894767, aosp/1258664) - Fragment
1.2.3
에서: 사용되지 않는 Fragment 클래스를 제거할 수 있도록 Fragment에 포함된 ProGuard 규칙의 범위를 줄였습니다. (b/149665169) - Fragment
1.2.3
에서: Kotlin 속성 이름을 따르는 로컬 변수 이름을 사용할 때UseRequireInsteadOfGet
린트 검사 내 거짓양성이 수정되었습니다. (b/149891163) - Fragment
1.2.3
에서: 더 이상 레이아웃 미리보기의 잘못된 생성자를 사용하는 것으로 인해FragmentContainerView
에서UnsupportedOperationException
이 발생하지 않습니다. (b/149707833)
알려진 문제
BottomSheetDialogFragment
이 화면에 대화상자를 제대로 배치하지 않습니다. (b/151652127)
버전 1.3.0-alpha01
2020년 3월 4일
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
및 androidx.fragment:fragment-testing:1.3.0-alpha01
가 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
onCreateView()
에서 모든 뷰에LifecycleOwner
를 반환하듯이 프래그먼트의viewLifecycleOwner
를 반환할 것이므로 LIfecycle2.3.0-alpha01
에 추가된ViewTreeLifecycleOwner.get(View)
API에 대한 지원이 추가되었습니다. (aosp/1182955)
API 변경사항
- Fragment의
setRetainInstance()
메서드가 지원 중단되었습니다. ViewModels가 도입되면서 개발자는 활동, 프래그먼트, 탐색 그래프와 연결할 수 있는 상태를 유지하기 위한 특정 API를 갖게 됩니다. 이를 통해 개발자는 보존된 상태가 아닌 일반 상태의 Fragment를 사용하고 별도로 보관하고자 하는 특정 상태를 유지할 수 있습니다. 또한, 단일 생성의 유용한 속성을 유지하면서 누수의 일반적인 원인을 피하고 보관되는 상태(즉,ViewModel
의 생성자 및 생성자가 수신하는onCleared()
콜백)의 파괴를 방지할 수 있습니다. (b/143911815) - ViewPager2
1.0.0
의 출시로ViewPager
와 상호작용하는FragmentPagerAdapter
및FragmentStatePagerAdapter
클래스가 지원 중단되었습니다. ViewPager에서 ViewPager2로 이전을 참고하세요. (b/145132715)
버그 수정
- 이제 Fragment ProGuard 규칙이 모든
Fragment
인스턴스가 아닌 사용된 기본 생성자Fragment
클래스만 올바르게 유지하여 Fragment1.2.1
에 도입되는 회귀 문제를 수정합니다. (b/149665169) - Fragment
1.2.2
에 추가된require___()
린트 규칙은 우선 적용된 Kotlin 속성 이름(예:view
)과 동일한 이름을 공유하는 로컬 변수에 더 이상 거짓양성을 일으키지 않습니다. (b/149891163) - Android 스튜디오에서 레이아웃 미리보기를 사용할 때
FragmentContainerView
에서 더 이상UnsupportedOperationException
을 일으키지 않습니다. (b/149707833) - 보관된 프래그먼트가 상태가 저장된 후 추가되면 계속해서 다시 생성되지 않고 구성이 변경될 때마다 파괴되는 문제가 해결되었습니다. (b/145832397)
버전 1.2.5
버전 1.2.5
2020년 6월 10일
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
및 androidx.fragment:fragment-testing:1.2.5
가 출시되었습니다. 버전 1.2.5에 포함된 커밋을 확인하세요.
버그 수정
- 이제 프래그먼트의 수명 주기 동작을 미러링하여
onSaveInstanceState()
가 호출되기 전에 프래그먼트의getViewLifecycleOwner()
가 중지됩니다. 이전에는 Fragment1.3.0-alpha04
에서 출시되었습니다. (b/154645875) - 이제 프래그먼트에서
setMenuVisibility(false)
를 호출하면 하위 프래그먼트에서 제공하는 메뉴의 공개 상태가 올바르게 변경됩니다. 이전에는 Fragment1.3.0-alpha04
에서 출시되었습니다. (b/153593580)
버전 1.2.4
버전 1.2.4
2020년 4월 1일
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
및 androidx.fragment:fragment-testing:1.2.4
가 출시되었습니다. 버전 1.2.4에 포함된 커밋을 확인하세요.
버그 수정
- 보관된 프래그먼트의 난독화를 허용하도록 Fragment Progard 규칙이 업데이트되었습니다. (b/151605338)
- 수명 주기와 뷰 수명 주기가 항상 동기화되므로
observe
호출 시this
또는viewLifecycleOwner
를 안전하게 사용할 수 있도록DialogFragment
클래스에서FragmentLiveDataObserve
린트 규칙이 사용 중지되었습니다. (b/151765086)
버전 1.2.3
버전 1.2.3
2020년 3월 18일
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
및 androidx.fragment:fragment-testing:1.2.3
가 출시되었습니다. 버전 1.2.3에 포함된 커밋을 확인하세요.
버그 수정
onCreateDialog()
에서getLayoutInflater()
호출 시StackOverflowError
를 일으키는DialogFragment
내 버그가 수정되었습니다. (b/117894767, aosp/1258665)- 사용되지 않는 Fragment 클래스를 제거할 수 있도록 Fragment에 포함된 ProGuard 규칙의 범위를 줄였습니다. (b/149665169)
- Kotlin 속성 이름을 따르는 로컬 변수 이름을 사용할 때
UseRequireInsteadOfGet
린트 검사 내 거짓양성이 수정되었습니다. (b/149891163) - 더 이상 레이아웃 미리보기에서 잘못된 생성자를 사용한 것으로 인해
FragmentContainerView
에서UnsupportedOperationException
이 발생하지 않습니다. (b/149707833)
버전 1.2.2
버전 1.2.2
2020년 2월 19일
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
및 androidx.fragment:fragment-testing:1.2.2
가 출시되었습니다. 버전 1.2.2에 포함된 커밋을 확인하세요.
새로운 린트 검사
- 린트는
onCreateView()
,onViewCreated()
,onActivityCreated()
에서OnBackPressedDispatcher
를 호출하기 위해LifecycleOwner
로viewLifecycleOwner
을 사용하도록 제안합니다. (b/142117657) fragment-testing
아티팩트를 사용할 때 올바른debugImplementation
을 사용하고 있는지 확인하는 새로운 린트 검사가 추가되었습니다. (b/141500106)- 이제 Fragment에서 연결된
require___()
메서드를 사용하여get
및require
등가물을 포함하는 모든 Fragment API에 대해checkNotNull(get___())
,requireNonNull(get___())
또는get___()!!
대신 보다 자세한 오류 메시지를 제공합니다. (aosp/1202883)
버그 수정
- R8 경고를 피하기 위해 Fragment ProGuard 파일을 수정했습니다. (b/148963981)
observe
의livedata-ktx
확장 메서드 버전을 처리하기 위해observe
사용 시viewLifecycleOwner
사용을 제안하던 기존 린트 검사 기능을 개선했습니다. (b/148996309)- 린트 검사의 형식을 상당 부분 수정했습니다. (aosp/1157012)
외부 기여
- Slack을 대신하여
require___()
린트 검사에 참여해 주신 잭 스위어스님에게 감사드립니다. (aosp/1202883)
버전 1.2.1
버전 1.2.1
2020년 2월 5일
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
및 androidx.fragment:fragment-testing:1.2.1
가 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제
Class
인스턴스(또는 Kotlin 구체화된 버전)를 사용하는add
및replace
메서드를 통해 추가된 프래그먼트는 ProGuard에서 보관하는 기본 생성자를 유지합니다. (b/148181315) FragmentStatePagerAdapter
및FragmentPagerAdapter
는 더 이상finishUpdate()
실행 시FragmentManager
에서 발생시키는 예외를 포착하지 않습니다. (aosp/1208711)FragmentManager.findFragment()
가<fragment>
태그를 통해 추가된 프래그먼트에서 작동하지 않는 문제가 해결되었습니다. (b/147784323)- 이제
<fragment>
태그를 사용하여 확장된 프래그먼트는 항상 레이아웃에서onCreate()
전에onInflate()
를 호출합니다. (aosp/1215856) - 활동이 이미 파괴된 경우
FragmentManager
인스턴스에서toString()
을 호출해도NullPointerException
을 야기하지 않습니다. (b/148189412)
종속 항목 변경사항
- Fragment
1.2.1
은 현재 Lifecycle ViewModel SavedState2.2.0
에 종속됩니다.
버전 1.2.0
버전 1.2.0
2020년 1월 22일
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
및 androidx.fragment:fragment-testing:1.2.0
가 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.
1.1.0 이후 중요 변경사항
- FragmentContainerView:
FragmentContainerView
는FrameLayout
또는 다른 레이아웃 사용을 대체하여 동적으로 추가된 프래그먼트에 강력히 권장되는 컨테이너입니다.<fragment>
태그와 동일한class
,android:name
및 선택적android:tag
도 지원하지만 일반FragmentTransaction
을 사용하여<fragment>
에서 사용하는 맞춤 코드 경로 대신 이 초기 프래그먼트를 추가합니다. onDestroyView()
타이밍: 프레임워크는 이제onDestroyView()
을 호출하기 전에 종료 애니메이션, 종료 프레임워크 전환 및 종료 AndroidX 전환(전환1.3.0
을 사용하는 경우)이 완료될 때까지 기다립니다.- 클래스 기반
add()
및replace()
:FragmentTransaction
에add()
및replace()
의 새 오버로드가 추가되었습니다. 이러한 오버로드는 인수의Class<? extends Fragment>
및 선택적Bundle
을 가져옵니다. 이러한 메서드에서는FragmentFactory
를 사용하여 추가할 프래그먼트의 인스턴스를 구성합니다. 또한 구체화된 유형(예:fragmentTransaction.replace<YourFragment>(R.id.container)
)을 사용하는 Kotlin 확장이fragment-ktx
에 추가되었습니다. - Lifecycle ViewModel SavedState 통합:
by viewModels()
,by activityViewModels()
,ViewModelProvider
생성자 또는ViewModelProviders.of()
를 프래그먼트와 함께 사용할 때SavedStateViewModelFactory
가 이제 기본 팩토리로 사용됩니다. - 새로운 린트 검사:
onCreateView()
,onViewCreated()
또는onActivityCreated()
의LiveData
를 관찰할 때getViewLifecycleOwner()
를 사용하는지 확인하는 새로운 린트 검사가 추가되었습니다. getFragmentManager()
지원 중단: Fragment의getFragmentManager()
및requireFragmentManager()
메서드가 지원 중단되었으며 프래그먼트가 추가되는 null이 아닌FragmentManager
를 반환하는 단일getParentFragmentManager()
메서드로 대체되었습니다(isAdded()
를 사용하여 호출이 안전한지 확인할 수 있음).FragmentManager.enableDebugLogging()
지원 중단: 정적FragmentManager.enableDebugLogging
메서드가 지원 중단되었습니다. 이제 FragmentManager는FragmentManager
태그에서Log.isLoggable()
을 준수합니다. 이에 따라 앱을 다시 컴파일하지 않고도DEBUG
또는VERBOSE
로깅을 사용 설정할 수 있습니다.
알려진 문제
FragmentContainerView
의class
또는android:name
속성을 통해서만 참조되는 프래그먼트는 ProGuard에 의해 자동으로 유지되지 않으므로 각 프래그먼트 클래스의 Keep 규칙을 수동으로 추가해야 합니다. (b/142601969)class
또는android:name
을 사용하여 XML에FragmentContainerView
와 함께NavHostFragment
를 추가할 때 활동의onCreate()
에findNavController()
를 사용할 수 없습니다. (b/142847973)
버전 1.2.0-rc05
2020년 1월 8일
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
및 androidx.fragment:fragment-testing:1.2.0-rc05
가 출시되었습니다. 버전 1.2.0-rc05에 포함된 커밋을 확인하세요.
버그 수정
<fragment>
태그를 사용할 때 활동을 삭제하는 동안onViewCreated()
가 잘못 호출되는 프래그먼트1.2.0-rc04
의 회귀 문제가 수정되었습니다. (b/146290333)- 이제
<fragment>
태그를 사용하여 추가된 프래그먼트가 일부 레이아웃(예: 가로 모드 레이아웃)에만 있는 경우에도 프래그먼트의 non-config가 제대로 삭제됩니다. 따라서 이러한 프래그먼트는 이제 레이아웃에 없는 경우에도 인스턴스화되는 대신CREATED
로 올바로 이동하지만 수명 주기 메서드를 통해서는 이동하지 않습니다. (b/145769287)
버전 1.2.0-rc04
2019년 12월 18일
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
및 androidx.fragment:fragment-testing:1.2.0-rc04
가 출시되었습니다. 버전 1.2.0-rc04에 포함된 커밋을 확인하세요.
버그 수정
- 시각적 문제를 피할 수 있도록
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
의 애니메이션이 조정되었습니다. (b/145468417)
버전 1.2.0-rc03
2019년 12월 4일
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
및 androidx.fragment:fragment-testing:1.2.0-rc03
가 출시되었습니다. 버전 1.2.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
- 종료 애니메이션/전환이 실행되는 동안
findFragmentById()
/findFragmentByTag()
에서 여전히 삭제된 프래그먼트를 반환하는 동작 변경사항이 수정되었습니다. (b/143982969, aosp/1167585) - 이제 포함된 활동이
onSaveInstanceState()
를 호출할 때 하위 프래그먼트가 상위 프래그먼트 전에 올바로 중지됩니다. (b/144380645) - 숨겨진 프래그먼트를 표시한 후 뷰가
INVISIBLE
로 잘못 표시되는 문제가 해결되었습니다. (b/70793925) - 프래그먼트 공유 요소 전환이 이제 회전 또는 크기가 조정된 뷰를 처리합니다. (b/142835261)
문서 업데이트
setUserVisibleHint()
관련 지원 중단이 문서로 명확히 설명되었습니다. (b/143897055)FragmentFactory
를 설정하면 하위 FragmentManager에도 영향이 있다는 것을 더 확실히 알리기 위해setFragmentFactory()
및getFragmentFactory()
에 관한 문서를 개선했습니다. (aosp/1170095)
종속 항목 변경사항
- 프래그먼트가 이제 Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
에 종속됩니다.
버전 1.2.0-rc02
2019년 11월 7일
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
및 androidx.fragment:fragment-testing:1.2.0-rc02
가 출시되었습니다. 버전 1.2.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- Kotlin에서
onCreateView()
,onViewCreated()
또는onActivityCreated()
(Fragment1.2.0-rc01
에 도입됨)의LiveData
를 관찰할 때getViewLifecycleOwner()
를 사용하기 위한 LintFix는 이제getViewLifecycleOwner()
대신 Kotlin 속성 액세스 구문viewLifecycleOwner
를 사용합니다. aosp/1143821을 참조하세요.
버전 1.2.0-rc01
2019년 10월 23일
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
및 androidx.fragment:fragment-testing:1.2.0-rc01
가 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.
새로운 기능
FragmentContainerView
는 이제android:name
외에도class
속성을 지원하며<fragment>
태그의 기능을 미러링합니다. (b/142722242)onCreateView()
,onViewCreated()
또는onActivityCreated()
의LiveData
를 관찰할 때getViewLifecycleOwner()
를 사용하는지 확인하는 새로운 린트 검사가 추가되었습니다. (b/137122478)
버그 수정
- 이제
DialogFragment
의onDismiss
및onCancel
콜백은 실행될 때 전달받은DialogInterface
가 null이 아니며getDialog()
가 null이 아닌 값을 반환한다는 것을 보장합니다. (b/141974033) - 이제
FragmentContainerView
는class
또는android:name
으로 정의된 프래그먼트를 확장의 일부로 추가하여 이후에findFragmentById()
및findFragmentByTag()
가 즉시 작동하도록 합니다. (b/142520327) - 저장 중인 상태로 인한
FragmentContainerView
의IllegalStateException
이 수정되었습니다. (b/142580713) FragmentContainerView
클래스가 난독화될 때FragmentContainerView
의UnsupportedOperationException
이 수정되었습니다. b/142657034를 참조하세요.
알려진 문제
FragmentContainerView
의class
또는android:name
속성을 통해서만 참조되는 프래그먼트는 ProGuard에 의해 자동으로 유지되지 않으므로 각 프래그먼트 클래스의 Keep 규칙을 수동으로 추가해야 합니다. 이 문제가aapt2
를 통해 수정될 때까지FragmentContainerView
로 이동하도록 제안하는 린트 규칙을 사용 중지했습니다. b/142601969를 참조하세요.
버전 1.2.0-beta02
2019년 10월 11일
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
및 androidx.fragment:fragment-testing:1.2.0-beta02
가 출시되었습니다. 버전 1.2.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
NavHostFragment
와 같은 문제 해결 사례에서 알 수 있듯이 프래그먼트의onInflate()
가FragmentContainerView
에서 적절한 속성을 받지 못하는 문제가 수정되었습니다. b/142421837을 참조하세요.
버전 1.2.0-beta01
2019년 10월 9일
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
및 androidx.fragment:fragment-testing:1.2.0-beta01
가 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
FragmentContainerView
는android:name
및 선택적android:tag
XML 속성 지원의 추가를 통해 초기 프래그먼트를 추가할 수 있습니다.<fragment>
태그와 달리FragmentContainerView
는 이면에서 내부적으로 일반FragmentTransaction
을 사용하여 초기 프래그먼트를 추가하므로FragmentContainerView
의FragmentTransaction
작업을 추가로 실행하고 레이아웃에 뷰 결합을 사용할 수 있습니다. (b/139830628, b/141177981)- 이제 프래그먼트에는
<fragment>
를FragmentContainerView
로 바꾸도록 빠른 수정을 제공하는 린트 경고가 포함됩니다. b/139830056을 참조하세요.
버그 수정
androidx.transition
을 사용할 때ClassCastException
이 수정되었습니다. (b/140680619)- Transition
1.3.0-beta01
을 사용할 때 프래그먼트는 이제onDestroyView()
를 전달하기 전에androidx.transition
전환(Fragment1.2.0-alpha03
및 Fragment1.2.0-alpha02
에서 각각 수정된 프레임워크 전환 및 애니메이션 외에도)이 완료될 때까지 기다립니다. (aosp/1119841) - Transition
1.3.0-beta01
을 사용할 때 프래그먼트는 이제 동일한 컨테이너에서 새로운 전환/애니메이션을 시작하기 전에androidx.transition
전환을 적절하게 취소합니다. (aosp/1119841) - API 17 이하에서
FragmentContainerView
사용 시 프래그먼트의 루트 뷰에서androidx.transition
전환을 사용할 때 발생하는 문제가 수정되었습니다. (b/140361893) fragment-testing
아티팩트는 이제 AndroidX Test1.2.0
에 종속되므로 최신 Espresso 3.2.0과 호환되지 않는 문제가 수정되었습니다. (b/139100149)- FragmentManager의
Log.w
사용이 삭제되었습니다. aosp/1126468을 참조하세요.
알려진 문제
NavHostFragment
와 같은 문제 해결 사례에서 알 수 있듯이 프래그먼트의onInflate()
가FragmentContainerView
에서 적절한 속성을 받지 못합니다. b/142421837을 참조하세요.
버전 1.2.0-alpha04
2019년 9월 18일
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
및 androidx.fragment:fragment-testing:1.2.0-alpha04
가 출시되었습니다. 버전 1.2.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
Fragment
의getFragmentManager()
및requireFragmentManager()
메서드가 지원 중단되었으며 프래그먼트가 추가되는 null이 아닌FragmentManager
를 반환하는 단일getParentFragmentManager()
메서드로 대체되었습니다(isAdded()
를 사용하여 호출이 안전한지 확인할 수 있음). (b/140574496)- 정적
FragmentManager.enableDebugLogging
메서드가 지원 중단되었습니다. 이제 FragmentManager는FragmentManager
태그에서Log.isLoggable()
을 준수합니다. 이에 따라 앱을 다시 컴파일하지 않고도DEBUG
또는VERBOSE
로깅을 사용 설정할 수 있습니다. (aosp/1116591)
버그 수정
- 이제 다른 프래그먼트의 이탈 애니메이션이 실행되는 동안 프래그먼트가 적절하게 소멸됩니다. (b/140574199)
- 프래그먼트가 이전에 호출하지 않았던
Activity.findViewById()
를 호출하는 문제가 수정되었습니다. aosp/1116431을 참조하세요.
버전 1.2.0-alpha03
2019년 9월 5일
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
및 androidx.fragment:fragment-testing:1.2.0-alpha03
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
FragmentContainerView
는 이제final
입니다. b/140133091을 참조하세요.
버그 수정
- 이제
FragmentContainerView
는 백 스택에서 프래그먼트를 팝할 때 그리기 순서를 올바르게 역순으로 정렬합니다. (b/139104187) - 프래그먼트를 표시하는 동시에 새 프래그먼트를 추가할 때 잘못된 애니메이션이 실행되는 문제가 수정되었습니다. (b/111659726)
- 프래그먼트는 이제
onDestroyView()
를 전달하기 전에 전환(Fragment1.2.0-alpha02
에서 수정된 애니메이션 외에도)이 완료될 때까지 기다립니다. b/138741697을 참조하세요.
버전 1.2.0-alpha02
2019년 8월 7일
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
및 androidx.fragment:fragment-testing:11.2.0-alpha02
버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
SavedStateViewModelFactory
가by viewModels()
,by activityViewModels()
,ViewModelProvider
생성자 또는ViewModelProviders.of()
를Fragment
와 함께 사용할 때 사용되는 공장 기본값입니다. (b/135716331) FragmentTransaction
의setTransition
과 함께TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
를 사용할 때 기본 애니메이션이 Android 10 기기의 활동에서 사용하는 애니메이션과 일치하도록 업데이트되었습니다. (aosp/1012812, aosp/1014730)
API 변경사항
FrameLayout
사용을 대체하는 등 동적으로 추가된 프래그먼트에 강력히 권장되는 컨테이너로FragmentContainerView
를 도입함으로써 애니메이션 z-순서 문제와 프래그먼트로의 창 인셋 전달 문제가 수정되었습니다. (b/37036000, aosp/985243, b/136494650)- 프래그먼트에 의해 확장되는 뷰에서 포함 프래그먼트를 검색하는 정적
FragmentManager.findFragment(View)
메서드가 추가되었습니다. 또한 Kotlin 확장은fragment-ktx
에서도 사용할 수 있습니다. (aosp/1090757) FragmentTransaction
에add()
및replace()
의 새 오버로드가 추가되었습니다. 이러한 오버로드는 인수의Class<? extends Fragment>
및 선택적Bundle
을 가져옵니다. 이러한 메서드에서는FragmentFactory
를 사용하여 추가할 프래그먼트의 인스턴스를 구성합니다. 또한 구체화된 유형(예:fragmentTransaction.replace<YourFragment>(R.id.container)
)을 사용하는 Kotlin 확장이fragment-ktx
에 추가되었습니다. (b/126124987)@MainThread
주석이Fragment
수명 주기 콜백에 추가되었습니다. (b/127272564)FragmentTransaction
및FragmentManager.BackStackEntry
의 탐색경로 제목 관련 API가 지원 중단되었습니다. (b/138252944)FragmentTransaction
의setTransitionStyle
메서드가 지원 중단되었습니다. aosp/1011537을 참조하세요.FragmentManager
의 많은 메서드가 더 이상abstract
가 아닙니다.FragmentManager
자체는 여전히abstract
이므로 직접 인스턴스화하거나 확장해서는 안 됩니다. 계속해서getSupportFragmentManager()
,getChildFragmentManager()
등에서 기존 인스턴스만 가져와야 합니다.
버그 수정
- Fragment
1.1.0-rc04
에서: 프래그먼트는 이제 프래그먼트에서 표시했던 연기된 전환을 올바르게 취소합니다. (b/138251858) - Fragment
1.1.0-rc03
에서: 시간 초과로postponeEnterTransition()
을 두 번 이상 호출해도 이전 시간 초과가 취소되지 않는 문제가 수정되었습니다. (b/137797118) - Fragment
1.1.0-rc02
에서: 현재 항목을 삭제할 때FragmentPagerAdapter
및FragmentStatePagerAdapter
에서 발생하는 비정상 종료 문제가 수정되었습니다. (b/137209870) - 이제 프래그먼트는
onDestroyView()
를 전달하기 전에 애니메이션이 완료될 때까지 기다립니다. (b/136110528) - 이제 상위 프래그먼트를 애니메이션 처리할 때 하위 프래그먼트와 그 하위 요소의 프래그먼트 애니메이션이 올바르게 처리됩니다. (b/116675313)
- 공유 요소 전환을 사용하고 팝과 추가 작업을 결합할 때 발생하는
NullPointerException
이 수정되었습니다. (b/120507394) - Robolectric 테스트에서
FragmentPagerAdapter
및FragmentStatePagerAdapter
를 사용할 때IllegalStateException
관련 해결 방법이 추가되었습니다. b/137201343을 참조하세요.
버전 1.2.0-alpha01
2019년 7월 2일
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
및 androidx.fragment:fragment-testing:1.2.0-alpha01
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제 FragmentManager는 프래그먼트의 뷰를 연결한 후
onViewCreated()
를 호출하기 직전에requestApplyInsets()
를 호출하므로 뷰에서 항상 올바른 인셋을 사용합니다. (b/135945162)
버그 수정
replace()
전에setPrimaryNavigationFragment()
를 사용한FragmentTransaction
을 표시할 때 발생하는NullPointerException
이 수정되었습니다. b/134673465를 참조하세요.
버전 1.1.0
버전 1.1.0
2019년 9월 5일
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
및 androidx.fragment:fragment-testing:1.1.0
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
1.0.0 이후 중요 변경사항
- fragment-testing:
fragment-testing
아티팩트는 프래그먼트를 개별적으로 테스트하기 위한FragmentScenario
클래스를 제공합니다. 자세한 내용은 앱 프래그먼트 테스트 문서를 참조하세요. - FragmentFactory: 이제
FragmentManager
에서FragmentFactory
를 설정하여 프래그먼트 인스턴스 생성을 관리하고 인수가 없는 생성자를 보유해야 하는 엄격한 요구사항을 삭제할 수 있습니다. - ViewModel의 Kotlin 속성 위임: 이제
fragment-ktx
아티팩트에는 2개의 Kotlin 속성 위임, 즉 개별 프래그먼트와 연결된 ViewModel에 액세스하기 위한by viewModels()
및 활동으로 범위가 지정된 ViewModel에 액세스하기 위한by activityViewModels()
가 포함되어 있습니다. - 최대 수명 주기: 이제
FragmentTransaction
의setMaxLifecycle()
을 호출하여 프래그먼트의 최대 수명 주기 상태를 설정할 수 있습니다. 이 함수가 이제 지원 중단된setUserVisibleHint()
를 대체합니다.FragmentPagerAdapter
및FragmentStatePagerAdapter
에는 새 생성자가 있습니다. 이 생성자를 통해 새로운 동작으로 전환할 수 있습니다. - FragmentActivity LayoutId 생성자: 이제
FragmentActivity
의 서브클래스는R.layout
ID를 사용하는FragmentActivity
의 생성자를 선택적으로 호출할 수 있으며 이 동작은onCreate()
의setContentView()
를 호출하는 대신 콘텐츠 뷰로 설정해야 하는 레이아웃을 나타냅니다. 그렇지만 서브클래스에 인수가 없는 생성자가 있어야 한다는 요구사항은 변경되지 않습니다. - Fragment LayoutId 생성자: 이제
Fragment
의 서브클래스는R.layout
ID를 사용하는Fragment
의 생성자를 선택적으로 호출할 수 있으며 이 동작은onCreateView()
를 재정의하는 대신 이 프래그먼트에 사용해야 하는 레이아웃을 나타냅니다. 확장된 레이아웃은onViewCreated()
에서 구성할 수 있습니다. - 시간 초과로 연기: 제한 시간을 사용하는
postponeEnterTransition()
의 새 오버로드가 추가되었습니다.
버전 1.1.0-rc04
2019년 8월 7일
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
및 androidx.fragment:fragment-testing:1.1.0-rc04
버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 프래그먼트는 이제 팝된 프래그먼트에 관해 연기된 전환을 올바르게 취소합니다. (b/138251858)
버전 1.1.0-rc03
2019년 7월 19일
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
및 androidx.fragment:fragment-testing:1.1.0-rc03
버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 시간 초과로
postponeEnterTransition()
을 두 번 이상 호출해도 이전 시간 초과가 취소되지 않는 문제가 수정되었습니다. (b/137797118)
버전 1.1.0-rc02
2019년 7월 17일
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
및 androidx.fragment-testing:fragment:1.1.0-rc02
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 현재 항목을 삭제할 때
FragmentPagerAdapter
및FragmentStatePagerAdapter
에서 발생하는 비정상 종료 문제가 수정되었습니다. b/137209870을 참조하세요.
버전 1.1.0-rc01
2019년 7월 2일
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
및 androidx.fragment:fragment-testing:1.1.0-rc01
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 이제 프래그먼트는 전환이 실행되는 동안
show()
또는hide()
작업을 사용할 때 공개 상태를 적절하게 업데이트합니다. (b/133385058) replace()
전에setPrimaryNavigationFragment()
를 사용한FragmentTransaction
을 표시할 때 발생하는NullPointerException
이 수정되었습니다. (b/134673465)
버전 1.1.0-beta01
2019년 6월 5일
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
및 androidx.fragment:fragment-testing:1.1.0-beta01
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 이제 중첩된 프래그먼트의
androidx.lifecycle.Lifecycle
콜백(특히STARTED
,RESUMED
,PAUSED
,STOPPED
및DESTROYED
관련)이 적절하게 중첩됩니다. (b/133497591) - 프래그먼트의
onCreate()
에 등록된OnBackPressedCallback
인스턴스가 이제 하위 FragmentManager보다 올바르게 우선 적용됩니다. (b/133175997) - 상위 프래그먼트를 대체 중일 때 하위 프래그먼트는 더 이상 애니메이션 처리되지 않습니다. (b/121017790)
- 이제
animateLayoutChanges="true"
사용 시 프래그먼트 애니메이션 및 전환이 무시되며 프래그먼트가 적절하게 제거되지 않던 문제가 수정되었습니다. b/116257087을 참조하세요.
버전 1.1.0-alpha09
2019년 5월 16일
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
및 androidx.fragment:fragment-testing:1.1.0-alpha09
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
- 이제 기본 탐색 프래그먼트가 변경될 때 프래그먼트가 새
onPrimaryNavigationFragmentChanged(boolean)
메서드에 관한 콜백을 수신합니다. (aosp/960857)
버그 수정
- 이제 상위 프래그먼트를 삭제할 때 하위 프래그먼트에 의해 팽창된 메뉴 항목이 올바르게 삭제됩니다. (b/131581013)
버전 1.1.0-alpha08
2019년 5월 7일
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
및 androidx.fragment:fragment-testing:1.1.0-alpha08
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
이 출시는 1.1.0-alpha01 ~ 1.1.0-alpha04 환경설정과 호환되지 않습니다. 이 버전의 프래그먼트를 사용할 경우 1.1.0-alpha05 환경설정으로 업그레이드하세요.
새로운 기능
- 프래그먼트가
startPostponedEnterTransition()
을 자동으로 호출한 후 시간 제한을 사용하도록postponeEnterTransition()
의 새 오버로드가 추가되었습니다. (b/120803208)
API 변경사항
- 브레이킹 체인지:
Bundle
을 사용하는FragmentFactory
instantiate
메서드(이전에 지원 중단됨)가 삭제되었습니다. (aosp/953856) - 브레이킹 체인지:
FragmentPagerAdapter
및FragmentStatePagerAdapter
에서RESUME_ONLY_CURRENT_FRAGMENT
및USE_SET_USER_VISIBLE_HINT
상수의 이름이 각각BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
및BEHAVIOR_SET_USER_VISIBLE_HINT
로 변경되었습니다. (aosp/954782)
버그 수정
setMaxLifecycle()
을 통해 수명 주기를 제한한 프래그먼트가 최종 상태에 도달하기 전에 다시 시작되지 않습니다. (b/131557151)setMaxLifecycle(Lifecycle.State.CREATED)
사용 시 프래그먼트에서 뷰가 올바르게 소멸됩니다. (aosp/954180)
버전 1.1.0-alpha07
2019년 4월 25일
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
및 androidx.fragment:fragment-testing:1.1.0-alpha07
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
FragmentTransaction
의setMaxLifecycle()
을 호출하여 프래그먼트의 최대 수명 주기 상태를 설정할 수 있습니다. 이 함수가 이제 지원 중단된setUserVisibleHint()
를 대체합니다.FragmentPagerAdapter
및FragmentStatePagerAdapter
에는 새 생성자가 있습니다. 이 생성자를 통해 새로운 동작으로 전환할 수 있습니다. b/129780800을 참조하세요.
API 변경사항
FragmentScenario
의moveToState(STARTED)
는 이제 API 24 이상인 기기에서만 호출할 수 있습니다. b/129880016을 참조하세요.
동작 변경사항
- (b/129907905)의 결과로 백 스택의 프래그먼트는 호스팅 활동이 다시 생성될 때
onCreateView()
에 관한 콜백을 가져오지 않습니다. 이제 프래그먼트가 표시 상태가 될 때만(즉, 백 스택에서 팝될 때만)onCreateView()
가 호출됩니다.
버그 수정
- XML의
<fragment>
태그와FragmentActivity
또는AppCompatActivity
의contentLayoutId
생성자를 사용할 때 발생하는 문제가 수정되었습니다. (b/129907905) - 구성이 변경된 후에 백 스택의 프래그먼트가
CREATED
이상으로 이동하지 않아 ViewModel 및 보관된 하위 프래그먼트가 제대로 처리되지 않던 문제가 수정되었습니다. (b/129593351) - 인스턴스 상태가 저장된 이후에 보관된 프래그먼트의 비동기화로 인해 발생하는
restoreSaveState
의 비정상 종료가 수정되었습니다. (b/130433793, aosp/947824) FragmentManager
에 백 스택이 있을 때 프래그먼트 수명 주기와 함께 추가된OnBackPressedCallback
이 호출되지 않던 문제가 수정되었습니다. 자세한 내용은 androidx.activity 1.0.0-alpha07을 참고하세요. (aosp/948209)- 프래그먼트가 애니메이션에
LAYER_TYPE_HARDWARE
를 더 이상 적용하지 않으므로 특별히 하드웨어 레이어 애니메이션이 필요하다면 애니메이션의 일부로 설정하세요. b/129486478을 참조하세요.
버전 1.1.0-alpha06
2019년 4월 3일
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
및 androidx.fragment:fragment-testing:1.1.0-alpha06
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제 FragmentManager에 의해 발생되는 예외 메시지에 프래그먼트의 이름이 포함됩니다. (b/67759402)
API 변경사항
- 이제
Fragment
및FragmentActivity
에는@LayoutRes int
를 사용하는 두 번째 생성자가 포함되어 있으며 이 생성자가@ContentView
로 클래스에 주석을 다는 이전 동작을 대체합니다. 이 접근 방법은 앱과 라이브러리 모듈 모두에서 적용됩니다. (b/128352521) - 이제 FragmentActivity의
onActivityResult()
가@CallSuper
로 올바르게 표시됩니다. (b/127971684) - Bundle 인수를 사용하는 FragmentFactory의
instantiate
메서드가 지원 중단되었으므로 앱은 Bundle을 사용하지 않는instantiate
의 새 오버로드를 사용해야 합니다. (b/128836103) FragmentScenario
메서드는 이제@StyleRes
로 제대로 주석이 달립니다. (aosp/924193)FragmentTabHost
가 지원 중단되었습니다. (b/127971835)- FragmentActivity의
getThemedContext()
가 삭제되었습니다. (aosp/934078)
버그 수정
- 1.1.0-alpha05에서 새로 추가되는 프래그먼트가 화면에 깜박이던 회귀 문제가 해결되었습니다. (b/129405432)
- popBackStack+replace+popBackStack 시리즈 작업 후 기본 탐색 프래그먼트가 손실되던 문제를 해결했습니다. (b/124332597)
- 프래그먼트 상태 복원 시 활동에서
@ContentView
생성자를 사용할 때 발생하던 문제가 수정되었습니다. (b/127313094) - 아직 FragmentManager에 연결되지 않은 프래그먼트로 기존 타겟 프래그먼트를 대체할 때 사용되는
setTargetFragment()
로직이 수정되었습니다. (aosp/932156)
버전 1.1.0-alpha05
2019년 3월 13일
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
및 androidx.fragment:fragment-testing:1.1.0-alpha05
가 출시되었습니다. 이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
@ContentView
주석 조회가 캐시됩니다. (b/123709449)
동작 변경사항
- 이제 다른 FragmentManager에 연결된 Fragment를 사용하여
remove()
,hide()
,show()
,detach()
,setPrimaryNavigationFragment()
를 호출하면 자동으로 실패하지 않고IllegalStateException
이 발생합니다. (aosp/904301)
버그 수정
- 이제
FragmentActivity
의onNewIntent
가@CallSuper
로 올바르게 표시됩니다. (b/124120586) getDialog().dismiss()
또는getDialog().cancel()
을 사용할 때DialogFragment
의onDismiss()
가 두 번 호출될 수 있는 문제가 수정되었습니다. (b/126563750)
버전 1.1.0-alpha04
2019년 2월 7일
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
및 androidx.fragment:fragment-testing 1.1.0-alpha04
버전이 출시되었습니다.
새로운 기능
- 확장되어야 하는 레이아웃 XML 파일을 나타낼 수 있는
@ContentView
클래스 주석 지원이onCreateView()
재정의의 대안으로 추가되었습니다.onViewCreated()
에서 관련 작업을 살펴보는 것이 좋습니다. (aosp/837619) - 이제
fragment-testing
은androidx.test:core-ktx
1.1.0 안정화 버전에 종속됩니다. (b/121209673) - 이제
FragmentScenario
와 함께openActionBarOverflowOrOptionsMenu
를 사용하여 프래그먼트 호스팅된 옵션 메뉴를 테스트할 수 있습니다. (b/121126668)
API 변경사항
@NonNull Bundle
을 반환하거나IllegalStateException
을 발생시키는requireArguments()
메서드가 추가되었습니다. (b/121196360)getLifecycle()
,getViewLifecycleOwner()
,getViewLifecycleOwnerLiveData()
는 재정의되어서는 안 되며 향후 버전에서 완료될 예정이라는 참고사항을 추가했습니다. 현재 이 메서드를 재정의하려면 기능 요청을 제출하세요. (aosp/880714)getViewModelStore()
는 재정의해서는 안 되며 향후 출시에서 완료될 예정이라는 메모가 추가되었습니다. 현재 이 메서드를 재정의하려면 기능 요청을 제출하세요. (aosp/880713)- 이전 Fragment 버전과의 바이너리 호환성 문제가 수정되었습니다. (aosp/887877, aosp/889834)
버그 수정
null
을setTargetFragment()
에 전달할 때 타겟 프래그먼트가 올바르게 삭제됩니다. (aosp/849969)onDestroy()
호출에서 또는 호출된 이후에 타겟 프래그먼트를 때때로 사용할 수 없던 문제가 수정되었습니다. (b/122312935)- 이제 DialogFragment의 onDismiss()가
onDestroy()
전에 호출됩니다. (aosp/874133, aosp/890734)
버전 1.1.0-alpha03
2018년 12월 17일
새로운 기능
- 프래그먼트는 이제
BundleSavedStateRegistryOwner
를 구현하고 새로 출시된 SavedState 라이브러리에 종속됩니다. (aosp/824380) - 포함 활동과 연결된 ViewModel을 검색하도록
by activityViewModels
Kotlin 속성 위임이 추가되었습니다. (b/119050253) ViewModelStoreOwner
를 가져오는 선택적 람다 메서드를 사용하도록by viewModels
Kotlin 속성 위임이 확장되었습니다. 이러한 확장을 통해val viewModel: MyViewModel by viewModels(::requireParentFragment)
와 같은 코드를 사용하여 상위 Fragment 또는 다른 맞춤ViewModelStoreOwner
를 전달할 수 있습니다. (b/119050253)
API 변경사항
- 이제
FragmentScenario
를 통해Theme.AppCompat
과 같은 테마를 지정할 수 있습니다. (b/119054431) 브레이킹 체인지입니다. @NonNull View
를 반환하거나IllegalStateException
을 발생시키는requireView()
메서드가 추가되었습니다. (b/120241368)@NonNull Fragment
를 반환하거나IllegalStateException
을 발생시키는requireParentFragment()
메서드가 추가되었습니다. (b/112103783)
버그 수정
- IllegalStateException 수정: 상태 저장 실패 b/120814739
- 이제 저장된 인스턴스 상태에서 복원 중인 프래그먼트는 항상 null이 아닌
Bundle
을 수신합니다. (b/119794496) - 삭제된 프래그먼트가 더 이상
Lifecycle
객체를 재사용하지 않습니다. 이는 프래그먼트가 다시 추가되어도 마찬가지입니다. (b/118880674)
버전 1.1.0-alpha02
2018년 12월 3일
새로운 기능
- 이제 FragmentScenario의 Kotlin 확장 프로그램을 사용하면
FragmentFactory
인스턴스를 전달하는 대신 Fragment 생성에 람다를 사용할 수 있습니다. (aosp/812913)
버그 수정
- 백 스택에서 중첩된 Fragment를 사용할 때 발생하는 IllegalStateException을 수정했습니다. (b/119256498)
FragmentFactory
와 함께FragmentScenario.recreate()
를 사용할 때 발생하는 비정상 종료 문제가 수정되었습니다. (aosp/820540)- Fragment를 삭제한 이후에 타겟 Fragment에 액세스할 수 없던 문제를 해결했습니다. (aosp/807634)
버전 1.1.0-alpha01
2018년 11월 5일
이 버전은 androidx.test:core API를 기반으로 빌드되는 FragmentScenario
및 fragment-testing
아티팩트의 최초 출시입니다. 자세한 내용은 Fragment 테스트 문서를 참조하세요.
새로운 기능
- Fragment를 독립적으로 테스트하기 위한 새 FragmentScenario 클래스
- 이제
FragmentManager
에서FragmentFactory
를 설정하여 새 Fragment 인스턴스를 인스턴스화하는 방법을 제어할 수 있습니다. - Fragment에서 ViewModel을 검색하기 위한 새로운
by viewModels()
Kotlin 속성 대리자가 추가되었습니다. - 대기 중인 입력 이벤트(예: 클릭)가 이제 Fragment의
onStop()
에서 취소됩니다.
API 변경사항
- Fragment API 노출 영역에서 null 허용 여부 주석을 크게 확장했습니다.
버그 수정
- LiveData 내에서 Fragment 작업이 실패하는 문제를 수정했습니다. (b/77944637)
알려진 문제
- Fragment가 FragmentManager에서 삭제된 후에는 타겟 Fragment에 액세스할 수 없습니다.
fragment-testing
은 정확한androidx.test:core:1.0.0
대신androidx.test:core:1.0.0-beta01
에 종속됩니다.