프래그먼트
최근 업데이트 | 현재 안정화 버전 | 다음 버전 후보 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2020년 12월 16일 | 1.2.5 | 1.3.0-rc01 | - | - |
종속 항목 선언
Fragment의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
dependencies { def fragment_version = "1.2.5" // 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.3.0
버전 1.3.0-rc01
2020년 12월 16일
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
및 androidx.fragment:fragment-testing:1.3.0-rc01
이 출시되었습니다. 버전 1.3.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
onPrepareOptionsMenu()
가onCreateOptionsMenu()
와 동일한 로직을 따르며 상위 프래그먼트가setMenuVisibility(false)
를 호출할 때 더 이상 호출되지 않습니다. (Id7de8, b/173203654)
새로운 상태 관리자 버그 수정
Animation
이 포함된 프래그먼트를FragmentContainerView
에 추가한 다음 팝업 창 작업으로 추가를 중단할 때 발생하는 누수 및 시각적 아티팩트를 수정했습니다. (I952d8)onCreate()
또는onViewCreated()
메서드 중에 프래그먼트의 뷰가 교체되어도 뷰 계층 구조에 유지되는 문제를 수정했습니다. (I8a7d5)- 이제 프래그먼트 루트 뷰가 다시 시작될 때 포커스가 프래그먼트 루트 뷰로 올바르게 복원됩니다. (Ifc84b)
- 동일한 프래그먼트 트랜잭션에서 팝업 창 작업과 교체 작업을 결합하면 이제 적절한 애니메이션이 표시됩니다. (Ifd4e4, b/170328691)
버전 1.3.0-beta02
2020년 12월 2일
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
및 androidx.fragment:fragment-testing:1.3.0-beta02
가 출시되었습니다. 버전 1.3.0-beta02에 포함된 커밋을 확인하세요.
새로운 기능
- Kotlin 1.4의
FragmentAction
용 기능적 인터페이스를 통해 소스 및 바이너리 호환성을 유지하면서FragmentScenario
가 Kotlin으로 완전히 변환되었습니다. (I19d31)
동작 변경사항
class
또는android:name
속성을 사용하여 프래그먼트를 확장하지 않는 FragmentContainerViews를 이제FragmentActivity
외부에서 사용할 수 있습니다. (Id4397, b/172266337)- 프래그먼트의 최대 수명 주기를
DESTROYED
로 설정하려고 하면 이제IllegalArgumentException
이 발생합니다. (Ie7651, b/170765622) DESTROYED
상태로 FragmentScenario를 초기화하면 이제IllegalArgumentException
이 발생합니다. (I73590, b/170765622)
새로운 상태 관리자 버그 수정
TRANSIT_FRAGMENT_
옵션 중 하나 또는Animator
를 사용하는 프래그먼트 전환이 중단되면 뷰가 최종 상태에 도달하지 않는 문제를 수정했습니다. (I92426, b/169874632)- 종료
Animation
이 있는 프래그먼트가 올바르게 소멸되지 못하던 문제를 수정했습니다. (I83d65) - 효과가 반전된 종료 프래그먼트가 이제 올바르게 취소되고 적절한 입력 효과로 다시 시작됩니다. (I62226, b/167092035)
hide()
의 종료Animator
가 실행되지 않는 문제를 수정했습니다. (Id7ffe)- 프래그먼트가 이제 연기되었다가 즉시 시작될 때 올바르게 표시됩니다. (Ie713b, b/170022857)
- 애니메이션 중에 포커스가 지정된 뷰를 삭제하는 프래그먼트가
RESUMED
에 도달하면 더 이상 분리된 뷰의 포커스를 복원하려고 하지 않습니다. (I38c65, b/172925703)
외부 기여
FragmentFactory
가 이제 다양한ClassLoader
인스턴스의 프래그먼트 클래스를 별도로 캐시합니다. 사이먼 쉴러님께 감사드립니다. (#87, b/113886460)
버전 1.3.0-beta01
2020년 10월 1일
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
및 androidx.fragment:fragment-testing:1.3.0-beta01
가 출시되었습니다. 버전 1.3.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
setMaxLifecycle()
이 프래그먼트가CREATED
로 이동되지 않은 한Lifecycle
상태를INITIALIZING
으로 설정하는 것을 지원합니다. (b/159662173)
API 변경사항
- Kotlin 1.4를 사용하도록 androidx를 업그레이드합니다. (Id6471, b/165307851, b/165300826)
동작 변경사항
- 프래그먼트 리소스 파일이 올바르게 비공개로 설정되었습니다. (aosp/1425237)
버그 수정
<fragment>
태그를 사용하여 확장된 프래그먼트가 이제 STARTED로 이동하기 전에 컨테이너에 뷰가 추가될 때까지 올바르게 대기합니다. (I02f4c)- 표시된 다음
setMaxLifecycle()
을CREATED
로 설정한 프래그먼트가 이제 종료 효과를 올바르게 실행합니다. (b/165822335) - 백 스택에 추가되지 않은 분리된 프래그먼트를 삭제해도 더 이상 메모리 누수가 발생하지 않습니다. 니클라스 안스만 기어츠 씨께 감사드립니다. (b/166489383)
- 이제 활성 프래그먼트에 항상 null이 아닌
FragmentManager
가 있으며 null이 아닌FragmentManager
가 있는 프래그먼트는 항상 활성 상태로 간주됩니다. (aosp/1422346) - 프래그먼트 기본 효과
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
및TRANSIT_FRAGMENT_FADE
가 이제Animation
대신Animator
를 사용합니다. (b/166155034)
새로운 상태 관리자 버그 수정
- 이제 프래그먼트가 애니메이션을 시작하기 직전에 뷰 포커스 상태를 올바르게 복원합니다. (Icc256)
- 공유 요소 전환만 있는 프래그먼트가 이제 특수 효과를 올바르게 완료합니다. 즉, 실제로 최종 상태로 이동합니다. (Iaebc7, b/166658128)
- 이제 프래그먼트 뷰가 제거되기 전에 항상 컨테이너에서 삭제됩니다. (Id5876)
- 새로운 상태 관리자가 이제 진입 프래그먼트 뷰를 추가하기 전에 이탈 프래그먼트 뷰를 일관되게 삭제합니다. (I41a6e)
- 이제 프래그먼트 뷰의 명시적인 가시성 변경사항이 새로운 상태 관리자에 적용됩니다. 즉, 애니메이션이 시작되기 전에 진입 프래그먼트의 뷰를
INVISIBLE
로 설정하면 실제로 계속 표시되지 않습니다. (b/164481490) - 이제 프래그먼트가
Animations
보다Animators
를 우선합니다. 즉, 두 개 다 있는 프래그먼트는Animator
만 실행하고Animation
을 무시합니다. (b/167579557) - 새로운 상태 관리자가 진입 애니메이션을 사용할 때 더 이상 프래그먼트가 플래시되지 않습니다. (b/163084315)
알려진 문제
새로운 상태 관리자를 사용할 때 이전 프래그먼트로 돌아가지 않고 진입 특수 효과 중에 뒤로를 누르면 이전 프래그먼트가 다시 추가되지 않아 빈 화면이 표시됩니다. (b/167259187, b/167092035, b/168442830)
버전 1.3.0-alpha08
2020년 8월 19일
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
및 androidx.fragment:fragment-testing:1.3.0-alpha08
가 출시되었습니다. 버전 1.3.0-alpha08에 포함된 커밋을 확인하세요.
새 상태 관리자
이 출시 버전에는 수명 주기 메서드, 애니메이션 및 전환의 디스패치와 연기된 트랜잭션 처리 방식에 영향을 주는 FragmentManager
의 내부 상태 관리에 관한 주요 리팩터링이 포함되어 있습니다. 이 기능은 기본적으로 사용 설정되어 있습니다. 자세한 내용은 프래그먼트: 내부 요소 다시 빌드 블로그 게시물을 참조하세요. (b/139536619, b/147749580)
FragmentManager.enableNewStateManager(boolean)
의 실험용 API를 사용하여 FragmentManager가 새 상태 관리자를 사용할지 여부를 제어할 수 있습니다. (I7b6ee)
다음 문제는 새 상태 관리자를 사용할 때만 수정됩니다.
- 이제 새 프래그먼트가 시작되기 전에
replace
작업의 이전 프래그먼트가 올바르게 중지됩니다. (b/161654580) - 프래그먼트는 이제 동일한 프래그먼트에서 여러 경쟁 애니메이션을 방지하여
Animation
이 모든Transition
효과를 재정의하거나 개별 프래그먼트의Animator
와Transition
이 모두 실행되는 경우를 방지합니다. (b/149569323) - 이제 마지막 진입 프래그먼트와 첫 번째 이탈 프래그먼트만이 아니라 진입 및 이탈하는 모든 프래그먼트의
enterTransition
및exitTranstion
이 실행됩니다. (b/149344150) - 연기된 프래그먼트가 더 이상
CREATED
상태에서 중단되지 않고 대신 다른 프래그먼트와 함께STARTED
로 이동합니다. (b/129035555) - 연기되고 재정렬된 트랜잭션과 재정렬되지 않은 트랜잭션을 혼합할 때
FragmentManager
가 순서에 상관없이 작업을 실행하는 문제가 수정되었습니다. (b/147297731) - 여러 프래그먼트를 동시에 표시하는 경우 프래그먼트를 연기할 때 중간 프래그먼트가 일시적으로 표시되는 문제가 더 이상 발생하지 않습니다. (b/37140383)
- 이제
FragmentManager
는onAttachFragment()
콜백 내에서findFragmentById()
또는findFragmentByTag()
를 호출할 때 올바른 프래그먼트를 반환합니다. (b/153082833) - 다른 프래그먼트를 대체하는 프래그먼트가 연기될 때 이 프래그먼트는 제거되는 프래그먼트에서
onCreateView()
를 더 이상 호출하지 않습니다. (b/143915710) - 이제 프레임워크
Transition
과 AndroidXTransition
인스턴스를 결합하려고 할 때 오류 메시지에 잘못된 전환이 있는 프래그먼트가 표시됩니다. (b/155574969)
동작 변경사항
- 이제 프래그먼트의
onCreate()
수명 주기 메서드에서ActivityResultLauncher
의launch()
를 호출할 수 있습니다. (b/161464278) onCreate()
이후에registerForActivityResult()
를 호출하는 경우 이제 예외가 발생하여 이 호출이 허용되지 않음을 나타냅니다(이전에는 구성 변경 후에 결과를 전달하지 않았으며 이에 대한 알림도 표시되지 않았음). (b/162255449)- 이제
FragmentActivity
는 Activity1.2.0-alpha08
에 도입된OnContextAvailableListener
API를 사용하여FragmentManager
의 상태를 복원합니다.FragmentActivity
의 서브클래스에 추가된 모든 리스너는 이 리스너 이후에 실행됩니다. (I513da)
버그 수정
- 이제
startIntentSenderForResult()
사용 시 전달되는ActivityOptions
가 준수됩니다. (b/162247961)
알려진 문제
- 새 상태 관리자를 사용할 때
onViewCreated()
이후와onResume()
이전에 프래그먼트의 루트 뷰 공개 상태를 직접 설정하면 루트 뷰의 공개 상태를 제어하는FragmentManager
에서 설정된 공개 상태를 재정의합니다. 이 문제를 해결하려면 항상hide()
및show()
작업을 사용하여 프래그먼트의 공개 상태를 변경해야 합니다. (b/164481490)
버전 1.3.0-alpha07
2020년 7월 22일
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
및 androidx.fragment:fragment-testing:1.3.0-alpha07
가 출시되었습니다. 버전 1.3.0-alpha07에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
FragmentScenario
에서 항상 Fragment를RESUMED
상태로 이동하는 대신 초기 수명 주기 상태를CREATED
,STARTED
또는RESUMED
로 설정할 수 있습니다. (b/159662750) - 값을 반환할 수 있는 Kotlin의 구체화된 확장 메서드인
withFragment
의 형태로onFragment
의FragmentScenario
API에 대한 대안을 추가했습니다. 특히, 특정 블록에서 발생한 예외가 다시 발생합니다. (b/158697631)
동작 변경사항
- 이제
FragmentScenario
는moveToState()
를 구현하기 위해setMaxLifecycle()
을 사용하여 모든 API 수준에서 일관된 동작을 보장하고 기본 Activity에서 Fragment의 상태를 분리합니다. (b/156527405) - 이제
ViewTreeSavedStateRegistryOwner
에서 반환하는SavedStateRegistryOwner
는 프래그먼트 뷰의 수명 주기에 연결됩니다. 이렇게 하면, 프래그먼트 뷰와 동시에 상태가 저장되고 복원됩니다. (b/158503763)
버그 수정
- 이제 프래그먼트는 인셋 요청이 삭제되는 경우를 방지하기 위해
ViewCompat.requestApplyInsets()
를 호출하기 전에 프래그먼트 뷰가 연결될 때까지 대기합니다. (b/158095749) - 이제
clearFragmentResultListener
를 호출하면 수명 주기 관찰자가 적절히 삭제됩니다. (b/159274993)
Version 1.3.0-alpha06
2020년 6월 10일
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
및 androidx.fragment:fragment-testing:1.3.0-alpha06
가 출시되었습니다. 버전 1.3.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
FragmentActivity
및Fragment
의onAttachFragment()
콜백이 지원 중단되었습니다. 더 유연한 대안을 제공하려고 새FragmentOnAttachListener
가 추가되었습니다.onAttachFragment()
를 테스트 가능한 별도의 리스너에 위임하고 직계 하위 FragmentManager 이외의 FragmentManager에 리스너를 추가하는 작업을 지원할 수 있습니다. (I06d3d)
버그 수정
- 이제 상위 프래그먼트가 하위 프래그먼트 전에 뷰 상태를 복원하여
DialogFragment
가 다른DialogFragment
를 하위 프래그먼트로 표시할 때 구성 변경 후 시각적 순서 지정 문제를 수정합니다. (b/157195715) UseRequireInsteadOfGet
린트 검사가?.
및!!
연산자의 연결된 사용을 올바르게 처리하지 못하는 문제가 수정되었습니다. (b/157677616)
버전 1.3.0-alpha05
2020년 5월 20일
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
및 androidx.fragment:fragment-testing:1.3.0-alpha05
가 출시되었습니다. 버전 1.3.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
Fragment
내에서View
를 사용할 때 수명 주기2.3.0-alpha03
의ViewTreeViewModelStoreOwner
및 SavedState1.1.0-alpha01
의ViewTreeSavedStateRegistryOwner
지원이 추가되었습니다. (aosp/1297993, aosp/1300264)
API 변경사항
- 이제
setFragmentResult()
및setFragmentResultListener()
API는 null이 아닌Bundle
및FragmentResultListener
를 각각 사용합니다. 이전에 설정한 결과 또는 리스너를 명시적으로 삭제하려면 새clearFragmentResult()
및clearFragmentResultListener()
메서드를 사용하세요. (b/155416778) - 람다를 사용하는
setFragmentResultListener()
Kotlin 확장 프로그램이 이제inline
으로 표시됩니다. (b/155323404)
동작 변경사항
- 이전에 지원 중단된
Fragment
의startActivityForResult()
,startIntentSenderForResult()
,requestPermissions
가 이제 내부적으로ActivityResultRegistry
를 사용하므로 이러한 API를 사용할 때 요청 코드에 하위 비트(0xFFFF
미만)만 사용하는 제한사항이 삭제됩니다. (b/155518741)
문서 업데이트
Fragment(@LayoutRes int)
및DialogFragment(@LayoutRes int)
생성자에 관한 문서를 확장하여 기본FragmentFactory
를 사용할 때 서브클래스의 인수가 없는 생성자에서 호출해야 한다고 명시했습니다. (b/153042497)
버전 1.3.0-alpha04
2020년 4월 29일
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
및 androidx.fragment:fragment-testing:1.3.0-alpha04
가 출시되었습니다. 버전 1.3.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
FragmentManager
의 새 API를 통해 두 프래그먼트 간에 결과를 전달하는 기능이 추가되었습니다. 이는 탐색의 계층 구조 프래그먼트(상위/하위), DialogFragment 및 Navigation의 프래그먼트에서 작동하며 결과가STARTED
이상인 경우에만 프래그먼트로 전송되도록 합니다. (b/149787344 참조)
API 변경사항
- 타겟 프래그먼트 API가 지원 중단되었습니다. 프래그먼트 간에 데이터를 전달하려면 대신 새 Fragment Result API를 사용해야 합니다. (b/149787344)
- 프래그먼트의
startActivityForResult()
/onActivityResult()
및requestPermissions()
/onRequestPermissionsResult()
API가 지원 중단되었습니다. Activity Result API를 사용하세요. (aosp/1290887) - 활동
1.2.0-alpha04
의 브레이킹 체인지:prepareCall()
메서드는registerForActivityResult()
로 이름을 바꾸었습니다. (aosp/1278717 참조)
버그 수정
- 이제 프래그먼트의 수명 주기 동작을 미러링하여
onSaveInstanceState()
가 호출되기 전에 프래그먼트의getViewLifecycleOwner()
가 중지됩니다. (b/154645875) - 이제 프래그먼트에서
setMenuVisibility(false)
를 호출하면 하위 프래그먼트에서 제공하는 메뉴의 공개 상태가 올바르게 변경됩니다. (b/153593580) FragmentContainerView
를 사용하여DialogFragment
의 뷰 계층 구조에 프래그먼트를 추가할 때 발생하는illegalStateException
을 수정했습니다. (b/154366601)- 활동 외부에서 프래그먼트를 호스팅할 때 프래그먼트의
getDefaultViewModelProviderFactory()
메서드가 더 이상 비정상 종료되지 않습니다. (b/153762914 참조)
버전 1.3.0-alpha03
2020년 4월 1일
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
및 androidx.fragment:fragment-testing:1.3.0-alpha03
가 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
Fragment
의prepareCall
메서드는 현재final
입니다. (b/152439361)
버그 수정
BottomSheetDialogFragment
를 사용할 때 프래그먼트1.3.0-alpha02
에 도입되는 회귀 문제가 해결되었습니다. (b/151652127, aosp/1263328, aosp/1265163)- 구성 변경 후 프래그먼트에서
prepareCall
사용 시 비정상 종료 문제가 해결되었습니다. (b/152137004) setTargetFragment()
사용 시 공유 요소 및 이탈 전환이 무시되던 문제가 해결되었습니다. (b/152023196)- Fragment
1.2.4
에서: 보관된 프래그먼트의 난독화를 허용하도록 Fragment ProGuard 규칙이 업데이트되었습니다. (b/151605338) - Fragment
1.2.4
에서: 수명 주기와 뷰 수명 주기가 항상 동기화되므로observe
호출 시this
또는viewLifecycleOwner
를 안전하게 사용할 수 있도록DialogFragment
클래스에서FragmentLiveDataObserve
린트 규칙이 사용 중지되었습니다. (b/151765086)
종속 항목 변경사항
- 프래그먼트는 Activity
1.2.0-alpha03
에 따라 달라지며, 이는 Activity1.2.0-alpha02
에 도입된 Activity Result API를 대폭 개선했습니다.
버전 1.3.0-alpha02
2020년 3월 18일
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
및 androidx.fragment:fragment-testing:1.3.0-alpha02
가 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 플로 테스트를 위한 후크를 제공하는 것에 더해 프래그먼트 내 메서드를 재정의하지 않고
startActivityForResult()
+onActivityResult()
및requestPermissions()
+onRequestPermissionsResult()
플로를 처리하기 위해 활동1.2.0-alpha02
에 도입된ActivityResultRegistry
API 지원이 추가되었습니다. 업데이트된 활동에서 결과 가져오기를 참조하세요. (b/125158199)
API 변경사항
DialogFragment
는 이제onCreateView()
가 기본적으로 확장해야 하는 레이아웃을 표시하는@LayoutRes
를 가져오는 생성자를 제공합니다. (b/150327080)onActivityCreated()
메서드가 지원 중단되었습니다. 프래그먼트의 뷰를 터치하는 코드는onViewCreated()
(onActivityCreated()
직전에 호출됨)에서 실행되어야 하며 다른 초기화 코드는onCreate()
에 있어야 합니다. 활동onCreate()
가 완료되었을 때 콜백을 받으려면LifeCycleObserver
가onAttach()
내 활동의Lifecycle
에 등록되어 있어야 하며onCreate()
콜백이 수신된 후에는 제거되어야 합니다. (b/144309266)
버그 수정
- Fragment
1.2.3
에서:onCreateDialog()
에서getLayoutInflater()
호출 시StackOverflowError
를 일으키던DialogFragment
내 버그가 수정되었습니다. (b/117894767, aosp/1258664) - Fragment
1.2.3
에서: 사용되지 않는 Fragment 클래스를 제거할 수 있도록 Fragment에 포함된 ProGuard 규칙의 범위를 줄였습니다. (b/149665169) - Fragment
1.2.3
에서: Kotlin 속성 이름을 따르는 로컬 변수 이름을 사용할 때UseRequireInsteadOfGet
린트 검사 내 거짓양성이 수정되었습니다. (b/149891163) - Fragment
1.2.3
에서:FragmentContainerView
가 더 이상 레이아웃 미리보기에서 잘못된 생성자를 사용하기 위해UnsupportedOperationException
를 발생시키지 않습니다. (b/149707833)
알려진 문제
BottomSheetDialogFragment
이 화면에 대화상자를 제대로 배치하지 않습니다. (b/151652127)
버전 1.3.0-alpha01
2020년 3월 4일
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
및 androidx.fragment:fragment-testing:1.3.0-alpha01
가 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
onCreateView()
에서 모든 뷰에LifecycleOwner
를 반환하듯이 프래그먼트의viewLifecycleOwner
를 반환할 것이므로 수명 주기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
와 상호작용하는FragmentPagerAdapter
및FragmentStatePagerAdapter
클래스가 지원 중단되었습니다. ViewPager에서 ViewPager2로 이전을 참조하세요. (b/145132715)
버그 수정
- 이제 Fragment ProGuard 규칙이 모든
Fragment
인스턴스가 아닌 사용된 기본 생성자Fragment
클래스만 올바르게 유지하여 Fragment1.2.1
에 도입되는 회귀 문제를 수정합니다. (b/149665169) - Fragment
1.2.2
에 추가된require___()
린트 규칙은 우선 적용된 Kotlin 속성 이름(예:view
)과 동일한 이름을 공유하는 로컬 변수에 더 이상 거짓양성을 일으키지 않습니다. (b/149891163) - Android 스튜디오에서 레이아웃 미리보기를 사용할 때
FragmentContainerView
에서 더 이상UnsupportedOperationException
을 일으키지 않습니다. (b/149707833) - 상태가 저장된 후 추가된 보관된 프래그먼트가 계속해서 다시 생성되지 않고 구성이 변경될 때마다 파괴되는 문제가 해결되었습니다. (b/145832397)
버전 1.2.5
버전 1.2.5
2020년 6월 10일
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
및 androidx.fragment:fragment-testing:1.2.5
가 출시되었습니다. 버전 1.2.5에 포함된 커밋을 확인하세요.
버그 수정
- 이제 프래그먼트의 수명 주기 동작을 미러링하여
onSaveInstanceState()
가 호출되기 전에 프래그먼트의getViewLifecycleOwner()
가 중지됩니다. 이전에는 Fragment1.3.0-alpha04
에서 출시되었습니다. (b/154645875) - 이제 프래그먼트에서
setMenuVisibility(false)
를 호출하면 하위 프래그먼트에서 제공하는 메뉴의 공개 상태가 올바르게 변경됩니다. 이전에는 Fragment1.3.0-alpha04
에서 출시되었습니다. (b/153593580)
버전 1.2.4
버전 1.2.4
2020년 4월 1일
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
및 androidx.fragment:fragment-testing:1.2.4
가 출시되었습니다. 버전 1.2.4에 포함된 커밋을 확인하세요.
버그 수정
- 보관된 프래그먼트의 난독화를 허용하도록 Fragment Progard 규칙이 업데이트되었습니다. (b/151605338)
- 수명 주기와 뷰 수명 주기가 항상 동기화되므로
observe
호출 시this
또는viewLifecycleOwner
를 안전하게 사용할 수 있도록DialogFragment
클래스에서FragmentLiveDataObserve
린트 규칙이 사용 중지되었습니다. (b/151765086)
버전 1.2.3
버전 1.2.3
2020년 3월 18일
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
및 androidx.fragment:fragment-testing:1.2.3
가 출시되었습니다. 버전 1.2.3에 포함된 커밋을 확인하세요.
버그 수정
onCreateDialog()
에서getLayoutInflater()
호출 시StackOverflowError
를 일으키는DialogFragment
내 버그가 수정되었습니다. (b/117894767, aosp/1258665)- 사용되지 않는 Fragment 클래스를 제거할 수 있도록 Fragment에 포함된 ProGuard 규칙의 범위를 줄였습니다. (b/149665169)
- Kotlin 속성 이름을 따르는 로컬 변수 이름을 사용할 때
UseRequireInsteadOfGet
린트 검사 내 거짓양성이 수정되었습니다. (b/149891163) FragmentContainerView
가 더 이상 레이아웃 미리보기에서 잘못된 생성자를 사용하기 위해UnsupportedOperationException
을 발생시키지 않습니다. (b/149707833)
버전 1.2.2
버전 1.2.2
2020년 2월 19일
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
및 androidx.fragment:fragment-testing:1.2.2
가 출시되었습니다. 버전 1.2.2에 포함된 커밋을 확인하세요.
새로운 린트 검사
- 린트는
onCreateView()
,onViewCreated()
,onActivityCreated()
에서OnBackPressedDispatcher
를 호출하기 위해LifecycleOwner
로viewLifecycleOwner
을 사용하도록 제안합니다. (b/142117657) fragment-testing
아티팩트를 사용할 때 올바른debugImplementation
을 사용하고 있는지 확인하는 새로운 린트 검사가 추가되었습니다. (b/141500106)- 이제 Fragment에서 연결된
require___()
메서드를 사용하여get
및require
등가물을 포함하는 모든 Fragment API에 대해checkNotNull(get___())
,requireNonNull(get___())
또는get___()!!
대신 보다 자세한 오류 메시지를 제공합니다. (aosp/1202883)
버그 수정
- R8 경고를 피하기 위해 Fragment ProGuard 파일을 수정했습니다. (b/148963981)
observe
의livedata-ktx
확장 메서드 버전을 처리하기 위해observe
사용 시viewLifecycleOwner
사용을 제안하던 기존 린트 검사 기능을 개선했습니다. (b/148996309)- 린트 검사의 상당 부분의 형식을 수정했습니다. (aosp/1157012)
외부 기여
- Slack을 대신하여
require___()
린트 검사에 참여해 주신 잭 스위어스 님에게 감사드립니다. (aosp/1202883)
버전 1.2.1
버전 1.2.1
2020년 2월 5일
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
및 androidx.fragment:fragment-testing:1.2.1
가 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제
Class
인스턴스(또는 Kotlin 구체화된 버전)를 사용하는add
및replace
메서드를 통해 추가된 프래그먼트는 ProGuard에서 보관하는 기본 생성자를 유지합니다. (b/148181315) FragmentStatePagerAdapter
및FragmentPagerAdapter
는 더 이상finishUpdate()
실행 시FragmentManager
에서 발생시키는 예외를 포착하지 않습니다. (aosp/1208711)FragmentManager.findFragment()
가<fragment>
태그를 통해 추가된 프래그먼트에서 작동하지 않는 문제가 해결되었습니다. (b/147784323)- 이제
<fragment>
태그를 사용하여 확장된 프래그먼트는 항상 레이아웃에서onCreate()
전에onInflate()
를 호출합니다. (aosp/1215856) - 활동이 이미 파괴된 경우
FragmentManager
인스턴스에서toString()
을 호출해도NullPointerException
을 야기하지 않습니다. (b/148189412)
종속 항목 변경사항
- Fragment
1.2.1
은 현재 Lifecycle ViewModel SavedState2.2.0
에 종속됩니다.
버전 1.2.0
버전 1.2.0
2020년 1월 22일
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
및 androidx.fragment:fragment-testing:1.2.0
가 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.
1.1.0 이후 중요 변경사항
- FragmentContainerView:
FragmentContainerView
는FrameLayout
또는 다른 레이아웃 사용을 대체하여 동적으로 추가된 프래그먼트에 강력히 권장되는 컨테이너입니다.<fragment>
태그와 동일한class
,android:name
및 선택적android:tag
도 지원하지만 일반FragmentTransaction
을 사용하여<fragment>
에서 사용하는 맞춤 코드 경로 대신 이 초기 프래그먼트를 추가합니다. onDestroyView()
타이밍: 프레임워크는 이제onDestroyView()
을 호출하기 전에 종료 애니메이션, 종료 프레임워크 전환 및 종료 AndroidX 전환(전환1.3.0
을 사용하는 경우)이 완료될 때까지 기다립니다.- 클래스 기반
add()
및replace()
:FragmentTransaction
에add()
및replace()
의 새 오버로드가 추가되었습니다. 이러한 오버로드는 인수의Class<? extends Fragment>
및 선택적Bundle
을 가져옵니다. 이러한 메서드에서는FragmentFactory
를 사용하여 추가할 프래그먼트의 인스턴스를 구성합니다. 또한 구체화된 유형(예:fragmentTransaction.replace<YourFragment>(R.id.container)
)을 사용하는 Kotlin 확장이fragment-ktx
에 추가되었습니다. - Lifecycle ViewModel SavedState 통합:
by viewModels()
,by activityViewModels()
,ViewModelProvider
생성자 또는ViewModelProviders.of()
를 프래그먼트와 함께 사용할 때SavedStateViewModelFactory
가 이제 기본 팩토리로 사용됩니다. - 새로운 린트 검사:
onCreateView()
,onViewCreated()
또는onActivityCreated()
의LiveData
를 관찰할 때getViewLifecycleOwner()
를 사용하는지 확인하는 새로운 린트 검사가 추가되었습니다. getFragmentManager()
지원 중단:getFragmentManager()
및requireFragmentManager()
메서드가 지원 중단되었으며 프래그먼트가 추가되는 null이 아닌FragmentManager
를 반환하는 단일getParentFragmentManager()
메서드로 대체되었습니다(isAdded()
를 사용하여 호출이 안전한지 확인할 수 있음).FragmentManager.enableDebugLogging()
지원 중단: 정적FragmentManager.enableDebugLogging
메서드가 지원 중단되었습니다. 이제 FragmentManager는FragmentManager
태그에서Log.isLoggable()
을 준수합니다. 이에 따라 앱을 다시 컴파일하지 않고도DEBUG
또는VERBOSE
로깅을 사용 설정할 수 있습니다.
알려진 문제
FragmentContainerView
의class
또는android:name
속성을 통해서만 참조되는 프래그먼트는 ProGuard에 의해 자동으로 유지되지 않으므로 각 프래그먼트 클래스의 Keep 규칙을 수동으로 추가해야 합니다. (b/142601969)class
또는android:name
을 사용하여 XML에FragmentContainerView
와 함께NavHostFragment
를 추가할 때 활동의onCreate()
에findNavController()
를 사용할 수 없습니다. (b/142847973 참조)
버전 1.2.0-rc05
2020년 1월 8일
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
및 androidx.fragment:fragment-testing:1.2.0-rc05
가 출시되었습니다. 버전 1.2.0-rc05에 포함된 커밋을 확인하세요.
버그 수정
<fragment>
태그를 사용할 때 활동을 삭제하는 동안onViewCreated()
가 잘못 호출되는 프래그먼트1.2.0-rc04
의 회귀 문제가 수정되었습니다. (b/146290333)- 이제
<fragment>
태그를 사용하여 추가된 프래그먼트가 일부 레이아웃(예: 가로 모드 레이아웃)에만 있는 경우에도 프래그먼트의 non-config가 제대로 삭제됩니다. 따라서 이러한 프래그먼트는 이제 레이아웃에 없는 경우에도 인스턴스화되는 대신CREATED
로 올바로 이동하지만 수명 주기 메서드를 통해서는 이동하지 않습니다. (b/145769287 참조)
버전 1.2.0-rc04
2019년 12월 18일
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
및 androidx.fragment:fragment-testing:1.2.0-rc04
가 출시되었습니다. 버전 1.2.0-rc04에 포함된 커밋을 확인하세요.
버그 수정
- 시각적 문제를 피할 수 있도록
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
의 애니메이션이 조정되었습니다. (b/145468417 참조)
버전 1.2.0-rc03
2019년 12월 4일
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
및 androidx.fragment:fragment-testing:1.2.0-rc03
가 출시되었습니다. 버전 1.2.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
- 종료 애니메이션/전환이 실행되는 동안
findFragmentById()
/findFragmentByTag()
에서 여전히 삭제된 프래그먼트를 반환하는 동작 변경사항이 수정되었습니다. (b/143982969, aosp/1167585) - 이제 포함된 활동이
onSaveInstanceState()
를 호출할 때 하위 프래그먼트가 상위 프래그먼트 전에 올바로 중지됩니다. (b/144380645) - 숨겨진 프래그먼트를 표시한 후 뷰가
INVISIBLE
로 잘못 표시되는 문제가 해결되었습니다. (b/70793925) - 프래그먼트 공유 요소 전환이 이제 회전 또는 크기가 조정된 뷰를 처리합니다. (b/142835261)
문서 업데이트
setUserVisibleHint()
관련 지원 중단이 문서로 명확히 설명되었습니다. (b/143897055)FragmentFactory
를 설정하면 하위 FragmentManagers에도 영향이 있다는 것을 더 잘 나타내도록setFragmentFactory()
및getFragmentFactory()
에 관한 문서가 개선되었습니다. (aosp/1170095 참조)
종속 항목 변경사항
- 프래그먼트가 이제 Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
에 종속됩니다.
버전 1.2.0-rc02
2019년 11월 7일
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
및 androidx.fragment:fragment-testing:1.2.0-rc02
가 출시되었습니다. 버전 1.2.0-rc02에는 이러한 커밋이 포함되어 있습니다.
버그 수정
- Kotlin에서
onCreateView()
,onViewCreated()
또는onActivityCreated()
(Fragment1.2.0-rc01
에 도입됨)의LiveData
를 관찰할 때getViewLifecycleOwner()
를 사용하기 위한 LintFix는 이제getViewLifecycleOwner()
대신 Kotlin 속성 액세스 구문viewLifecycleOwner
를 사용합니다. aosp/1143821을 참조하세요.
버전 1.2.0-rc01
2019년 10월 23일
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
및 androidx.fragment:fragment-testing:1.2.0-rc01
가 출시되었습니다. 버전 1.2.0-rc01에는 이러한 커밋이 포함되어 있습니다.
새로운 기능
FragmentContainerView
는 이제android:name
외에도class
속성을 지원하며<fragment>
태그의 기능을 미러링합니다. (b/142722242)onCreateView()
,onViewCreated()
또는onActivityCreated()
의LiveData
를 관찰할 때getViewLifecycleOwner()
를 사용하는지 확인하는 새로운 린트 검사가 추가되었습니다. b/137122478을 참조하세요.
버그 수정
- 이제
DialogFragment
의onDismiss
및onCancel
콜백은 실행될 때 전달받은DialogInterface
가 null이 아니며getDialog()
가 null이 아닌 값을 반환한다는 것을 보장합니다. (b/141974033) - 이제
FragmentContainerView
는class
또는android:name
으로 정의된 프래그먼트를 확장의 일부로 추가하여 이후에findFragmentById()
및findFragmentByTag()
가 즉시 작동하도록 합니다. (b/142520327) - 저장 중인 상태로 인한
FragmentContainerView
의IllegalStateException
이 수정되었습니다. (b/142580713) FragmentContainerView
클래스가 난독화될 때FragmentContainerView
의UnsupportedOperationException
이 수정되었습니다. b/142657034를 참조하세요.
알려진 문제
FragmentContainerView
의class
또는android:name
속성을 통해서만 참조되는 프래그먼트는 ProGuard에 의해 자동으로 유지되지 않으므로 각 프래그먼트 클래스의 Keep 규칙을 수동으로 추가해야 합니다. 이 문제가aapt2
를 통해 수정될 때까지FragmentContainerView
로 이동하도록 제안하는 린트 규칙을 사용 중지했습니다. b/142601969를 참조하세요.
버전 1.2.0-beta02
2019년 10월 11일
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
및 androidx.fragment:fragment-testing:1.2.0-beta02
가 출시되었습니다. 버전 1.2.0-beta02에는 이러한 커밋이 포함되어 있습니다.
버그 수정
NavHostFragment
와 같은 문제 해결 사례에서 알 수 있듯이 프래그먼트의onInflate()
가FragmentContainerView
에서 적절한 속성을 받지 못하는 문제가 수정되었습니다. b/142421837을 참조하세요.
버전 1.2.0-beta01
2019년 10월 9일
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
및 androidx.fragment:fragment-testing:1.2.0-beta01
가 출시되었습니다. 버전 1.2.0-beta01에는 이러한 커밋이 포함되어 있습니다.
새로운 기능
FragmentContainerView
에서는android:name
및 선택적android:tag
XML 속성 지원의 추가를 통해 초기 프래그먼트 추가를 위한 지원이 추가되었습니다.<fragment>
태그와 달리FragmentContainerView
는 이면에서 내부적으로 일반FragmentTransaction
을 사용하여 초기 프래그먼트를 추가하므로FragmentContainerView
의FragmentTransaction
작업을 추가로 실행하고 레이아웃에 뷰 결합을 사용할 수 있습니다. (b/139830628, b/141177981)- 이제 프래그먼트에는
<fragment>
를FragmentContainerView
로 바꾸도록 빠른 수정을 제공하는 린트 경고가 포함됩니다. b/139830056을 참조하세요.
버그 수정
androidx.transition
을 사용할 때ClassCastException
이 수정되었습니다. (b/140680619)- Transition
1.3.0-beta01
을 사용할 때 프래그먼트는 이제onDestroyView()
를 전달하기 전에androidx.transition
전환(Fragment1.2.0-alpha03
및 Fragment1.2.0-alpha02
에서 각각 수정된 프레임워크 전환 및 애니메이션 외에도)이 완료될 때까지 기다립니다. (aosp/1119841) - Transition
1.3.0-beta01
을 사용할 때 프래그먼트는 이제 동일한 컨테이너에서 새로운 전환/애니메이션을 시작하기 전에androidx.transition
전환을 적절하게 취소합니다. (aosp/1119841) - API 17 이하에서
FragmentContainerView
사용 시 프래그먼트의 루트 뷰에서androidx.transition
전환을 사용할 때 발생하는 문제가 수정되었습니다. (b/140361893) fragment-testing
아티팩트는 이제 AndroidX 테스트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-alpha04
및 androidx.fragment:fragment-testing:1.2.0-alpha04
가 출시되었습니다. 버전 1.2.0-alpha04에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
Fragment
의getFragmentManager()
및requireFragmentManager()
메서드가 지원 중단되었으며 프래그먼트가 추가되는 null이 아닌FragmentManager
를 반환하는 단일getParentFragmentManager()
메서드로 대체되었습니다(isAdded()
를 사용하여 호출이 안전한지 확인할 수 있음). (b/140574496)- 정적
FragmentManager.enableDebugLogging
메서드가 지원 중단되었습니다. 이제 FragmentManager는FragmentManager
태그에서Log.isLoggable()
을 준수합니다. 이에 따라 앱을 다시 컴파일하지 않고도DEBUG
또는VERBOSE
로깅을 사용 설정할 수 있습니다. aosp/1116591을 참조하세요.
버그 수정
- 이제 다른 프래그먼트의 이탈 애니메이션이 실행되는 동안 프래그먼트가 적절하게 제거됩니다. (b/140574199)
- 프래그먼트가 이전에 호출하지 않았던
Activity.findViewById()
를 호출하는 문제가 수정되었습니다. aosp/1116431을 참조하세요.
버전 1.2.0-alpha03
2019년 9월 5일
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
및 androidx.fragment:fragment-testing:1.2.0-alpha03
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
FragmentContainerView
는 이제final
입니다. b/140133091을 참조하세요.
버그 수정
- 이제
FragmentContainerView
는 백 스택에서 프래그먼트를 삭제할 때 그리기 순서를 올바르게 반대로 바꿉니다. (b/139104187) - 프래그먼트를 표시하는 동시에 새 프래그먼트를 추가할 때 잘못된 애니메이션이 실행되는 문제가 수정되었습니다. (b/111659726)
- 프래그먼트는 이제
onDestroyView()
를 전달하기 전에 전환(Fragment1.2.0-alpha02
에서 수정된 애니메이션 외에도)이 완료될 때까지 기다립니다. b/138741697을 참조하세요.
버전 1.2.0-alpha02
2019년 8월 7일
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
및 androidx.fragment:fragment-testing:11.2.0-alpha02
버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
SavedStateViewModelFactory
가by viewModels()
,by activityViewModels()
,ViewModelProvider
생성자 또는ViewModelProviders.of()
를Fragment
와 함께 사용할 때 사용되는 공장 기본값입니다. (b/135716331) FragmentTransaction
의setTransition
과 함께TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
를 사용할 때의 기본 애니메이션이 Android 10 기기의 활동에서 사용하는 애니메이션과 일치하도록 업데이트되었습니다. (aosp/1012812, aosp/1014730)
API 변경사항
FrameLayout
사용을 대체하여 동적으로 추가된 프래그먼트에 강력히 권장되는 컨테이너로FragmentContainerView
를 도입함으로써 애니메이션 z-순서 문제와 프래그먼트로의 창 인셋 전달 문제가 수정되었습니다. (b/37036000, aosp/985243, b/136494650)- 프래그먼트에 의해 확장되는 뷰에서 포함 프래그먼트를 검색하는 정적
FragmentManager.findFragment(View)
메서드가 추가되었습니다. 또한 Kotlin 확장은fragment-ktx
에서도 사용할 수 있습니다. (aosp/1090757) FragmentTransaction
에add()
및replace()
의 새 오버로드가 추가되었습니다. 이러한 오버로드는 인수의Class<? extends Fragment>
및 선택적Bundle
을 가져옵니다. 이러한 메서드에서는FragmentFactory
를 사용하여 추가할 프래그먼트의 인스턴스를 구성합니다. 또한 구체화된 유형(예:fragmentTransaction.replace<YourFragment>(R.id.container)
)을 사용하는 Kotlin 확장이fragment-ktx
에 추가되었습니다. (b/126124987)@MainThread
주석이Fragment
수명 주기 콜백에 추가되었습니다. (b/127272564)FragmentTransaction
및FragmentManager.BackStackEntry
의 탐색경로 제목 관련 API가 지원 중단되었습니다. (b/138252944)FragmentTransaction
의setTransitionStyle
메서드가 지원 중단되었습니다. aosp/1011537을 참조하세요.FragmentManager
의 많은 메서드가 더 이상abstract
가 아닙니다.FragmentManager
자체는 여전히abstract
이므로 직접 인스턴스화하거나 확장해서는 안 됩니다. 계속해서getSupportFragmentManager()
,getChildFragmentManager()
등에서 기존 인스턴스만 가져와야 합니다.
버그 수정
- Fragment
1.1.0-rc04
에서: 프래그먼트는 이제 프래그먼트에서 표시했던 연기된 전환을 올바르게 취소합니다. (b/138251858) - Fragment
1.1.0-rc03
에서: 시간 초과로postponeEnterTransition()
을 두 번 이상 호출해도 이전 시간 초과가 취소되지 않는 문제가 수정되었습니다. (b/137797118) - Fragment
1.1.0-rc02
에서: 현재 항목을 삭제할 때FragmentPagerAdapter
및FragmentStatePagerAdapter
에서 발생하는 비정상 종료 문제가 수정되었습니다. (b/137209870) - 이제 프래그먼트는
onDestroyView()
를 전달하기 전에 애니메이션이 완료될 때까지 기다립니다. (b/136110528) - 이제 상위 프래그먼트를 애니메이션 처리할 때 하위 프래그먼트와 종속 항목의 프래그먼트 애니메이션이 올바르게 처리됩니다. (b/116675313)
- 공유 요소 전환을 사용하고 팝업과 추가 작업을 결합할 때의
NullPointerException
이 수정되었습니다. (b/120507394) - Robolectric 테스트에서
FragmentPagerAdapter
및FragmentStatePagerAdapter
를 사용할 때IllegalStateException
관련 해결 방법이 추가되었습니다. b/137201343을 참조하세요.
버전 1.2.0-alpha01
2019년 7월 2일
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
및 androidx.fragment:fragment-testing:1.2.0-alpha01
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제 FragmentManager는 프래그먼트의 뷰를 연결한 후
onViewCreated()
를 호출하기 직전에requestApplyInsets()
를 호출하므로 뷰에 항상 올바른 인셋이 사용됩니다. (b/135945162)
버그 수정
replace()
전에setPrimaryNavigationFragment()
를 사용한FragmentTransaction
을 표시할 때 발생하는NullPointerException
이 수정되었습니다. b/134673465를 참조하세요.
버전 1.1.0
버전 1.1.0
2019년 9월 5일
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
및 androidx.fragment:fragment-testing:1.1.0
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
1.0.0 이후 중요 변경사항
- fragment-testing:
fragment-testing
아티팩트는 프래그먼트를 개별적으로 테스트하기 위한FragmentScenario
클래스를 제공합니다. 자세한 내용은 앱 프래그먼트 테스트 문서를 참조하세요. - FragmentFactory: 이제
FragmentManager
에서FragmentFactory
를 설정하여 프래그먼트 인스턴스 생성을 관리하고 인수가 없는 생성자를 보유해야 하는 엄격한 요구사항을 삭제할 수 있습니다. - ViewModel의 Kotlin 속성 위임: 이제
fragment-ktx
아티팩트에는 2개의 Kotlin 속성 위임, 즉 개별 프래그먼트와 연결된 ViewModel에 액세스하기 위한by viewModels()
및 활동으로 범위가 지정된 ViewModel에 액세스하기 위한by activityViewModels()
가 포함되어 있습니다. - 최대 수명 주기: 이제
FragmentTransaction
의setMaxLifecycle()
을 호출하여 프래그먼트의 최대 수명 주기 상태를 설정할 수 있습니다. 이 함수가 이제 지원 중단된setUserVisibleHint()
를 대체합니다.FragmentPagerAdapter
및FragmentStatePagerAdapter
에는 새 생성자가 있습니다. 이 생성자를 통해 새로운 동작으로 전환할 수 있습니다. - FragmentActivity LayoutId 생성자: 이제
FragmentActivity
의 서브클래스는R.layout
ID를 사용하는FragmentActivity
의 생성자를 선택적으로 호출할 수 있으며 이 동작은onCreate()
의setContentView()
를 호출하는 대신 콘텐츠 뷰로 설정해야 하는 레이아웃을 나타냅니다. 그렇지만 서브클래스에 인수가 없는 생성자가 있어야 한다는 요구사항은 변경되지 않습니다. - Fragment LayoutId 생성자: 이제
Fragment
의 서브클래스는R.layout
ID를 사용하는Fragment
의 생성자를 선택적으로 호출할 수 있으며 이 동작은onCreateView()
를 재정의하는 대신 이 프래그먼트에 사용해야 하는 레이아웃을 나타냅니다. 확장된 레이아웃은onViewCreated()
에서 구성할 수 있습니다. - 시간 초과로 연기: 제한 시간을 사용하는
postponeEnterTransition()
의 새 오버로드가 추가되었습니다.
버전 1.1.0-rc04
2019년 8월 7일
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
및 androidx.fragment:fragment-testing:1.1.0-rc04
버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 프래그먼트는 이제 열려 있는 프래그먼트에 관해 연기된 전환을 올바르게 취소합니다. (b/138251858)
버전 1.1.0-rc03
2019년 7월 19일
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
및 androidx.fragment:fragment-testing:1.1.0-rc03
버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 시간 초과로
postponeEnterTransition()
을 두 번 이상 호출해도 이전 시간 초과가 취소되지 않는 문제가 수정되었습니다. (b/137797118)
버전 1.1.0-rc02
2019년 7월 17일
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
및 androidx.fragment-testing:fragment:1.1.0-rc02
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 현재 항목을 삭제할 때
FragmentPagerAdapter
및FragmentStatePagerAdapter
에서 발생하는 비정상 종료 문제가 수정되었습니다. b/137209870을 참조하세요.
버전 1.1.0-rc01
2019년 7월 2일
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
및 androidx.fragment:fragment-testing:1.1.0-rc01
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 이제 프래그먼트는 전환이 실행되는 동안
show()
또는hide()
작업을 사용할 때 공개 상태를 적절하게 업데이트합니다. (b/133385058) replace()
전에setPrimaryNavigationFragment()
를 사용한FragmentTransaction
을 표시할 때 발생하는NullPointerException
이 수정되었습니다. b/134673465를 참조하세요.
버전 1.1.0-beta01
2019년 6월 5일
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
및 androidx.fragment:fragment-testing:1.1.0-beta01
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
- 이제 중첩된 프래그먼트의
androidx.lifecycle.Lifecycle
콜백(특히STARTED
,RESUMED
,PAUSED
,STOPPED
및DESTROYED
관련)이 적절하게 중첩됩니다. (b/133497591) - 프래그먼트의
onCreate()
에 등록된OnBackPressedCallback
인스턴스가 이제 하위 FragmentManager보다 적절하게 우선시됩니다. (b/133175997) - 상위 프래그먼트를 대체 중일 때 하위 프래그먼트는 더 이상 애니메이션 처리되지 않습니다. (b/121017790)
- 이제
animateLayoutChanges="true"
사용 시 프래그먼트 애니메이션 및 전환이 무시되며 프래그먼트가 적절하게 제거되지 않던 문제가 수정되었습니다. b/116257087을 참조하세요.
버전 1.1.0-alpha09
2019년 5월 16일
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
및 androidx.fragment:fragment-testing:1.1.0-alpha09
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
- 이제 기본 탐색 프래그먼트가 변경될 때 프래그먼트가 새
onPrimaryNavigationFragmentChanged(boolean)
메서드에 관한 콜백을 수신합니다. aosp/960857
버그 수정
- 이제 상위 프래그먼트를 삭제할 때 하위 프래그먼트에 의해 팽창된 메뉴 항목이 올바르게 삭제됩니다. b/131581013
버전 1.1.0-alpha08
2019년 5월 7일
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
및 androidx.fragment:fragment-testing:1.1.0-alpha08
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
이 출시는 1.1.0-alpha01 ~ 1.1.0-alpha04 환경설정과 호환되지 않습니다. 이 버전의 프래그먼트를 사용할 경우 1.1.0-alpha05 환경설정으로 업그레이드하세요.
새로운 기능
- 제한 시간이 경과한 후 프래그먼트가
startPostponedEnterTransition()
을 자동으로 호출하는postponeEnterTransition()
의 새 오버로드가 추가되었습니다. b/120803208
API 변경사항
- 브레이킹 체인지:
Bundle
을 가져오는FragmentFactory
instantiate
메서드(이전에 지원 중단됨)가 삭제되었습니다. aosp/953856 - 브레이킹 체인지:
FragmentPagerAdapter
및FragmentStatePagerAdapter
에서RESUME_ONLY_CURRENT_FRAGMENT
및USE_SET_USER_VISIBLE_HINT
상수의 이름이 각각BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
및BEHAVIOR_SET_USER_VISIBLE_HINT
로 변경되었습니다. aosp/954782
버그 수정
setMaxLifecycle()
을 통해 수명 주기를 제한한 프래그먼트가 최종 상태에 도달하기 전에 더 이상 다시 시작되지 않습니다. b/131557151setMaxLifecycle(Lifecycle.State.CREATED)
사용 시 프래그먼트에서 뷰가 제대로 제거됩니다. aosp/954180
버전 1.1.0-alpha07
2019년 4월 25일
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
및 androidx.fragment:fragment-testing:1.1.0-alpha07
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
FragmentTransaction
의setMaxLifecycle()
을 호출하여 프래그먼트의 최대 수명 주기 상태를 설정할 수 있습니다. 이 함수가 이제 지원 중단된setUserVisibleHint()
를 대체합니다.FragmentPagerAdapter
및FragmentStatePagerAdapter
에는 새 생성자가 있습니다. 이 생성자를 통해 새로운 동작으로 전환할 수 있습니다. b/129780800을 참조하세요.
API 변경사항
FragmentScenario
의moveToState(STARTED)
는 이제 API 24 이상인 기기에서만 호출할 수 있습니다. b/129880016을 참조하세요.
동작 변경사항
- (b/129907905)의 결과로 백 스택의 프래그먼트는 호스팅 활동이 다시 생성될 때
onCreateView()
에 관한 콜백을 가져오지 않습니다. 이제 프로그래먼트가 표시 상태가 될 때만(즉, 백 스택이 표시될 때만)onCreateView()
가 호출됩니다.
버그 수정
- XML의
<fragment>
태그와FragmentActivity
또는AppCompatActivity
의contentLayoutId
생성자를 사용할 때 발생하는 문제가 수정되었습니다. (b/129907905) - 구성이 변경된 이후에 백 스택의 프래그먼트가 최소한
CREATED
로 이동하지 않아 ViewModel 및 보관된 하위 프래그먼트가 제대로 처리되지 않던 문제가 수정되었습니다. (b/129593351) - 인스턴스 상태가 저장된 이후에 보관된 프래그먼트의 비동기화로 인해 발생하는
restoreSaveState
의 비정상 종료가 수정되었습니다. (b/130433793, aosp/947824) FragmentManager
에 백 스택이 있을 때 프래그먼트 수명 주기와 함께 추가된OnBackPressedCallback
이 호출되지 않던 문제가 수정되었습니다. 자세한 내용은 androidx.activity 1.0.0-alpha07을 참조하세요. (aosp/948209)- 프래그먼트가 애니메이션에
LAYER_TYPE_HARDWARE
를 더 이상 적용하지 않으므로 특별히 하드웨어 레이어 애니메이션이 필요하다면 애니메이션의 일부로 설정하세요. b/129486478을 참조하세요.
버전 1.1.0-alpha06
2019년 4월 3일
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
및 androidx.fragment:fragment-testing:1.1.0-alpha06
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- FragmentManager에 의해 발생되는 예외 메시지에 이제 프래그먼트의 이름이 포함됩니다. (b/67759402)
API 변경사항
- 이제
Fragment
및FragmentActivity
에는@LayoutRes int
를 사용하는 두 번째 생성자가 포함되어 있으며 이 생성자가@ContentView
로 클래스에 주석을 다는 이전 동작을 대체합니다. 이 접근법은 앱과 라이브러리 모듈 모두에서 적용됩니다. (b/128352521) - 이제 FragmentActivity의
onActivityResult()
가@CallSuper
로 제대로 표시됩니다. (b/127971684) - Bundle 인수를 사용하는 FragmentFactory의
instantiate
메서드가 지원 중단되었으므로 앱은 Bundle을 사용하지 않는 새instantiate
오버로드를 사용해야 합니다. (b/128836103) FragmentScenario
메서드는 이제@StyleRes
로 제대로 주석이 달립니다. (aosp/924193)FragmentTabHost
가 지원 중단되었습니다. (b/127971835)- FragmentActivity의
getThemedContext()
가 삭제되었습니다. (aosp/934078)
버그 수정
- 1.1.0-alpha05에서 새로 추가되는 프래그먼트가 화면에 깜박이던 회귀 문제가 해결되었습니다. (b/129405432)
- popBackStack+replace+popBackStack 시리즈 작업 후 기본 탐색 프래그먼트가 손실되던 문제를 해결했습니다. (b/124332597)
- 프래그먼트 상태 복원 시 활동에서
@ContentView
생성자를 사용할 때 발생하던 문제가 수정되었습니다. b/127313094를 참조하세요. - 아직 FragmentManager에 연결되지 않은 프래그먼트로 기존 타겟 프래그먼트를 대체할 때의
setTargetFragment()
로직이 수정되었습니다. (aosp/932156)
버전 1.1.0-alpha05
2019년 3월 13일
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
및 androidx.fragment:fragment-testing:1.1.0-alpha05
가 출시되었습니다. 이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
@ContentView
주석 조회가 캐시됩니다. (b/123709449 참조)
동작 변경사항
- 이제 다른 FragmentManager에 연결된 프래그먼트를 사용하여
remove()
,hide()
,show()
,detach()
및setPrimaryNavigationFragment()
를 호출하면 자동으로 실패하지 않고IllegalStateException
이 발생합니다. aosp/904301을 참조하세요.
버그 수정
- 이제
FragmentActivity
의onNewIntent
가@CallSuper
로 올바르게 표시됩니다. (b/124120586) getDialog().dismiss()
또는getDialog().cancel()
을 사용할 때DialogFragment
의onDismiss()
가 두 번 호출될 수 있는 문제가 수정되었습니다. (b/126563750)
버전 1.1.0-alpha04
2019년 2월 7일
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
및 androidx.fragment:fragment-testing 1.1.0-alpha04
버전이 출시되었습니다.
새로운 기능
- 확장되어야 하는 레이아웃 XML 파일을 나타낼 수 있는
@ContentView
클래스 주석 지원이onCreateView()
재정의의 대안으로 추가되었습니다.onViewCreated()
에서 관련 작업을 살펴보는 것이 좋습니다. (aosp/837619) - 이제
fragment-testing
은androidx.test:core-ktx
1.1.0 안정화 버전에 종속됩니다. (b/121209673) - 이제
FragmentScenario
와 함께openActionBarOverflowOrOptionsMenu
를 사용하여 프래그먼트 호스팅 옵션 메뉴를 테스트할 수 있습니다. (b/121126668)
API 변경사항
@NonNull Bundle
을 반환하거나IllegalStateException
을 발생시키는requireArguments()
메서드가 추가되었습니다. (b/121196360)getLifecycle()
,getViewLifecycleOwner()
및getViewLifecycleOwnerLiveData()
는 재정의되어서는 안 되며 향후 릴리스에서 완료될 예정이라는 메모가 추가되었습니다. 현재 이 메서드를 재정의하려면 기능 요청을 제출하세요. (aosp/880714)getViewModelStore()
는 재정의해서는 안 되며 향후 릴리스에서 완료될 예정이라는 메모가 추가되었습니다. 현재 이 메서드를 재정의하려면 기능 요청을 제출하세요. (aosp/880713)- 이전 프래그먼트 버전과의 바이너리 호환성 문제가 수정되었습니다. (aosp/887877, aosp/889834)
버그 수정
null
을setTargetFragment()
에 전달할 때 타겟 프래그먼트가 올바르게 삭제됩니다. (aosp/849969)onDestroy()
시 또는 그 이후에 타겟 프래그먼트를 때때로 사용할 수 없던 문제가 수정되었습니다. (b/122312935)- 이제 DialogFragment의 onDismiss()가
onDestroy()
전에 호출됩니다. (aosp/874133, aosp/890734)
버전 1.1.0-alpha03
2018년 12월 17일
새로운 기능
- 프래그먼트는 이제
BundleSavedStateRegistryOwner
를 구현하고 새로 출시된 SavedState 라이브러리에 종속됩니다. [aosp/824380] - 포함 활동과 연결된 ViewModel을 검색하도록
by activityViewModels
Kotlin 속성 위임이 추가되었습니다. [b/119050253] ViewModelStoreOwner
를 가져오는 선택적 람다 메서드를 사용하도록by viewModels
Kotlin 속성 위임이 확장되었습니다. 이러한 확장을 통해val viewModel: MyViewModel by viewModels(::requireParentFragment)
와 같은 코드를 사용하여 상위 프래그먼트 또는 다른 맞춤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를 기반으로 빌드되는 FragmentScenario
및 fragment-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
에 종속됩니다.