프래그먼트

활동 내에서 호스팅되는 여러 개의 독립적인 화면으로 앱을 분할합니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2021년 9월 1일 1.3.6 - - 1.4.0-alpha08

종속 항목 선언

Fragment의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
    def fragment_version = "1.3.6"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.3.6"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 의견을 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.4.0

버전 1.4.0-alpha08

2021년 9월 1일

androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08androidx.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-alpha07androidx.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-alpha06androidx.fragment:fragment-testing:1.4.0-alpha06이 출시되었습니다. 버전 1.4.0-alpha06에 포함된 커밋을 확인하세요.

버그 수정

  • FragmentTransaction 복원 중에 IllegalStateException으로 표시되거나, 나타난 프래그먼트의 두 번째 사본으로 표시되는 백 스택 간에 빠르게 전환할 때 여러 백 스택에서 발생하던 문제를 해결했습니다. (I9039f)
  • 상태가 복원된 후 FragmentManager에서 이전에 saveBackStack()을 통해 저장된 상태 사본을 보유하던 문제가 해결되었습니다. (Ied212)
  • 특히 show(FragmentTransaction, String) 메서드를 통해 DialogFragment를 추가하면 상태가 저장된 후 DialogFragmentdismissAllowingStateLoss() 메서드를 호출할 때 이 메서드가 더 이상 다운되지 않습니다. (I84422)

버전 1.4.0-alpha05

2021년 7월 21일

androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05androidx.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)

종속 항목 업데이트

버전 1.4.0-alpha04

2021년 6월 30일

androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04androidx.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-alpha03androidx.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)

동작 변경사항

  • FragmentContainerViewfitsSystemWindows 호출 제한이 취소되었습니다. 더 이상 이로 인해 앱이 다운되지 않습니다. (6b8ddd, b/190622202)

버그 수정

  • Fragment 1.3.5 이상: aosp/1679887에 의해 Fragment 1.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-alpha02androidx.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)
    • 이제 SetUserVisibleHintViolationsetUserVisibleHint()로 전달되는 부울 값을 포함합니다. (I00585, b/187871150)
    • 이제 FragmentTagUsageViolation<fragment> 태그가 프래그먼트가 확장하려고 시도한 ViewGroup이 포함됩니다. (I5dbbc, b/187871150)
    • 이제 FragmentReuseViolation에 위반을 일으킨 Fragment의 이전 인스턴스의 고유 ID가 포함됩니다. (I0544d, b/187871150)
    • 이제 RetainInstanceUsageViolation은 추상 클래스이며 두 가지 경우의 위반 유형을 나타내는 두 개의 서브클래스 SetRetainInstanceUsageViolationGetRetainInstanceUsageViolation을 가집니다. (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-alpha01androidx.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
    
  • 프래그먼트 전환 시 테마에서 가져온 표준 활동 전환 애니메이션을 사용 설정할지 지정하기 위해 FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}가 추가되었습니다. (I46652)

여러 백 스택

FragmentManageraddToBackStack()을 사용한 프래그먼트 트랜잭션으로 구성된 백 스택을 유지합니다. 이를 통해 개발자는 프래그먼트가 적절히 상태를 복원할 수 있도록 프래그먼트로 상태 저장 메커니즘을 사용하여 트랜잭션을 팝하고 이전 상태로 돌아갈 수 있습니다.

이 출시는 두 가지 새로운 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 변경사항

새로운 린트 검사

  • 이제 DialogFragment 내에서 LayoutInflater.from(Context)를 사용하면 UseGetLayoutInflater 린트 검사에서 경고가 표시됩니다. 개발자는 LayoutInflater에 적합한 항목을 가져오려면 항상 대화상자 프래그먼트의 getLayoutInflater() 메서드를 사용해야 합니다. (#156, b/170781346)
  • 이제 DialogFragmentonCreateDialog() 메서드에서 setOnCancelListener 또는 setOnDismissListener를 호출하면 DialogFragmentCallbacksDetector 린트 검사에서 경고가 표시됩니다. 이러한 리스너는 DialogFragment 자체 소유이므로 개발자는 콜백을 수신하려면 onCancel()onDismiss()를 재정의해야 합니다. (#171, b/181780047, b/187524311)

버그 수정

  • Fragment 1.3.4에서: ViewModelProvider와 함께 ViewTreeViewModelStoreOwner.get() API를 사용하거나 프래그먼트 내에서 viewModel()의 Jetpack Compose 메서드와 함께 사용할 때 Fragment 1.3.3에서 발생하는 회귀 문제가 해결되었습니다. 이러한 사용 사례에서는 이제 getDefaultViewModelProviderFactory()를 재정의하는 경우 프래그먼트에서 제공하는 ViewModelProvider.Factory를 올바르게 사용합니다(Hilt를 사용할 때 @AndroidEntryPoint로 주석 처리된 프래그먼트에서 하는 것처럼). 개발자가 이 메서드를 재정의하지 않으면 Fragment의 뷰와 함께 상태를 저장하고 복원하는 SavedStateViewModelFactory가 기본 팩토리로 생성됩니다. (I5cbfa, b/186097368)
  • Fragment 1.3.4에서: API 29에서 FragmentContainerView를 사용할 경우 인셋은 더 이상 무기한으로 전달되지 않으며, BottomNavigationBarFloatingActionButton 인스턴스의 문제를 해결합니다. (I1bb78, b/186012452)
  • Fragment 1.3.4에서: 이제 프로세스 중단 후 프래그먼트 결과 번들에서 Parcelable를 가져올 수 있습니다. (I65932, b/187443158)
  • Fragment 1.3.4에서: ViewGroup에서 공유 요소 전환을 실행할 때 ViewGroup의 transitionGroup이 false로 설정되어 있으면 이제 제대로 전환이 이루어집니다. (I99675)

외부 기여

버전 1.3.6

버전 1.3.6

2021년 7월 21일

androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6androidx.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)

종속 항목 업데이트

버전 1.3.5

버전 1.3.5

2021년 6월 16일

androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5androidx.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

버전 1.3.4

2021년 5월 18일

androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4androidx.fragment:fragment-testing:1.3.4가 출시되었습니다. 버전 1.3.4에 포함된 커밋을 확인하세요.

버그 수정

  • ViewModelProvider와 함께 ViewTreeViewModelStoreOwner.get() API를 사용하거나 Hilt를 사용하여 Fragment 내에서 viewModel()의 Jetpack Compose 메서드와 사용할 때 Fragment 1.3.3에서 발생하는 회귀 문제가 해결되었습니다. 이러한 사용 사례는 이제 getDefaultViewModelProviderFactory()를 재정의하면 Fragment에서 제공하는 ViewModelProvider.Factory를 정확하게 사용합니다(@AndroidEntryPoint로 주석 처리된 Fragment처럼). 개발자가 이 메서드를 재정의하지 않으면 Fragment의 뷰와 함께 상태를 저장하고 복원하는 SavedStateViewModelFactory가 기본 팩토리로 생성됩니다. (I5cbfa, b/186097368)
  • API 29에서 FragmentContainerView를 사용할 경우 인셋은 더 이상 무기한으로 전달되지 않으며, BottomNavigationBarFloatingActionButton 인스턴스의 문제를 해결합니다. (I1bb78, b/186012452)
  • 이제 프로세스 중단 후 프래그먼트 결과 번들에서 Parcelable를 가져올 수 있습니다. (I65932, b/187443158)
  • ViewGroup에서 공유 요소 전환을 실행할 때 ViewGroup의 transitionGroup이 false로 설정되어 있으면 이제 제대로 전환이 이루어집니다. (I99675)

버전 1.3.3

버전 1.3.3

2021년 4월 21일

androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3androidx.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

버전 1.3.2

2021년 3월 24일

androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2androidx.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

버전 1.3.1

2021년 3월 10일

androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1androidx.fragment:fragment-testing:1.3.1이 출시되었습니다. 버전 1.3.1에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 DialogFragment 내 대화상자에서 DecorView를 통해 ViewTree 소유자에 액세스할 수 있으므로 DialogFragmentComposeView와 함께 사용할 수 있습니다. (Ib9290, b/180691023)

버그 수정

  • FragmentContainerView를 사용하여 이미 RESUMED 활동으로 확장된 프래그먼트가 이제 구성 변경 후 제대로 표시됩니다. (Ie14c8, b/180538371)
  • 프래그먼트 toString() 끝에 더 이상 추가 } 기호가 없습니다. (I54705, b/177761088)
  • FragmentActivity의 재정의된 메서드가 이제 기본 메서드 javaDoc을 제대로 상속합니다. (I736ce, b/139548782)
  • setFragmentResultsetFragmentResultListener의 문서에서 더 이상 nullable을 허용하지 않음을 반영하도록 매개변수 문서를 업데이트했습니다. (I990ba, b/178348386)

새로운 상태 관리자 버그 수정

  • mFocusedView로 인해 발생한 프래그먼트의 메모리 누수 문제를 수정했습니다. (Ib4e9e, b/179925887)
  • 이제 프래그먼트가 트랜잭션 표시/숨기기를 사용할 때 onCreateOptionsMenu를 제대로 호출합니다. (I8bce8, b/180255554)
  • 프래그먼트가 배치되기 전에 시작하는 전환이 있는 하위 프래그먼트가 이제 RESUMED에 제대로 도달합니다. (Ic11e6, b/180825150)
  • 이제 <fragment> 태그를 사용하여 확장된 프래그먼트가 항상 RESUMED로 이동합니다. (I452ac, I9fa49)

종속 항목 업데이트

버전 1.3.0

버전 1.3.0

2021년 2월 10일

androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0androidx.fragment:fragment-testing:1.3.0이 출시되었습니다. 버전 1.3.0에 포함된 커밋을 확인하세요.

1.2.0 이후 주요 변경사항

  • 새 상태 관리자: FragmentManager내부 기능을 대대적으로 재작성하여 수명 주기 이벤트, 애니메이션, 전환 전달과 연기된 프래그먼트 처리 방식에 관한 여러 문제를 해결했습니다.
  • Activity Result API 통합: Fragment의 메서드를 재정의하지 않고 startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() 흐름을 처리하도록 Activity 1.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: FragmentActivityFragmentonAttachFragment() 콜백이 지원 중단되었습니다. 더 유연한 대안을 제공하기 위해 새 FragmentOnAttachListener가 추가되었습니다. onAttachFragment()를 테스트 가능한 별도의 리스너에 위임하고 직계 하위 FragmentManager 이외의 FragmentManager에 리스너를 추가하는 작업을 지원할 수 있습니다.

  • FragmentScenario 개선사항: fragment-testing 아티팩트의 FragmentScenario 클래스를 Kotlin으로 재작성하여 다음과 같이 개선했습니다.

    • 이제 FragmentScenariomoveToState()를 구현하기 위해 setMaxLifecycle()을 사용하여 모든 API 수준에서 일관된 동작을 보장하고 기본 Activity에서 Fragment의 상태를 분리합니다.
    • 이제 FragmentScenario는 각 Lifecycle.State로 처음 이동하기 전에 프래그먼트 상태의 어설션을 지원하도록 초기 Lifecycle.State 설정을 지원합니다.
    • 이제 값을 반환할 수 있는 Kotlin의 구체화된 확장 메서드인 withFragment의 형태로 onFragmentFragmentScenario API에 대한 대안이 마련되었습니다. 특히, 특정 블록에서 발생한 예외가 다시 발생합니다.
  • ViewTree 지원: 이제 FragmentLifecycle 2.3.0SavedState 1.1.0에 추가된 ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View)ViewTreeSavedStateRegistryOwner API를 지원하여 Fragment를 Fragment 내에서 View를 사용할 때 프래그먼트의 뷰 수명 주기에 연결된 SavedStateRegistryOwner, LifecycleOwnerViewModelStoreOwner로 반환합니다.

  • TRANSIT_ 애니메이션 변경사항: 프래그먼트 기본 효과인 TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADE가 이제 Animation 대신 Animator를 사용합니다. 이러한 애니메이터를 빌드하는 데 사용된 리소스가 이제 공개되지 않습니다.

  • setRetainInstance() 지원 중단: Fragment의 setRetainInstance() 메서드가 지원 중단되었습니다. ViewModels가 도입되면서 개발자는 활동, 프래그먼트, 탐색 그래프와 연결할 수 있는 상태를 유지하기 위한 특정 API를 갖게 됩니다. 이를 통해 개발자는 보존된 상태가 아닌 일반 상태의 Fragment를 사용하고 별도로 보관하고자 하는 특정 상태를 유지할 수 있습니다. 이를 통해 단일 생성의 유용한 속성을 유지하면서 누수의 일반적인 원인을 피하고 보관되는 상태의 파괴를 방지할 수 있습니다(소위 수신하는 ViewModelonCleared() 콜백 생성자).

  • ViewPager 1 어댑터 지원 중단: ViewPager2 1.0.0이 출시되면서 ViewPager와 상호작용하는 FragmentPagerAdapterFragmentStatePagerAdapter 클래스가 지원 중단되었습니다. ViewPager에서 ViewPager2로 이전을 참고하세요.

버전 1.3.0-rc02

2021년 1월 27일

androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02androidx.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)

새로운 상태 관리자 버그 수정

  • LifecycleCREATED에 도달하기 전에 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-rc01androidx.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-beta02androidx.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-beta01androidx.fragment:fragment-testing:1.3.0-beta01가 출시되었습니다. 버전 1.3.0-beta01에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 setMaxLifecycle()이 프래그먼트가 CREATED로 이동되지 않은 한 Lifecycle 상태를 INITIALIZING으로 설정하는 것을 지원합니다. (b/159662173)

API 변경사항

동작 변경사항

  • 프래그먼트 리소스 파일이 올바르게 비공개로 설정되었습니다. (aosp/1425237)

버그 수정

  • <fragment> 태그를 사용하여 확장된 프래그먼트가 이제 STARTED로 이동하기 전에 컨테이너에 뷰가 추가될 때까지 올바르게 대기합니다. (I02f4c)
  • 표시된 다음 setMaxLifecycle()CREATED로 설정한 프래그먼트가 이제 종료 효과를 올바르게 실행합니다. (b/165822335)
  • 백 스택에 추가되지 않은 분리된 프래그먼트를 삭제해도 더 이상 메모리 누수가 발생하지 않습니다. 니클라스 안스만 기어츠 씨께 감사드립니다. (b/166489383)
  • 이제 활성 프래그먼트에 항상 null이 아닌 FragmentManager가 있으며 null이 아닌 FragmentManager가 있는 프래그먼트는 항상 활성 상태로 간주됩니다. (aosp/1422346)
  • 프래그먼트 기본 효과 TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_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-alpha08androidx.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 효과를 재정의하거나 개별 프래그먼트의 AnimatorTransition이 모두 실행되는 경우를 방지합니다. (b/149569323)
  • 이제 마지막 진입 프래그먼트와 첫 번째 이탈 프래그먼트만이 아니라 진입 및 이탈하는 모든 프래그먼트의 enterTransitionexitTranstion이 실행됩니다. (b/149344150)
  • 연기된 프래그먼트가 더 이상 CREATED 상태에서 중단되지 않고 대신 다른 프래그먼트와 함께 STARTED로 이동합니다. (b/129035555)
  • 연기되고 재정렬된 트랜잭션과 재정렬되지 않은 트랜잭션을 혼합할 때 FragmentManager가 순서에 상관없이 작업을 실행하는 문제가 수정되었습니다. (b/147297731)
  • 여러 프래그먼트를 동시에 표시하는 경우 프래그먼트를 연기할 때 중간 프래그먼트가 일시적으로 표시되는 문제가 더 이상 발생하지 않습니다. (b/37140383)
  • 이제 FragmentManageronAttachFragment() 콜백 내에서 findFragmentById() 또는 findFragmentByTag()를 호출할 때 올바른 프래그먼트를 반환합니다. (b/153082833)
  • 다른 프래그먼트를 대체하는 프래그먼트가 연기될 때 이 프래그먼트는 제거되는 프래그먼트에서 onCreateView()를 더 이상 호출하지 않습니다. (b/143915710)
  • 이제 프레임워크 Transition과 AndroidX Transition 인스턴스를 결합하려고 할 때 오류 메시지에 잘못된 전환이 있는 프래그먼트가 표시됩니다. (b/155574969)

동작 변경사항

  • 이제 프래그먼트의 onCreate() 수명 주기 메서드에서 ActivityResultLauncherlaunch()를 호출할 수 있습니다. (b/161464278)
  • onCreate() 이후에 registerForActivityResult()를 호출하는 경우 이제 예외가 발생하여 이 호출이 허용되지 않음을 나타냅니다(이전에는 구성 변경 후에 결과를 전달하지 않았으며 이에 대한 알림도 표시되지 않았음). (b/162255449)
  • 이제 FragmentActivityActivity 1.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-alpha07androidx.fragment:fragment-testing:1.3.0-alpha07가 출시되었습니다. 버전 1.3.0-alpha07에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 FragmentScenario에서 항상 Fragment를 RESUMED 상태로 이동하는 대신 초기 수명 주기 상태를 CREATED, STARTED 또는 RESUMED로 설정할 수 있습니다. (b/159662750)
  • 값을 반환할 수 있는 Kotlin의 구체화된 확장 메서드인 withFragment의 형태로 onFragmentFragmentScenario API에 대한 대안을 추가했습니다. 특히, 특정 블록에서 발생한 예외가 다시 발생합니다. (b/158697631)

동작 변경사항

  • 이제 FragmentScenariomoveToState()를 구현하기 위해 setMaxLifecycle()을 사용하여 모든 API 수준에서 일관된 동작을 보장하고 기본 Activity에서 Fragment의 상태를 분리합니다. (b/156527405)
  • 이제 ViewTreeSavedStateRegistryOwner에서 반환하는 SavedStateRegistryOwner는 프래그먼트 뷰의 수명 주기에 연결됩니다. 이렇게 하면, 프래그먼트 뷰와 동시에 상태가 저장되고 복원됩니다. (b/158503763)

버그 수정

  • 이제 프래그먼트는 인셋 요청이 삭제되는 경우를 방지하기 위해 ViewCompat.requestApplyInsets()를 호출하기 전에 프래그먼트 뷰가 연결될 때까지 대기합니다. (b/158095749)
  • 이제 clearFragmentResultListener를 호출하면 수명 주기 관찰자가 적절히 삭제됩니다. (b/159274993)

Version 1.3.0-alpha06

2020년 6월 10일

androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06androidx.fragment:fragment-testing:1.3.0-alpha06가 출시되었습니다. 버전 1.3.0-alpha06에 포함된 커밋을 확인하세요.

새로운 기능

  • FragmentActivityFragmentonAttachFragment() 콜백이 지원 중단되었습니다. 더 유연한 대안을 제공하려고 새 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-alpha05androidx.fragment:fragment-testing:1.3.0-alpha05가 출시되었습니다. 버전 1.3.0-alpha05에 포함된 커밋을 확인하세요.

새로운 기능

API 변경사항

  • 이제 setFragmentResult()setFragmentResultListener() API는 null이 아닌 BundleFragmentResultListener를 각각 사용합니다. 이전에 설정한 결과 또는 리스너를 명시적으로 삭제하려면 새 clearFragmentResult()clearFragmentResultListener() 메서드를 사용하세요. (b/155416778)
  • 람다를 사용하는 setFragmentResultListener() Kotlin 확장 프로그램이 이제 inline으로 표시됩니다. (b/155323404)

동작 변경사항

  • 이전에 지원 중단된 FragmentstartActivityForResult(), 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-alpha04androidx.fragment:fragment-testing:1.3.0-alpha04가 출시되었습니다. 버전 1.3.0-alpha04에 포함된 커밋을 확인하세요.

새로운 기능

  • FragmentManager의 새 API를 통해 두 프래그먼트 간에 결과를 전달하는 기능이 추가되었습니다. 이는 탐색의 계층 구조 프래그먼트(상위/하위), DialogFragment 및 Navigation의 프래그먼트에서 작동하며 결과가 STARTED 이상인 경우에만 프래그먼트로 전송되도록 합니다. (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-alpha03androidx.fragment:fragment-testing:1.3.0-alpha03가 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • FragmentprepareCall 메서드는 현재 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)
  • Fragment1.2.4에서: 수명 주기와 뷰 수명 주기가 항상 동기화되므로 observe 호출 시 this 또는 viewLifecycleOwner를 안전하게 사용할 수 있도록 DialogFragment 클래스에서 FragmentLiveDataObserve 린트 규칙이 사용 중지되었습니다. (b/151765086)

종속 항목 변경사항

  • 프래그먼트는 Activity 1.2.0-alpha03에 따라 달라지며, 이는 Activity 1.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-alpha02androidx.fragment:fragment-testing:1.3.0-alpha02가 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.

새로운 기능

  • 플로 테스트를 위한 후크를 제공하는 것에 더해 프래그먼트 내 메서드를 재정의하지 않고 startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() 플로를 처리하기 위해 활동 1.2.0-alpha02에 도입된 ActivityResultRegistry API 지원이 추가되었습니다. 업데이트된 활동에서 결과 가져오기를 참조하세요. (b/125158199)

API 변경사항

  • DialogFragment는 이제 onCreateView()가 기본적으로 확장해야 하는 레이아웃을 표시하는 @LayoutRes를 가져오는 생성자를 제공합니다. (b/150327080)
  • onActivityCreated() 메서드가 지원 중단되었습니다. 프래그먼트의 뷰를 터치하는 코드는 onViewCreated()(onActivityCreated() 직전에 호출됨)에서 실행되어야 하며 다른 초기화 코드는 onCreate()에 있어야 합니다. 활동 onCreate()가 완료되었을 때 콜백을 받으려면 LifeCycleObserveronAttach() 내 활동의 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-alpha01androidx.fragment:fragment-testing:1.3.0-alpha01가 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

API 변경사항

  • Fragment의 setRetainInstance() 메서드가 지원 중단되었습니다. ViewModels가 도입되면서 개발자는 활동, 프래그먼트, 탐색 그래프와 연결할 수 있는 상태를 유지하기 위한 특정 API를 갖게 됩니다. 이를 통해 개발자는 보존된 상태가 아닌 일반 상태의 Fragment를 사용하고 별도로 보관하고자 하는 특정 상태를 유지할 수 있습니다. 이를 통해 단일 생성의 유용한 속성을 유지하면서 누수의 일반적인 원인을 피하고 보관되는 상태의 파괴를 방지할 수 있습니다(소위 수신하는 ViewModelonCleared() 콜백 생성자). (b/143911815)
  • ViewPager2 1.0.0의 출시로 ViewPager와 상호작용하는 FragmentPagerAdapterFragmentStatePagerAdapter 클래스가 지원 중단되었습니다. ViewPager에서 ViewPager2로 이전을 참조하세요. (b/145132715)

버그 수정

  • 이제 Fragment ProGuard 규칙이 모든 Fragment 인스턴스가 아닌 사용된 기본 생성자 Fragment 클래스만 올바르게 유지하여 Fragment 1.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.5androidx.fragment:fragment-testing:1.2.5가 출시되었습니다. 버전 1.2.5에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 프래그먼트의 수명 주기 동작을 미러링하여 onSaveInstanceState()가 호출되기 전에 프래그먼트의 getViewLifecycleOwner()가 중지됩니다. 이전에는 Fragment 1.3.0-alpha04에서 출시되었습니다. (b/154645875)
  • 이제 프래그먼트에서 setMenuVisibility(false)를 호출하면 하위 프래그먼트에서 제공하는 메뉴의 공개 상태가 올바르게 변경됩니다. 이전에는 Fragment 1.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.4androidx.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.3androidx.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.2androidx.fragment:fragment-testing:1.2.2가 출시되었습니다. 버전 1.2.2에 포함된 커밋을 확인하세요.

새로운 린트 검사

  • 린트는 onCreateView(), onViewCreated(), onActivityCreated()에서 OnBackPressedDispatcher를 호출하기 위해 LifecycleOwnerviewLifecycleOwner을 사용하도록 제안합니다. (b/142117657)
  • fragment-testing 아티팩트를 사용할 때 올바른 debugImplementation을 사용하고 있는지 확인하는 새로운 린트 검사가 추가되었습니다. (b/141500106)
  • 이제 Fragment에서 연결된 require___() 메서드를 사용하여 getrequire 등가물을 포함하는 모든 Fragment API에 대해 checkNotNull(get___()), requireNonNull(get___()) 또는 get___()!! 대신 보다 자세한 오류 메시지를 제공합니다. (aosp/1202883)

버그 수정

  • R8 경고를 피하기 위해 Fragment ProGuard 파일을 수정했습니다. (b/148963981)
  • observelivedata-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.1androidx.fragment:fragment-testing:1.2.1가 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 Class 인스턴스(또는 Kotlin 구체화된 버전)를 사용하는 addreplace 메서드를 통해 추가된 프래그먼트는 ProGuard에서 보관하는 기본 생성자를 유지합니다. (b/148181315)
  • FragmentStatePagerAdapterFragmentPagerAdapter는 더 이상 finishUpdate() 실행 시 FragmentManager에서 발생시키는 예외를 포착하지 않습니다. (aosp/1208711)
  • FragmentManager.findFragment()<fragment> 태그를 통해 추가된 프래그먼트에서 작동하지 않는 문제가 해결되었습니다. (b/147784323)
  • 이제 <fragment> 태그를 사용하여 확장된 프래그먼트는 항상 레이아웃에서 onCreate() 전에 onInflate()를 호출합니다. (aosp/1215856)
  • 활동이 이미 파괴된 경우 FragmentManager 인스턴스에서 toString()을 호출해도 NullPointerException을 야기하지 않습니다. (b/148189412)

종속 항목 변경사항

버전 1.2.0

버전 1.2.0

2020년 1월 22일

androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0androidx.fragment:fragment-testing:1.2.0가 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.

1.1.0 이후 중요 변경사항

  • FragmentContainerView: FragmentContainerViewFrameLayout 또는 다른 레이아웃 사용을 대체하여 동적으로 추가된 프래그먼트에 강력히 권장되는 컨테이너입니다. <fragment> 태그와 동일한 class, android:name 및 선택적 android:tag도 지원하지만 일반 FragmentTransaction을 사용하여 <fragment>에서 사용하는 맞춤 코드 경로 대신 이 초기 프래그먼트를 추가합니다.
  • onDestroyView() 타이밍: 프레임워크는 이제 onDestroyView()을 호출하기 전에 종료 애니메이션, 종료 프레임워크 전환 및 종료 AndroidX 전환(전환 1.3.0을 사용하는 경우)이 완료될 때까지 기다립니다.
  • 클래스 기반 add()replace(): FragmentTransactionadd()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() 지원 중단: getFragmentManager()requireFragmentManager() 메서드가 지원 중단되었으며 프래그먼트가 추가되는 null이 아닌 FragmentManager를 반환하는 단일 getParentFragmentManager() 메서드로 대체되었습니다(isAdded()를 사용하여 호출이 안전한지 확인할 수 있음).
  • FragmentManager.enableDebugLogging() 지원 중단: 정적 FragmentManager.enableDebugLogging 메서드가 지원 중단되었습니다. 이제 FragmentManager는 FragmentManager 태그에서 Log.isLoggable()을 준수합니다. 이에 따라 앱을 다시 컴파일하지 않고도 DEBUG 또는 VERBOSE 로깅을 사용 설정할 수 있습니다.

알려진 문제

  • FragmentContainerViewclass 또는 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-rc05androidx.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-rc04androidx.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-rc03androidx.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를 설정하면 하위 FragmentManagers에도 영향이 있다는 것을 더 잘 나타내도록 setFragmentFactory()getFragmentFactory()에 관한 문서가 개선되었습니다. (aosp/1170095 참조)

종속 항목 변경사항

  • 프래그먼트가 이제 Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03에 종속됩니다.

버전 1.2.0-rc02

2019년 11월 7일

androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02androidx.fragment:fragment-testing:1.2.0-rc02가 출시되었습니다. 버전 1.2.0-rc02에는 이러한 커밋이 포함되어 있습니다.

버그 수정

  • Kotlin에서 onCreateView(), onViewCreated() 또는 onActivityCreated()(Fragment 1.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-rc01androidx.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을 참조하세요.

버그 수정

  • 이제 DialogFragmentonDismissonCancel 콜백은 실행될 때 전달받은 DialogInterface가 null이 아니며 getDialog()가 null이 아닌 값을 반환한다는 것을 보장합니다. (b/141974033)
  • 이제 FragmentContainerViewclass 또는 android:name으로 정의된 프래그먼트를 확장의 일부로 추가하여 이후에 findFragmentById()findFragmentByTag()가 즉시 작동하도록 합니다. (b/142520327)
  • 저장 중인 상태로 인한 FragmentContainerViewIllegalStateException이 수정되었습니다. (b/142580713)
  • FragmentContainerView 클래스가 난독화될 때 FragmentContainerViewUnsupportedOperationException이 수정되었습니다. b/142657034를 참조하세요.

알려진 문제

  • FragmentContainerViewclass 또는 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-beta02androidx.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-beta01androidx.fragment:fragment-testing:1.2.0-beta01가 출시되었습니다. 버전 1.2.0-beta01에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • FragmentContainerView에서는 android:name 및 선택적 android:tag XML 속성 지원의 추가를 통해 초기 프래그먼트 추가를 위한 지원이 추가되었습니다. <fragment> 태그와 달리 FragmentContainerView는 이면에서 내부적으로 일반 FragmentTransaction을 사용하여 초기 프래그먼트를 추가하므로 FragmentContainerViewFragmentTransaction 작업을 추가로 실행하고 레이아웃에 뷰 결합을 사용할 수 있습니다. (b/139830628, b/141177981)
  • 이제 프래그먼트에는 <fragment>FragmentContainerView로 바꾸도록 빠른 수정을 제공하는 린트 경고가 포함됩니다. b/139830056을 참조하세요.

버그 수정

  • androidx.transition을 사용할 때 ClassCastException이 수정되었습니다. (b/140680619)
  • Transition 1.3.0-beta01을 사용할 때 프래그먼트는 이제 onDestroyView()를 전달하기 전에 androidx.transition 전환(Fragment 1.2.0-alpha03Fragment 1.2.0-alpha02에서 각각 수정된 프레임워크 전환 및 애니메이션 외에도)이 완료될 때까지 기다립니다. (aosp/1119841)
  • Transition 1.3.0-beta01을 사용할 때 프래그먼트는 이제 동일한 컨테이너에서 새로운 전환/애니메이션을 시작하기 전에 androidx.transition 전환을 적절하게 취소합니다. (aosp/1119841)
  • API 17 이하에서 FragmentContainerView 사용 시 프래그먼트의 루트 뷰에서 androidx.transition 전환을 사용할 때 발생하는 문제가 수정되었습니다. (b/140361893)
  • fragment-testing 아티팩트는 이제 AndroidX 테스트 1.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-alpha04androidx.fragment:fragment-testing:1.2.0-alpha04가 출시되었습니다. 버전 1.2.0-alpha04에는 이러한 커밋이 포함되어 있습니다.

API 변경사항

  • FragmentgetFragmentManager()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-alpha03androidx.fragment:fragment-testing:1.2.0-alpha03가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

API 변경사항

  • FragmentContainerView는 이제 final입니다. b/140133091을 참조하세요.

버그 수정

  • 이제 FragmentContainerView는 백 스택에서 프래그먼트를 삭제할 때 그리기 순서를 올바르게 반대로 바꿉니다. (b/139104187)
  • 프래그먼트를 표시하는 동시에 새 프래그먼트를 추가할 때 잘못된 애니메이션이 실행되는 문제가 수정되었습니다. (b/111659726)
  • 프래그먼트는 이제 onDestroyView()를 전달하기 전에 전환(Fragment 1.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-alpha02androidx.fragment:fragment-testing:11.2.0-alpha02 버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 SavedStateViewModelFactoryby viewModels(), by activityViewModels(), ViewModelProvider 생성자 또는 ViewModelProviders.of()Fragment와 함께 사용할 때 사용되는 공장 기본값입니다. (b/135716331)
  • FragmentTransactionsetTransition과 함께 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)
  • FragmentTransactionadd()replace()의 새 오버로드가 추가되었습니다. 이러한 오버로드는 인수의 Class<? extends Fragment> 및 선택적 Bundle을 가져옵니다. 이러한 메서드에서는 FragmentFactory를 사용하여 추가할 프래그먼트의 인스턴스를 구성합니다. 또한 구체화된 유형(예: fragmentTransaction.replace<YourFragment>(R.id.container))을 사용하는 Kotlin 확장이 fragment-ktx에 추가되었습니다. (b/126124987)
  • @MainThread 주석이 Fragment 수명 주기 콜백에 추가되었습니다. (b/127272564)
  • FragmentTransactionFragmentManager.BackStackEntry의 탐색경로 제목 관련 API가 지원 중단되었습니다. (b/138252944)
  • FragmentTransactionsetTransitionStyle 메서드가 지원 중단되었습니다. 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에서: 현재 항목을 삭제할 때 FragmentPagerAdapterFragmentStatePagerAdapter에서 발생하는 비정상 종료 문제가 수정되었습니다. (b/137209870)
  • 이제 프래그먼트는 onDestroyView()를 전달하기 전에 애니메이션이 완료될 때까지 기다립니다. (b/136110528)
  • 이제 상위 프래그먼트를 애니메이션 처리할 때 하위 프래그먼트와 종속 항목의 프래그먼트 애니메이션이 올바르게 처리됩니다. (b/116675313)
  • 공유 요소 전환을 사용하고 팝업과 추가 작업을 결합할 때의 NullPointerException이 수정되었습니다. (b/120507394)
  • Robolectric 테스트에서 FragmentPagerAdapterFragmentStatePagerAdapter를 사용할 때 IllegalStateException 관련 해결 방법이 추가되었습니다. b/137201343을 참조하세요.

버전 1.2.0-alpha01

2019년 7월 2일

androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01androidx.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.0androidx.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()가 포함되어 있습니다.
  • 최대 수명 주기: 이제 FragmentTransactionsetMaxLifecycle()을 호출하여 프래그먼트의 최대 수명 주기 상태를 설정할 수 있습니다. 이 함수가 이제 지원 중단된 setUserVisibleHint()를 대체합니다. FragmentPagerAdapterFragmentStatePagerAdapter에는 새 생성자가 있습니다. 이 생성자를 통해 새로운 동작으로 전환할 수 있습니다.
  • 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-rc04androidx.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-rc03androidx.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-rc02androidx.fragment-testing:fragment:1.1.0-rc02가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 현재 항목을 삭제할 때 FragmentPagerAdapterFragmentStatePagerAdapter에서 발생하는 비정상 종료 문제가 수정되었습니다. b/137209870을 참조하세요.

버전 1.1.0-rc01

2019년 7월 2일

androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01androidx.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-beta01androidx.fragment:fragment-testing:1.1.0-beta01가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 이제 중첩된 프래그먼트의 androidx.lifecycle.Lifecycle 콜백(특히 STARTED, RESUMED, PAUSED, STOPPEDDESTROYED 관련)이 적절하게 중첩됩니다. (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-alpha09androidx.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-alpha08androidx.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
  • 브레이킹 체인지: FragmentPagerAdapterFragmentStatePagerAdapter에서 RESUME_ONLY_CURRENT_FRAGMENTUSE_SET_USER_VISIBLE_HINT 상수의 이름이 각각 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENTBEHAVIOR_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-alpha07androidx.fragment:fragment-testing:1.1.0-alpha07가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 FragmentTransactionsetMaxLifecycle()을 호출하여 프래그먼트의 최대 수명 주기 상태를 설정할 수 있습니다. 이 함수가 이제 지원 중단된 setUserVisibleHint()를 대체합니다. FragmentPagerAdapterFragmentStatePagerAdapter에는 새 생성자가 있습니다. 이 생성자를 통해 새로운 동작으로 전환할 수 있습니다. b/129780800을 참조하세요.

API 변경사항

  • FragmentScenariomoveToState(STARTED)는 이제 API 24 이상인 기기에서만 호출할 수 있습니다. b/129880016을 참조하세요.

동작 변경사항

  • (b/129907905)의 결과로 백 스택의 프래그먼트는 호스팅 활동이 다시 생성될 때 onCreateView()에 관한 콜백을 가져오지 않습니다. 이제 프로그래먼트가 표시 상태가 될 때만(즉, 백 스택이 표시될 때만) onCreateView()가 호출됩니다.

버그 수정

  • XML의 <fragment> 태그와 FragmentActivity 또는 AppCompatActivitycontentLayoutId 생성자를 사용할 때 발생하는 문제가 수정되었습니다. (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-alpha06androidx.fragment:fragment-testing:1.1.0-alpha06가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • FragmentManager에 의해 발생되는 예외 메시지에 이제 프래그먼트의 이름이 포함됩니다. (b/67759402)

API 변경사항

  • 이제 FragmentFragmentActivity에는 @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-alpha05androidx.fragment:fragment-testing:1.1.0-alpha05가 출시되었습니다. 이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 @ContentView 주석 조회가 캐시됩니다. (b/123709449 참조)

동작 변경사항

  • 이제 다른 FragmentManager에 연결된 프래그먼트를 사용하여 remove(), hide(), show(), detach()setPrimaryNavigationFragment()를 호출하면 자동으로 실패하지 않고 IllegalStateException이 발생합니다. aosp/904301을 참조하세요.

버그 수정

  • 이제 FragmentActivityonNewIntent@CallSuper로 올바르게 표시됩니다. (b/124120586)
  • getDialog().dismiss() 또는 getDialog().cancel()을 사용할 때 DialogFragmentonDismiss()가 두 번 호출될 수 있는 문제가 수정되었습니다. (b/126563750)

버전 1.1.0-alpha04

2019년 2월 7일

androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04androidx.fragment:fragment-testing 1.1.0-alpha04 버전이 출시되었습니다.

새로운 기능

  • 확장되어야 하는 레이아웃 XML 파일을 나타낼 수 있는 @ContentView 클래스 주석 지원이 onCreateView() 재정의의 대안으로 추가되었습니다. onViewCreated()에서 관련 작업을 살펴보는 것이 좋습니다. (aosp/837619)
  • 이제 fragment-testingandroidx.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)
  • 이전 프래그먼트 버전과의 바이너리 호환성 문제가 수정되었습니다. (aosp/887877, aosp/889834)

버그 수정

  • nullsetTargetFragment()에 전달할 때 타겟 프래그먼트가 올바르게 삭제됩니다. (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)와 같은 코드를 사용하여 상위 프래그먼트 또는 다른 맞춤 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 인스턴스를 전달하는 대신 프래그먼트 생성에 람다를 사용할 수 있습니다. (aosp/812913)

버그 수정

  • 백 스택에서 중첩된 프래그먼트를 사용할 때 발생하는 IllegalStateException을 수정했습니다. (b/119256498)
  • FragmentFactory와 함께 FragmentScenario.recreate()를 사용할 때의 비정상 종료가 수정되었습니다. (aosp/820540)
  • 프래그먼트를 삭제한 이후에 타겟 프래그먼트에 액세스할 수 없던 문제를 해결했습니다. (aosp/807634)

버전 1.1.0-alpha01

2018년 11월 5일

이 버전은 androidx.test:core API를 기반으로 빌드되는 FragmentScenariofragment-testing 아티팩트의 최초 출시입니다. 자세한 내용은 프래그먼트 테스트 문서를 참조하세요.

새로운 기능

  • 프래그먼트를 독립적으로 테스트하기 위한 새 FragmentScenario 클래스
  • 이제 FragmentManager에서 FragmentFactory를 설정하여 새 프래그먼트 인스턴스를 인스턴스화하는 방법을 제어할 수 있습니다.
  • 프래그먼트에서 ViewModel을 검색하기 위한 새로운 by viewModels() Kotlin 속성 대리자가 추가되었습니다.
  • 대기 중인 입력 이벤트(예: 클릭)가 이제 프래그먼트의 onStop()에서 취소됩니다.

API 변경사항

  • 프래그먼트 API 노출 영역에서 null 허용 여부 주석을 크게 확장했습니다.

버그 수정

  • LiveData 내에서 프래그먼트 작업이 실패하는 문제를 수정했습니다. (b/77944637 참조)

알려진 문제

  • 프래그먼트가 FragmentManager에서 삭제된 후에는 타겟 프래그먼트에 액세스할 수 없습니다.
  • fragment-testing은 정확한 androidx.test:core:1.0.0 대신 androidx.test:core:1.0.0-beta01에 종속됩니다.