Fragment

Activity 내에서 호스팅되는 여러 개의 독립적인 화면으로 앱을 분할합니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 9월 4일 1.8.3 - - -

종속 항목 선언

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

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

Groovy

dependencies {
    def fragment_version = "1.8.5"

    // 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.5"

    // 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.3

2024년 9월 4일

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

버그 수정

  • 이제 FragmentManager가 뒤로 탐색 예측 동작을 처리할 때 대기 중인 작업을 올바르게 고려합니다. 이렇게 하면 시스템을 뒤로 실행해도 더 이상 IndexOutOfBoundsException이 발생하지 않습니다. 추가했습니다. (I9ba32, b/342316801)
  • 포함된 활동/프래그먼트의 상태가 이미 저장된 상태에서 AndroidFragment가 컴포지션에 추가되어도 더 이상 비정상 종료되지 않습니다. 추가했습니다. (I985e9, b/356643968)

버전 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 사용자에게 영향을 미칩니다. 즉, AndroidFragmentonStart()를 통해 이동하기 전에 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를 사용하여 프래그먼트를 확장하는 이전에 권장된 접근 방식을 직접 대체하여 사용해야 합니다.
  • 이제 FragmentManagerOnBackStackChangedListener 인터페이스에 있는 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 계층 구조에 프래그먼트를 추가할 수 있습니다. 프래그먼트 상태 저장 및 복원을 자동으로 처리합니다. 이는 AndroidViewBinding Composable의 직접 대체로 사용할 수 있습니다.(b/312895363, Icf841)

문서 변경사항

  • API가 호출되는 시기와 사용 방법을 나타내도록 OnBackStackChangedListener API 관련 문서를 업데이트했습니다. 추가했습니다. (I0bfd9)

종속 항목 업데이트

버전 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 아티팩트를 만들었습니다.

이 새로운 아티팩트에서 사용할 수 있는 첫 번째 기능은 Fragmentcontent 확장 메서드입니다. 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.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 아티팩트를 만들었습니다.

이 새로운 아티팩트에서 사용할 수 있는 첫 번째 기능은 Fragmentcontent 확장 메서드입니다. 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와 함께 호출되는 두 개의 추가 onBackStackChangeStartedonBackStackChangeCommitted 콜백으로 확장되었습니다.
  • FragmentStrictMode에 새로운 WrongNestedHierarchyViolation이 추가되어, 하위 프래그먼트가 상위 요소의 뷰 계층 구조 내에 중첩되지만 상위 요소의 childFragmentManager에는 추가되지 않을 때 이를 감지합니다.
  • 이제 Intent 또는 IntentSender를 사용하는 FragmentFragmentManager 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-testingandroidx.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)
  • 이제 여러 트랜잭션에 동일한 프래그먼트가 포함되어 있더라도 새 onBackStackChangeStartedonBackStackChangeCommitted 콜백이 프래그먼트를 한 번만 전달합니다. 추가했습니다. (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 onBackStackChangeStartedonBackStackChangeCommitted 콜백은 이제 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 참조)

종속 항목 업데이트

버전 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에 포함된 커밋을 확인하세요.

동작 변경사항

  • 이제 FragmentManageronBackStackChangedListener에서 새로운 onBackStackChangedStarted 콜백이 프래그먼트가 타겟 상태로 이동하기 전에 실행됩니다. (I34726)

버전 1.6.0-alpha05

2023년 2월 8일

androidx.fragment:fragment-*:1.6.0-alpha05가 출시되었습니다. 버전 1.6.0-alpha05에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 FragmentManager.OnBackStackChagnedListener 인터페이스에서 두 가지 추가 콜백 onBackStackChangeStartedonBackStackChangeCommitted를 제공합니다. 이 콜백은 추가 정보를 허용하고 FragmentManager에서 백 스택 변경사항이 발생하는 시점을 제어합니다. (Ib7ce5, b/238686802)

API 변경사항

  • IntentIntentSender를 사용하는 FragmentFragmentManager 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-testingandroidx.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-alpha03androidx.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)

종속 항목 업데이트

버전 1.5

버전 1.5.7

2023년 4월 19일

androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7androidx.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.6androidx.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.3androidx.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)

종속 항목 업데이트

버전 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에서 Lifecycle 2.5.0CreationExtras를 통해 스테이트리스(Stateless) ViewModelProvider.Factory를 제공할 수 있습니다.
  • 구성요소 대화상자 통합: 이제 DialogFragmentActivity 1.5.0을 통해 ComponentDialogonCreateDialog()에서 반환된 기본 대화상자로 사용합니다.
  • 저장된 인스턴스 상태 리팩터링: 프래그먼트가 인스턴스 상태를 저장하는 방식을 변경하기 시작했습니다. 이는 프래그먼트에 저장된 상태와 상태의 소스를 명확히 파악하는 데 도움이 됩니다. 현재 변경사항은 다음과 같습니다.
    • 이제 FragmentManager는 저장된 인스턴스 상태를 직접 맞춤 Parcelable에 저장하는 대신 Bundle에 저장합니다.
    • 아직 전송되지 않은 Fragment Result APIs를 통해 설정된 결과는 이제 FragmentManager의 내부 상태와 별개로 저장됩니다.
    • 이제 개별 프래그먼트와 연결된 상태가 FragmentManager의 내부 상태와 별개로 저장되므로 개별 프래그먼트와 연결된 저장된 상태의 양을 Fragment 디버그 로깅에 있는 고유 ID와 연결할 수 있습니다.

기타 변경사항

  • 이제 FragmentStrictMode가 클래스 이름과 함께 allowViolation()을 사용하여 특정 위반 불이익을 우회하는 비공개 서드 파티 프래그먼트 기능을 제공합니다.
  • 활동의 ActionBar에 메뉴를 제공하는 Fragment API가 지원 중단되었습니다. Activity 1.4.0에 추가된 MenuHostMenuProvider 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 변경사항

  • DialogFragmentshowNow 함수와의 패리티를 위해 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 변경사항

버전 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는 프래그먼트를 활동과 긴밀하게 결합하며 분리하여 테스트할 수 없으므로 지원 중단되었습니다. Activity 1.4.0-alpha01에 추가된 MenuHostMenuProvider API는 테스트 가능하고 수명 주기를 인식하는 API 노출 영역을 제공하며 프래그먼트에서 이를 사용해야 합니다. (I50a59, I20758)

버그 수정

  • 이제 SavedStateViewFactorySavedStateRegistryOwner로 초기화된 경우에도 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-alpha03androidx.fragment:fragment-testing:1.5.0-alpha03이 출시되었습니다. 버전 1.5.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 CreationExtrasby viewModels()by activityViewModels() 함수에 전달할 수 있습니다. (Ibefe7, b/217601110)

동작 변경사항

버전 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 1.4.1에서: xml에서 생성된 뷰 ID에 음수 값이 있을 때 FragmentContainerView에서 더 이상 잘못된 상태 예외가 발생하지 않습니다. (Ic185b, b/213086140)
  • Fragment 1.4.1에서: 맞춤 ownerProducer 람다를 by viewModels() 지연 함수에서 사용할 때 맞춤 ViewModelProvider.Factory가 제공되지 않는 경우 항상 프래그먼트 팩토리를 사용하는 것이 아니라 이제 해당 소유자의 defaultViewModelProviderFactory를 사용합니다. (I56170, b/214106513)
  • FragmentregisterForActivityResult() 콜백에서 처음으로 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.0androidx.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가 삭제되어 이제 새 상태 관리자가 사용할 수 있는 유일한 옵션입니다.

여러 백 스택

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

이 출시는 세 가지 새로운 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-beta01androidx.fragment:fragment-testing:1.4.0-beta01이 출시되었습니다. 버전 1.4.0-beta01에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 상위 프래그먼트가 자체 콜백을 실행하기 전에 전체 계층 구조로 onHiddenChanged()를 전달합니다. (Iedc20, b/77504618)
  • 이제 키보드가 열려 있는 프래그먼트에서 recycler 뷰가 있는 프래그먼트로 이동할 때 키보드가 자동으로 닫힙니다. (I8b842, b/196852211)
  • 이제 DialogFragmentshow(), 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-alpha10androidx.fragment:fragment-testing:1.4.0-alpha10이 출시되었습니다. 버전 1.4.0-alpha10에 포함된 커밋을 확인하세요.

린트

  • 동일한 FragmentTransaction에서 동일한 Fragmentdetach()attach() 호출을 모두 감지하는 DetachAndAttachFragmentInSameFragmentTransaction 린트 경고를 추가했습니다. 이러한 보완 작업이 동일한 트랜잭션에서 실행되면 서로 취소되므로 별도의 트랜잭션으로 분할하여 작업을 실제로 실행해야 합니다. (aosp/1832956, b/200867930)
  • MenuHostaddMenuProvider API를 사용할 때 Fragment 수명 주기 사용을 Fragment 뷰 수명 주기로 수정하는 FragmentAddMenuProvider 린트 오류를 추가했습니다. (aosp/1830457, b/200326272)

문서 업데이트

  • 이제 Activity Result API에서 처리되는 API의 지원 중단 메시지, 즉 startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions, onRequestPermissionsResult가 모두 자세하게 확장되었습니다. (cce80f)
  • FragmentDialogFragment의 경우 모두 onActivityCreated()의 지원 중단 메시지가 자세하게 확장되었습니다. (224db4)

버전 1.4.0-alpha09

2021년 9월 15일

androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09androidx.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-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
    
  • Fragment 전환 시 테마에서 가져온 표준 활동 전환 애니메이션을 사용 설정할지 지정하기 위해 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

버전 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

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

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

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

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

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

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를 사용합니다. 이 Animator를 빌드하는 데 사용된 리소스가 이제 공개되지 않습니다.

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

  • 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)

버전 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 이상인 경우에만 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-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에 포함된 커밋을 확인하세요.

새로운 기능

  • Fragment의 메서드를 재정의하지 않고 startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() 흐름을 처리하도록 Activity 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에 포함된 커밋을 확인하세요.

새로운 기능

  • onCreateView()에서 모든 뷰에 LifecycleOwner를 반환하듯이 프래그먼트의 viewLifecycleOwner를 반환할 것이므로 LIfecycle 2.3.0-alpha01에 추가된 ViewTreeLifecycleOwner.get(View) API에 대한 지원이 추가되었습니다. (aosp/1182955)

API 변경사항

  • Fragment의 setRetainInstance() 메서드가 지원 중단되었습니다. ViewModels가 도입되면서 개발자는 활동, 프래그먼트, 탐색 그래프와 연결할 수 있는 상태를 유지하기 위한 특정 API를 갖게 됩니다. 이를 통해 개발자는 보존된 상태가 아닌 일반 상태의 Fragment를 사용하고 별도로 보관하고자 하는 특정 상태를 유지할 수 있습니다. 또한, 단일 생성의 유용한 속성을 유지하면서 누수의 일반적인 원인을 피하고 보관되는 상태(즉, ViewModel의 생성자 및 생성자가 수신하는 onCleared() 콜백)의 파괴를 방지할 수 있습니다. (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() 지원 중단: Fragment의 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를 설정하면 하위 FragmentManager에도 영향이 있다는 것을 더 확실히 알리기 위해 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에 포함된 커밋을 확인하세요.

새로운 기능

  • FragmentContainerViewandroid: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 Test 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에 연결된 Fragment를 사용하여 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)
  • 이전 Fragment 버전과의 바이너리 호환성 문제가 수정되었습니다. (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)와 같은 코드를 사용하여 상위 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를 기반으로 빌드되는 FragmentScenariofragment-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에 종속됩니다.