Fragment

Phân chia ứng dụng thành nhiều màn hình độc lập được lưu trữ trong một Hoạt động.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 22 tháng 2 năm 2023 1.5.5 - - 1.6.0-alpha06

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc trên Fragment, bạn phải thêm kho lưu trữ Google Maven vào dự án của mình. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun:

Groovy

dependencies {
    def fragment_version = "1.5.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"
}

Kotlin

dependencies {
    val fragment_version = "1.5.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")
}

Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc vào bản dựng.

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 1.6

Phiên bản 1.6.0-alpha06

Ngày 22 tháng 2 năm 2023

Phát hành androidx.fragment:fragment-*:1.6.0-alpha06. Phiên bản 1.6.0-alpha06 bao gồm các thay đổi sau.

Thay đổi về hành vi

  • Giờ đây, lệnh gọi lại onBackStackChangedStarted mới trên onBackStackChangedListener của FragmentManager sẽ được thực thi trước khi các mảnh bắt đầu chuyển sang trạng thái mục tiêu. (I34726)

Phiên bản 1.6.0-alpha05

Ngày 8 tháng 2 năm 2023

Phát hành androidx.fragment:fragment-*:1.6.0-alpha05. Phiên bản 1.6.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, giao diện FragmentManager.OnBackStackChagnedListener cung cấp thêm hai lệnh gọi lại là onBackStackChangeStartedonBackStackChangeCommitted, cho phép bổ sung thêm thông tin và kiểm soát thời điểm xảy ra các thay đổi về ngăn xếp lui trong FragmentManager. (Ib7ce5, b/238686802)

Những thay đổi về API

  • Giờ đây, các API FragmentFragmentManager dùng Intent hoặc IntentSender sẽ được chú giải đúng cách bằng @NonNull để ngăn việc truyền giá trị rỗng vì giá trị rỗng sẽ luôn gây ra sự cố ngay lập tức cho các Android framework API (API khung Android) tương ứng mà các phương thức này gọi vào. (I06fd4)

Phiên bản 1.6.0-alpha04

Ngày 7 tháng 12 năm 2022

Phát hành androidx.fragment:fragment-*:1.6.0-alpha04. Phiên bản 1.6.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • FragmentStrictMode đã thêm một WrongNestedHierarchyViolation mới phát hiện thời điểm một mảnh con được lồng vào Hệ phân cấp khung hiển thị của mảnh mẹ, nhưng không được thêm vào childFragmentManager của mảnh mẹ. (I72521, b/249299268)

Các thay đổi về hành vi

  • Giờ đây, các mảnh sẽ khôi phục trạng thái SavedStateRegistry trước onAttach(), đảm bảo rằng trạng thái có sẵn trong tất cả các phương thức vòng đời dịch chuyển lên. (I1e2b1)

Các thay đổi về API

  • Cấu phần phần mềm fragment-testing-manifest tách các mục nhập tệp kê khai khỏi phần còn lại của các thành phần kiểm thử mảnh. Do đó, bạn có thể làm như sau:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

Điều này giúp tránh xung đột do sự sai lệch phiên bản giữa fragment-testingandroidx.test. (I8e534, b/128612536)

Sửa lỗi

  • Từ Mảnh 1.5.5: Các mảnh sẽ không còn lưu sai trạng thái ViewModel như là một phần trong trạng thái đăng ký khung hiển thị đã lưu. (I10d2b, b/253546214)

Phiên bản 1.6.0-alpha03

Ngày 5 tháng 10 năm 2022

Phát hành androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03androidx.fragment:fragment-testing:1.6.0-alpha03. Phiên bản 1.6.0-alpha03 bao gồm các thay đổi sau.

Các thay đổi về API

  • Giờ đây, các lớp mở rộng DialogFragment sẽ phải gọi super trong phần ghi đè onDismiss(). (I14798, b/238928865)

Sửa lỗi

  • Khắc phục các lỗi hồi quy do việc tích hợp giao diện gọi lại mới của nhà cung cấp (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) để đảm bảo các mảnh luôn nhận được đúng lệnh gọi lại. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)

Phiên bản 1.6.0-alpha02

Ngày 24 tháng 8 năm 2022

Phát hành androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02androidx.fragment:fragment-testing:1.6.0-alpha02. Phiên bản 1.6.0-alpha02 bao gồm các thay đổi sau.

Sửa lỗi

  • Từ Mảnh 1.5.2: Khắc phục tình trạng thực thi giao dịch popBackStack()replace() cùng lúc có thể khiến các mảnh thoát ra chạy không chính xác Animation/Animator. (Ib1c07, b/214835303)

Phiên bản 1.6.0-alpha01

Ngày 27 tháng 7 năm 2022

Phát hành androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01androidx.fragment:fragment-testing:1.6.0-alpha01. Phiên bản 1.6.0-alpha01 bao gồm các thay đổi sau.

Các thay đổi về hành vi

  • Trạng thái Fragment đã lưu được tách hoàn toàn giữa trạng thái thư viện riêng tư (các lớp Parcelable tuỳ chỉnh) và trạng thái do nhà phát triển cung cấp. Trạng thái này luôn được lưu trữ trong Bundle cho phép xác định chính xác vị trí nơi bắt nguồn trạng thái của mảnh. (b/207158202)

Sửa lỗi

  • Từ Mảnh 1.5.1: Khắc phục lỗi hồi quy trong DialogFragmentCallbacksDetector, trong đó việc sử dụng phiên bản tìm lỗi mã nguồn đi kèm với AGP 7.4 sẽ khiến công cụ tìm lỗi mã nguồn gặp sự cố. (b/237567009)

Cập nhật các phần phụ thuộc

Phiên bản 1.5

Phiên bản 1.5.5

Ngày 7 tháng 12 năm 2022

Phát hành androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5androidx.fragment:fragment-testing:1.5.5. Phiên bản 1.5.5 bao gồm các thay đổi sau.

Sửa lỗi

  • Mảnh sẽ không còn lưu sai trạng thái ViewModel như một phần của trạng thái đăng ký khung hiển thị đã lưu. (I10d2b, b/253546214)

Phiên bản 1.5.4

Ngày 24 tháng 10 năm 2022

Phát hành androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4androidx.fragment:fragment-testing:1.5.4. Phiên bản 1.5.4 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi không điều phối được đến các mảnh con khi sử dụng FragmentController tuỳ chỉnh với máy chủ không triển khai giao diện gọi lại của nhà cung cấp (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) và khi gọi hàm điều phối không dùng nữa. (I9b380)

Phiên bản 1.5.3

Ngày 21 tháng 9 năm 2022

Phát hành androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3androidx.fragment:fragment-testing:1.5.3. Phiên bản 1.5.3 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi khiến các mảnh trên ngăn xếp lui nhận được lệnh gọi lại onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory()onConfigurationChanged(). (I34581, I8dfe6, b/242570955)
  • Các mảnh con lồng nhau sẽ không nhận được nhiều lệnh gọi lại onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() hoặc onConfigurationChanged() nữa. (I690b3, Id0096, If9d6b, I2cba2)

Phiên bản 1.5.2

Ngày 10 tháng 8 năm 2022

Phát hành androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2androidx.fragment:fragment-testing:1.5.2. Phiên bản 1.5.2 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề thực thi giao dịch popBackStack()replace() cùng lúc có thể khiến các mảnh thoát ra chạy không chính xác Animation/Animator. (Ib1c07, b/214835303)

Phiên bản 1.5.1

Ngày 27 tháng 7 năm 2022

Phát hành androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1androidx.fragment:fragment-testing:1.5.1. Phiên bản 1.5.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi hồi quy trong DialogFragmentCallbacksDetector mà trong đó việc sử dụng phiên bản tìm lỗi mã nguồn đi kèm với AGP 7.4 sẽ khiến công cụ tìm lỗi mã nguồn gặp sự cố. (b/237567009)

Cập nhật các phần phụ thuộc

Phiên bản 1.5.0

Ngày 29 tháng 6 năm 2022

Phát hành androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0androidx.fragment:fragment-testing:1.5.0. Phiên bản 1.5.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 1.4.0

  • Tích hợp CreationExtrasFragment hiện có khả năng cung cấp ViewModelProvider.Factory không có trạng thái qua CreationExtras của Vòng đời 2.5.0.
  • Tích hợp hộp thoại thành phầnDialogFragment nay sử dụng ComponentDialog thông qua Hoạt động 1.5.0 làm hộp thoại mặc định do onCreateDialog() trả về.
  • Tái cấu trúc trạng thái bản sao đã lưu – Mảnh đã bắt đầu thay đổi cách lưu trạng thái của thực thể. Đây là một nỗ lực để giúp xác định rõ trạng thái đã được lưu trong mảnh và nguồn của trạng thái. Sau đây là một số thay đổi hiện tại:
    • Giờ đây, FragmentManager sẽ lưu giữ trạng thái của thực thể đã lưu vào Bundle thay vì lưu trực tiếp vào Parcelable tuỳ chỉnh.
    • Kết quả được thiết lập qua Fragment Result APIs chưa được phân phối hiện được lưu riêng từ trạng thái nội bộ của FragmentManager.
    • Trạng thái liên kết với từng mảnh riêng lẻ hiện được lưu riêng biệt với trạng thái bên trong của FragmentManager, do đó cho phép bạn tương quan lượng trạng thái đã lưu liên kết giữa một mảnh riêng lẻ với các mã nhận dạng duy nhất có trong nhật ký gỡ lỗi Fragment.

Các thay đổi khác

  • Giờ đây, FragmentStrictMode cho phép các mảnh riêng tư của bên thứ ba bỏ qua các lỗi vi phạm cụ thể bằng cách sử dụng allowViolation() cùng với tên lớp.
  • Ngừng sử dụng Fragment API để cung cấp trình đơn cho ActionBar của hoạt động. API MenuHostMenuProvider được thêm vào Hoạt động 1.4.0 cung cấp một API tương đương có thể thử nghiệm cũng như nhận biết vòng đời mà các mảnh nên sử dụng.

Phiên bản 1.5.0-rc01

Ngày 11 tháng 5 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01androidx.fragment:fragment-testing:1.5.0-rc01. Phiên bản 1.5.0-rc01 bao gồm bao gồm các thay đổi sau.

Tái cấu trúc trạng thái thực thể đã lưu

  • Trạng thái liên kết với từng mảnh riêng lẻ hiện được lưu riêng biệt với trạng thái bên trong của FragmentManager, do đó cho phép bạn so sánh tương quan lượng trạng thái đã lưu liên kết giữa một mảnh riêng lẻ với các mã nhận dạng duy nhất có trong Nhật ký gỡ lỗi mảnh. (a153e0, b/207158202)

Phiên bản 1.5.0-beta01

Ngày 20 tháng 4 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01androidx.fragment:fragment-testing:1.5.0-beta01. Phiên bản 1.5.0-beta01 bao gồm các thay đổi sau.

Các thay đổi về API

  • DialogFragment đã thêm một phương thức dismissNow mới sử dụng commitNow để cân đối với hàm showNow. Lưu ý thao tác này sẽ không khiến Dialog bị loại bỏ ngay mà chỉ cập nhật đồng bộ trạng thái của FragmentManager. (I15c36, b/72644830)

Tái cấu trúc trạng thái thực thể đã lưu

  • Giờ đây, FragmentManager sẽ lưu giữ trạng thái của thực thể đã lưu vào Bundle thay vì lưu trực tiếp vào Parcelable tuỳ chỉnh. Đây là bước đầu để cung cấp thông tin chi tiết hơn về những nội dung được Fragment (Mảnh) lưu. (I93807, b/207158202)
  • Kết quả được thiết lập qua API kết quả mảnh chưa phân phối hiện được lưu riêng trong trạng thái nội bộ của FragmentManager. Việc này giúp bạn có thêm thông tin chi tiết hơn về kết quả đang được lưu như một phần của trạng thái thực thể đã lưu của bạn. (I6ea12, b/207158202)

Phiên bản 1.5.0-alpha05

Ngày 6 tháng 4 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05androidx.fragment:fragment-testing:1.5.0-alpha05. Phiên bản 1.5.0-alpha05 bao gồm các thay đổi sau.

Các thay đổi về API

Phiên bản 1.5.0-alpha04

Ngày 23 tháng 3 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04androidx.fragment:fragment-testing:1.5.0-alpha04. Phiên bản 1.5.0-alpha04 bao gồm các thay đổi sau.

Các thay đổi về API

  • Ngừng sử dụng Fragment API để cung cấp trình đơn cho ActionBar của hoạt động vì chúng liên kết chặt chẽ mảnh với hoạt động của bạn và không thể kiểm thử một cách riêng biệt. API MenuHostMenuProvider được thêm vào Hoạt động 1.4.0-alpha01 cung cấp một API tương đương có thể kiểm thử cũng như nhận biết vòng đời mà các mảnh nên sử dụng. (I50a59, I20758)

Sửa lỗi

  • SavedStateViewFactory hiện hỗ trợ việc sử dụng CreationExtras ngay cả khi được khởi tạo bằng SavedStateRegistryOwner. Nếu bạn cung cấp thông số bổ sung, các đối số đã khởi tạo sẽ bị bỏ qua. (I6c43b, b/224844583)

Phiên bản 1.5.0-alpha03

Ngày 23 tháng 2 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03androidx.fragment:fragment-testing:1.5.0-alpha03. Phiên bản 1.5.0-alpha03 bao gồm các thay đổi sau.

Các thay đổi về API

  • Bây giờ, bạn có thể chuyển CreationExtras vào hàm by viewModels()by activityViewModels(). (Ibefe7, b/217601110)

Các thay đổi về hành vi

Phiên bản 1.5.0-alpha02

Ngày 9 tháng 2 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02androidx.fragment:fragment-testing:1.5.0-alpha02. Phiên bản 1.5.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, FragmentStrictMode cho phép các mảnh riêng tư của bên thứ ba bỏ qua các lỗi vi phạm cụ thể bằng cách sử dụng allowViolation() cùng với tên lớp. (I8f678)

Phiên bản 1.5.0-alpha01

Ngày 26 tháng 1 năm 2022

Phát hành androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01androidx.fragment:fragment-testing:1.5.0-alpha01. Phiên bản 1.5.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

Sửa lỗi

  • Từ Mảnh 1.4.1: FragmentContainerView không còn gửi ngoại lệ về trạng thái không hợp lệ khi mã nhận dạng khung hiển thị được tạo bằng xml có các giá trị âm. (Ic185b, b/213086140)
  • Từ Fragment 1.4.1: Khi sử dụng lambda ownerProducer tuỳ chỉnh với hàm lười by viewModels(), thì hàm lười đó sẽ sử dụng defaultViewModelProviderFactory từ chủ sở hữu đó nếu ViewModelProvider.Factory tuỳ chỉnh không được cung cấp thay vì luôn sử dụng phương thức nhà máy của mảnh. (I56170, b/214106513)
  • Khắc phục sự cố khi truy cập vàoViewModel lần đầu tiên từ lệnh gọi lại registerForActivityResult() của Fragment. (Iea2b3)

Phiên bản 1.4

Phiên bản 1.4.1

Ngày 26 tháng 1 năm 2022

Phát hành androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1androidx.fragment:fragment-testing:1.4.1. Phiên bản 1.4.1 bao gồm các thay đổi sau.

Sửa lỗi

  • FragmentContainerView không còn gửi trường hợp ngoại lệ về trạng thái không hợp lệ khi mã nhận dạng khung hiển thị được tạo bằng xml có các giá trị âm. (Ic185b, b/213086140)
  • Khi sử dụng lambda ownerProducer tuỳ chỉnh với hàm lazy by viewModels(), thì hàm lazy đó sẽ sử dụng defaultViewModelProviderFactory từ chủ sở hữu đó nếu ViewModelProvider.Factory tuỳ chỉnh không được cung cấp thay vì luôn sử dụng phương thức nhà máy của mảnh. (I56170, b/214106513)

Phiên bản 1.4.0

Ngày 17 tháng 11 năm 2021

Phát hành androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0androidx.fragment:fragment-testing:1.4.0. Phiên bản 1.4.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 1.3.0

  • API FragmentStrictMode cung cấp quy trình kiểm tra thời gian chạy cho phép bạn xác minh rằng ứng dụng hoặc thư viện mà bạn phụ thuộc hiện không gọi các API mảnh không dùng nữa. Khi phát hiện lỗi vi phạm, bạn có thể chọn in thông điệp nhật ký, kích hoạt trình nghe tuỳ chỉnh của riêng mình hoặc đóng ứng dụng. Bạn có thể thiết lập FragmentStrictMode.Policy kiểm soát những yếu tố kiểm tra được bật và những yếu tố "bị phạt" được kích hoạt trên FragmentManager thông qua phương thức setStrictModePolicy() mới. Chính sách đó áp dụng cho FragmentManager và áp dụng tạm thời cho tất cả những trình quản lý mảnh con chưa tự đặt chính sách riêng biệt của họ. Xem StrictMode cho Fragment.
  • FragmentContainerView hiện cung cấp phương thức getFragment() trả về mảnh mới nhất được thêm vào vùng chứa. Điều này sử dụng cùng logic như findFragmentById() với mã nhận dạng của FragmentContainerView, nhưng cho phép tạo chuỗi cuộc gọi.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • Giờ đây, FragmentScenario triển khai Closeable, cho phép bạn sử dụng nó với phương thức use của Kotlin hoặc try-with-resources.

  • Thêm FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} để chỉ rõ liệu bạn có muốn bật ảnh động chuyển đổi Hoạt động chuẩn được lấy từ giao diện trong phần chuyển đổi Mảnh hay không.

  • API thử nghiệm của FragmentManager.enableNewStateManager(boolean) đã bị xoá và giờ đây, trình quản lý trạng thái mới là tuỳ chọn duy nhất hiện có.

Nhiều ngăn xếp lui

FragmentManager duy trì ngăn xếp lui được tạo thành từ các giao dịch mảnh sử dụng addToBackStack(). Điều này cho phép bạn hiển thị các giao dịch đó và quay lại trạng thái trước, sử dụng cơ chế Lưu trạng thái với các mảnh để cho phép các mảnh khôi phục lại trạng thái của chúng một cách thích hợp.

Bản phát hành này mở rộng các cơ chế này bằng cách cung cấp 3 API FragmentManager mới: saveBackStack(String name), restoreBackStack(String name)clearBackStack(String name). Các API này sử dụng cùng name với addToBackStack() để lưu trạng thái của FragmentTransaction và trạng thái của mọi mảnh đã được thêm vào trong các giao dịch đó, đồng thời cho phép bạn khôi phục các giao dịch đó và các mảnh của chúng ở trạng thái được giữ nguyên. Điều này cho phép bạn "hoán đổi" hiệu quả giữa nhiều ngăn xếp lui bằng cách lưu ngăn xếp lui hiện tại và khôi phục một ngăn xếp lui đã lưu.

saveBackStack() hoạt động tương tự như popBackStack() ở chỗ đây là phương thức không đồng bộ dẫn đến việc tất cả các giao dịch mảnh quay lại tên cụ thể đó sẽ bị đảo ngược ("bật lên") và mọi mảnh đã thêm vào sẽ bị huỷ bỏ cũng như bị xoá, nhưng lại khác biệt theo một số cách quan trọng:

  • saveBackStack() luôn bao hàm.
  • Không giống như popBackStack() sẽ hiển thị tất cả giao dịch trên ngăn xếp lui nếu không tìm thấy tên đã chỉ định trên ngăn xếp lui hoặc nếu tên rỗng, saveBackStack() sẽ không thực hiện hành động nào nếu trước đây bạn chưa xác nhận một giao dịch mảnh sử dụng addToBackStack() có tên chính xác, không phải là tên rỗng.
  • Trạng thái của tất cả các mảnh đã thêm vào từ những giao dịch đó được lưu lại. Điều này có nghĩa là trạng thái Khung hiển thị của mỗi mảnh được lưu trữ, onSaveInstanceState() của mỗi mảnh được gọi và trạng thái đó được khôi phục, đồng thời bất kỳ thực thể ViewModel nào có liên quan đến các mảnh đó đều được giữ lại (và onCleared() không được gọi trên các mảnh đó).

Các giao dịch mảnh có thể được dùng với saveBackStack() phải đáp ứng một số tiêu chí nhất định:

  • Mọi giao dịch mảnh phải sử dụng setReorderingAllowed(true) để đảm bảo giao dịch có thể được khôi phục dưới dạng một hoạt động nguyên tử.
  • Tập hợp giao dịch đã lưu phải là một tập hợp độc lập (nghĩa là các giao dịch này không được tham chiếu rõ ràng đến bất kỳ mảnh nào bên ngoài tập hợp giao dịch đó) để đảm bảo rằng sau này, những giao dịch đó có thể được khôi phục bất cứ lúc nào, bất kể mọi thay đổi đã thực hiện đối với ngăn xếp lui trong thời gian gián đoạn.
  • Không có mảnh nào được lưu có thể là mảnh được giữ lại hoặc có mảnh được giữ lại trong tập hợp chuyển đổi của các mảnh con để đảm bảo rằng FragmentManager không trả về bất kỳ tham chiếu nào đến các mảnh đã lưu sau khi lưu ngăn xếp lui.

Tương tự như saveBackStack(), nếu trước đó bạn chưa gọi saveBackStack() với cùng tên thì restoreBackStack() sẽ không khôi phục ngăn xếp lui đã lưu trước đó và clearBackStack() sẽ không xoá ngăn xếp lui đã lưu trước đó.

Để biết thêm thông tin, hãy xem phần Nhiều ngăn xếp lui: Tìm hiểu chuyên sâu.

Phiên bản 1.4.0-rc01

Ngày 3 tháng 11 năm 2021

androidx.fragment:fragment:1.4.0-rc01 được phát hành mà không có thay đổi nào từ Fragment 1.4.0-beta01. Phiên bản 1.4.0-rc01 bao gồm các thay đổi sau.

Phiên bản 1.4.0-beta01

Ngày 27 tháng 10 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01androidx.fragment:fragment-testing:1.4.0-beta01. Phiên bản 1.4.0-beta01 bao gồm các thay đổi sau.

Sửa lỗi

  • Các mảnh mẹ hiện sẽ phân phối onHiddenChanged() xuống toàn bộ hệ thống phân cấp trước khi chạy lệnh gọi lại. (Iedc20, b/77504618)
  • Giờ đây, bàn phím sẽ tự động đóng khi chuyển từ một mảnh có bàn phím mở sang một mảnh có chế độ xem tuần hoàn. (I8b842, b/196852211)
  • Giờ đây, DialogFragment sử dụng setReorderingAllowed(true) cho tất cả các giao dịch mà nó tạo ra khi bạn gọi show(), showNow(), hoặc dismiss(). (Ie2c14)
  • Cảnh báo tìm lỗi mã nguồn cực dài của DetachAndAttachFragmentInSameFragmentTransaction đã được rút ngắn xuống còn DetachAndAttachSameFragment. (e9eca3)

Phiên bản 1.4.0-alpha10

Ngày 29 tháng 9 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10androidx.fragment:fragment-testing:1.4.0-alpha10. Phiên bản 1.4.0-alpha10 bao gồm các thay đổi sau.

Tìm lỗi mã nguồn

  • Thêm cảnh báo tìm lỗi mã nguồn DetachAndAttachFragmentInSameFragmentTransaction để phát hiện việc gọi cả detach()attach() trên cùng một Fragment trong cùng FragmentTransaction – vì các thao tác bổ sung này sẽ loại trừ nhau khi bạn thực hiện cùng một giao dịch nên chúng phải được tách thành các giao dịch riêng biệt để thực hiện được điều gì đó. (aosp/1832956, b/200867930)
  • Thêm lỗi tìm lỗi mã nguồn FragmentAddMenuProvider cho việc sử dụng Vòng đời Fragment vào Vòng đời của chế độ xem Fragment khi sử dụng API addMenuProvider của MenuHost. (aosp/1830457, b/200326272)

Các bản cập nhật tài liệu

  • Thông báo về việc ngừng sử dụng những API này hiện được xử lý bởi Activity Result API, cụ thể là startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissionsonRequestPermissionsResult, đã được mở rộng với nhiều chi tiết hơn. (cce80f)
  • Thông báo không dùng nữa cho onActivityCreated() và cả FragmentDialogFragment đã được mở rộng với nhiều thông tin chi tiết hơn. (224db4)

Phiên bản 1.4.0-alpha09

Ngày 15 tháng 9 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09androidx.fragment:fragment-testing:1.4.0-alpha09. Phiên bản 1.4.0-alpha09 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, bạn có thể gọi clearBackStack(name) để xoá mọi trạng thái được lưu trước đó bằng saveBackStack(name). (I70cd7)

Các thay đổi về API

  • Lớp FragmentContainerView đã được viết lại trong Kotlin để đảm bảo rằng hàm getFragment sẽ tôn trọng tính chất rỗng. (If694a, b/189629145)
  • Giờ đây, FragmentStrictMode được viết bằng Kotlin (I11767, b/199183506)

Sửa lỗi

  • Khắc phục vấn đề trong đó trạng thái của một Mảnh (được thêm vào bằng setReorderingAllowed(true), sau đó bị xoá ngay trước khi thực hiện các giao dịch đang chờ xử lý) không được dọn dẹp đúng cách. (I8ccb8)

Phiên bản 1.4.0-alpha08

Ngày 1 tháng 9 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08androidx.fragment:fragment-testing:1.4.0-alpha08. Phiên bản 1.4.0-alpha08 bao gồm các thay đổi sau.

Sửa lỗi

  • Cải thiện tính năng kiểm tra tìm lỗi mã nguồn UseRequireInsteadOfGet để xử lý tốt hơn dấu ngoặc bị thừa. (I2d865)
  • Cải thiện tính năng kiểm tra tìm lỗi mã nguồn UseGetLayoutInflater để xử lý các trường hợp cạnh khác. (Ie5423)

Phiên bản 1.4.0-alpha07

Ngày 18 tháng 8 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07androidx.fragment:fragment-testing:1.4.0-alpha07 mà không có thay đổi đáng kể nào. Phiên bản 1.4.0-alpha07 bao gồm các thay đổi sau.

Phiên bản 1.4.0-alpha06

Ngày 4 tháng 8 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06androidx.fragment:fragment-testing:1.4.0-alpha06. Phiên bản 1.4.0-alpha06 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề với nhiều ngăn xếp lui sau khi hoán đổi nhanh giữa các ngăn xếp lui sẽ xuất hiện dưới dạng IllegalStateException trong khi khôi phục FragmentTransaction hoặc dưới dạng bản sao thứ hai của một mảnh xuất hiện. (I9039f)
  • Khắc phục vấn đề khi FragmentManager giữ lại bản sao của trạng thái đã lưu trước đó qua saveBackStack() ngay cả sau khi đã khôi phục trạng thái đó. (Ied212)
  • Phương thức dismissAllowingStateLoss() của DialogFragment không còn gặp sự cố khi bạn gọi sau khi trạng thái được lưu khi thêm DialogFragment thông qua phương thức show(FragmentTransaction, String). (I84422)

Phiên bản 1.4.0-alpha05

Ngày 21 tháng 7 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05androidx.fragment:fragment-testing:1.4.0-alpha05. Phiên bản 1.4.0-alpha05 bao gồm các thay đổi sau.

Sửa lỗi

  • Từ Fragment 1.3.6: Giờ đây, chế độ xem của Fragment được đặt thành GONE khi sử dụng hide() khi chế độ xem gốc đã được đặt transitionGroup=”true”. (aosp/1766655, b/193603427)
  • Từ Fragment 1.3.6: Giờ đây, FragmentActivity sẽ luôn mở khoá trạng thái đã lưu là thao tác đầu tiên trong phương thức gọi lại trong vòng đời mà nó ghi đè. (I6db7a)

Cập nhật các phần phụ thuộc

Phiên bản 1.4.0-alpha04

Ngày 30 tháng 6 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04androidx.fragment:fragment-testing:1.4.0-alpha04. Phiên bản 1.4.0-alpha04 bao gồm các thay đổi sau.

Các thay đổi về API

  • Giờ đây, FragmentManager sử dụng SavedStateRegistry trong phần nâng cao để lưu trạng thái của nó. Phương thức saveAllState()restoreSavedState() cũng không còn được dùng nữa trong FragmentController. Nếu đang sử dụng FragmentController để lưu trữ các mảnh bên ngoài FragmentActivity, thì bạn nên để FragmentHostCallbacks triển khai SavedStateRegistryOwner. (Iba68e, b/188734238)

Sửa lỗi

  • Khắc phục vấn đề không thực hiện được lệnh gọi đến saveBackStack() trong quá trình hỗ trợ nhiều ngăn xếp lui khi chạy FragmentTransaction sử dụng replace() vào cùng thời điểm đó. (I73137)
  • Sửa lỗi NullPointerException xảy ra sau khi khôi phục theo cách thủ công một ngăn xếp lui đã lưu chứa nhiều giao dịch khi sử dụng API restoreBackStack() để hỗ trợ nhiều ngăn xếp lui. Việc này cũng giúp khắc phục vấn đề khi setReorderingAllowed(true) không được kiểm tra cho tất cả các giao dịch. (I8c593)
  • Khắc phục vấn đề khi FragmentManager tiếp tục khôi phục trạng thái đã lưu trước đó không đúng cách ngay cả sau khi những mảnh đó đã bị xoá khỏi FragmentManager, do đó, trạng thái đã lưu sẽ liên tục tăng theo thời gian. (I1fb8e)

Phiên bản 1.4.0-alpha03

Ngày 16 tháng 6 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03androidx.fragment:fragment-testing:1.4.0-alpha03. Phiên bản 1.4.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Đối với tất cả các lớp Fragment StrictMode Violation, thông báo lỗi đã được cập nhật chi tiết hơn để giải thích thông tin chi tiết về lỗi vi phạm. (b/187871638)
    • FragmentTagUsageViolation hiện có thông báo lỗi chi tiết hơn về vùng chứa mẹ chứa mảnh đáng ra sẽ được thêm vào. (Ic33a7)
    • Giờ đây, WrongFragmentContainerViolation có thông báo lỗi chi tiết hơn bao gồm vùng chứa mà mảnh được thêm vào. (Ib55f8)
    • Giờ đây, các lớp trường hợp sử dụng cho TargetFragmentUsageViolation sẽ có thông báo lỗi chi tiết hơn để cho biết mảnh gây ra lỗi vi phạm và mọi thông tin có trong đó. (Icc6ac)
    • Các lớp mở rộng RetainInstanceUsageViolation hiện có thông báo lỗi chi tiết hơn bao gồm mảnh gây ra lỗi vi phạm. (I6bd55)
    • Giờ đây, FragmentReuseViolation có thông báo lỗi chi tiết hơn bao gồm mã nhận dạng trước đó của mảnh. (I28ce2)
    • Giờ đây, SetUserVisibleHintViolation hiện có thêm thông báo lỗi chi tiết bao gồm gợi ý có thể nhìn thấy của người dùng đã được đặt là gì. (Ib2d5f)

Các thay đổi về hành vi

  • Huỷ bỏ hạn chế gọi fitsSystemWindows trên FragmentContainerView – điều này không làm ứng dụng của bạn gặp sự cố nữa. (6b8ddd, b/190622202)

Sửa lỗi

  • Từ Mảnh 1.3.5: Sửa lỗi hồi quy trong phần chuyển đổi thành phần chung trong Mảnh 1.3.4 bởi aosp/1679887. Giờ đây, Mảnh xử lý đúng cách các nhóm chuyển đổi (được đặt trực tiếp qua transitionGroup="true" hoặc gián tiếp qua transitionName hoặc background) và các thành phần chung sẽ không còn gửi IndexOutOfBoundsException nữa. (I16484, b/188679569, b/188969304)
  • FragmentManager sẽ không còn gặp sự cố khi bạn cố gắng ẩn một mảnh đã xoá. (I573dd, b/183634730)
  • Quy trình kiểm tra tìm lỗi mã nguồn OnCreateDialogIncorrectCallback sẽ không còn xảy ra sự cố khi đánh giá một biến cấp cao nhất. (0a9efa, b/189967522)

Phiên bản 1.4.0-alpha02

Ngày 2 tháng 6 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02androidx.fragment:fragment-testing:1.4.0-alpha02. Phiên bản 1.4.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, FragmentStrictMode sẽ luôn ghi lại các lỗi vi phạm khi bạn bật tính năng ghi nhật ký thông qua FragmentManager, bất kể có áp dụng chính sách chế độ nghiêm ngặt hiện tại hay không. (I02df6, b/187872638)
  • Giờ đây, FragmentStrictMode hỗ trợ việc miễn trừ lớp Fragment cụ thể khỏi chế độ nghiêm ngặt Violation, cho phép lớp đó có thể bỏ qua mọi lỗi. (Ib4e5d, b/184786736)

  • Lớp FragmentStrictMode Violation đã được mở rộng để thêm thông tin về cấu trúc dựa trên từng lỗi vi phạm. Điều này cho phép bạn xác minh chính xác nguyên nhân gây ra lỗi vi phạm cùng với mảnh vi phạm (If5118, b/187871150), mỗi Violation chứa nội dung sau:

    • Giờ đây, WrongFragmentContainerViolation chứa ViewGroupFragment đang cố thêm vào. (I83c75, b/187871150)
    • TargetFragmentUsageViolationđã mở rộng sang SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolationGetTargetFragmentRequestCodeUsageViolation, với SetTargetFragmentUsageViolation chứa đoạn mảnh mục tiêu và mã yêu cầu. (I741b4, b/187871150)
    • Giờ đây, SetUserVisibleHintViolation chứa giá trị boolean được chuyển vào setUserVisibleHint(). (I00585, b/187871150)
    • Giờ đây, FragmentTagUsageViolation chứa ViewGroup mà thẻ <fragment> đang cố gắng tăng cường một mảnh lên.(I5dbbc, b/187871150)
    • Giờ đây, FragmentReuseViolation chứa mã nhận dạng duy nhất của thực thể trước đó của Fragment đã gây ra lỗi vi phạm. (I0544d, b/187871150)
    • Giờ đây, RetainInstanceUsageViolation là lớp trừu tượng và có 2 lớp con là SetRetainInstanceUsageViolationGetRetainInstanceUsageViolation, đại diện cho hai trường hợp của loại lỗi vi phạm. (Ic81e5, b/187871150)

Các thay đổi về hành vi

  • Giờ đây, FragmentContainerView sẽ gửi một ngoại lệ khi tìm cách thay đổi thuộc tính fitsSystemWindow theo phương thức lập trình hoặc thông qua XML. Các giá trị lồng ghép phải được xử lý theo từng chế độ xem của mảnh. (Ie6651, b/187304502)

Phiên bản 1.4.0-alpha01

Ngày 18 tháng 5 năm 2021

Phát hành androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01androidx.fragment:fragment-testing:1.4.0-alpha01. Phiên bản 1.4.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • FragmentContainerView hiện cung cấp phương thức getFragment() trả về mảnh mới nhất được thêm vào vùng chứa. Điều này sử dụng cùng logic như findFragmentById() với mã nhận dạng của FragmentContainerView, nhưng cho phép tạo chuỗi cuộc gọi. (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • Thêm FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} để chỉ rõ liệu bạn có muốn bật ảnh động chuyển đổi Hoạt động chuẩn được lấy từ giao diện trong phần chuyển đổi Mảnh hay không. (I46652)

Nhiều ngăn xếp lui

FragmentManager duy trì ngăn xếp lui được tạo thành từ các giao dịch mảnh sử dụng addToBackStack(). Điều này cho phép bạn hiển thị các giao dịch đó và quay lại trạng thái trước, sử dụng cơ chế Lưu trạng thái với các mảnh để cho phép các mảnh khôi phục lại trạng thái của chúng một cách thích hợp.

Bản phát hành này mở rộng các cơ chế này bằng cách cung cấp 2 API FragmentManager mới: saveBackStack(String name)restoreBackStack(String name). Các API này sử dụng cùng name với addToBackStack() để lưu trạng thái của FragmentTransaction và trạng thái của mọi mảnh đã được thêm vào trong các giao dịch đó, đồng thời cho phép bạn khôi phục các giao dịch đó và các mảnh của chúng ở trạng thái được giữ nguyên. Điều này cho phép bạn "hoán đổi" hiệu quả giữa nhiều ngăn xếp lui bằng cách lưu ngăn xếp lui hiện tại và khôi phục một ngăn xếp lui đã lưu.

saveBackStack() hoạt động tương tự như popBackStack() ở chỗ đây là phương thức không đồng bộ dẫn đến việc tất cả các giao dịch mảnh quay lại tên cụ thể đó sẽ bị đảo ngược ("bật lên") và mọi mảnh đã thêm vào sẽ bị huỷ bỏ cũng như bị xoá, nhưng lại khác biệt theo một số cách quan trọng:

  • saveBackStack() luôn bao hàm.
  • Không giống như popBackStack() sẽ hiển thị tất cả giao dịch trên ngăn xếp lui nếu không tìm thấy tên đã chỉ định trên ngăn xếp lui hoặc nếu tên rỗng, saveBackStack() sẽ không thực hiện hành động nào nếu trước đây bạn chưa xác nhận một giao dịch mảnh sử dụng addToBackStack() có tên chính xác, không phải là tên rỗng.
  • Trạng thái của tất cả các mảnh đã thêm vào từ những giao dịch đó được lưu lại. Điều này có nghĩa là trạng thái Khung hiển thị của mỗi mảnh được lưu trữ, onSaveInstanceState() của mỗi mảnh được gọi và trạng thái đó được khôi phục, đồng thời bất kỳ thực thể ViewModel nào có liên quan đến các mảnh đó đều được giữ lại (và onCleared() không được gọi trên các mảnh đó).

Các giao dịch mảnh có thể được dùng với saveBackStack() phải đáp ứng một số tiêu chí nhất định:

  • Mọi giao dịch mảnh phải sử dụng setReorderingAllowed(true) để đảm bảo giao dịch có thể được khôi phục dưới dạng một hoạt động nguyên tử.
  • Tập hợp giao dịch đã lưu phải là một tập hợp độc lập (nghĩa là các giao dịch này không được tham chiếu rõ ràng đến bất kỳ mảnh nào bên ngoài tập hợp giao dịch đó) để đảm bảo rằng sau này, những giao dịch đó có thể được khôi phục bất cứ lúc nào, bất kể mọi thay đổi đã thực hiện đối với ngăn xếp lui trong thời gian gián đoạn.
  • Không có mảnh nào được lưu có thể là mảnh được giữ lại hoặc có mảnh được giữ lại trong tập hợp chuyển đổi của các mảnh con để đảm bảo rằng FragmentManager không trả về bất kỳ tham chiếu nào đến các mảnh đã lưu sau khi lưu ngăn xếp lui.

Tương tự như saveBackStack(), restoreBackStack() không thực hiện bất kỳ thao tác nào nếu trước đó bạn chưa gọi saveBackStack() với cùng tên. (b/80029773)

Fragment StrictMode

API FragmentStrictMode cung cấp quy trình kiểm tra thời gian chạy cho phép bạn xác minh rằng ứng dụng hoặc thư viện mà bạn phụ thuộc hiện không gọi các API mảnh không dùng nữa. Khi phát hiện lỗi vi phạm, bạn có thể chọn in thông điệp nhật ký, kích hoạt trình nghe tuỳ chỉnh của riêng mình hoặc đóng ứng dụng. Bạn có thể thiết lập FragmentStrictMode.Policy kiểm soát những yếu tố kiểm tra được bật và những yếu tố "bị phạt" được kích hoạt trên FragmentManager thông qua phương thức setStrictModePolicy() mới. Chính sách đó áp dụng cho FragmentManager và áp dụng tạm thời cho tất cả những trình quản lý mảnh con chưa tự đặt chính sách riêng biệt của họ. (#123, #131, #150, b/143774122)

  • detectFragmentReuse() phát hiện xem bản sao Fragment đã xoá trước đó có được thêm lại vào FragmentManager hay không. Bạn không được tương tác hoặc giữ lại một tệp tham chiếu đến thực thể Fragment sau khi thực thể đó bị huỷ và xoá khỏi FragmentManager. (#142, b/153738653)
  • detectFragmentTagUsage() phát hiện khi bạn sử dụng thẻ <fragment> trong XML bố cục. Bạn phải luôn sử dụng FragmentContainerView khi tăng cường các mảnh như một phần của bố cục. (#141, b/153738235)
  • detectWrongFragmentContainer() phát hiện khi bạn thêm một mảnh vào vùng chứa không phải là FragmentContainerView. Bạn phải luôn sử dụng FragmentContainerView làm vùng chứa cho các mảnh trong bố cục của mình. (#146, b/181137036)
  • detectRetainInstanceUsage() phát hiện thời điểm bạn sử dụng API setRetainInstance() hoặc getRetainInstance() không dùng nữa. (#140, b/153737954)
  • detectSetUserVisibleHint() phát hiện thời điểm bạn sử dụng API setUserVisibleHint() không dùng nữa. (#136, b/153738974)
  • detectTargetFragmentUsage() phát hiện thời điểm bạn sử dụng API setTargetFragment(), getTargetFragment() hoặc getTargetRequestCode() không dùng nữa. (#139, b/153737745)

Các thay đổi về API

Kiểm tra tìm lỗi mã nguồn mới

  • Giờ đây, tính năng kiểm tra tìm lỗi mã nguồn mới UseGetLayoutInflater sẽ cảnh báo khi sử dụng LayoutInflater.from(Context) trong DialogFragment – bạn phải luôn sử dụng phương thức getLayoutInflater() của mảnh hộp thoại để sử dụng phương thức phù hợp cho LayoutInflater. (#156, b/170781346)
  • Giờ đây, tính năng kiểm tra tìm lỗi mã nguồn DialogFragmentCallbacksDetector cảnh báo khi gọi setOnCancelListener hoặc setOnDismissListener trong phương thức onCreateDialog() của DialogFragment – những trình nghe này thuộc sở hữu của DialogFragment và bạn nên ghi đè onCancel()onDismiss() để nhận các lệnh gọi lại này. (#171, b/181780047, b/187524311)

Sửa lỗi

  • Từ Fragment 1.3.4: Khắc phục lỗi hồi quy trong Fragment 1.3.3 khi sử dụng API ViewTreeViewModelStoreOwner.get() với ViewModelProvider hoặc phương thức Jetpack Compose của viewModel() trong Fragment. Giờ đây, các trường hợp sử dụng này dùng chính xác ViewModelProvider.Factory do Fragment của bạn cung cấp nếu ghi đè getDefaultViewModelProviderFactory() (như @AndroidEntryPoint Fragment được chú thích sẽ thực hiện khi sử dụng Hilt). Nếu bạn không ghi đè phương thức đó, thì một SavedStateViewModelFactory để lưu và khôi phục trạng thái phương thức đó cùng với khung hiển thị của Mảnh sẽ được tạo dưới dạng nhà máy mặc định. (I5cbfa, b/186097368)
  • Từ Fragment 1.3.4: Khi sử dụng FragmentContainerView trên API 29, các phần lồng ghép sẽ không còn được gửi đi vô thời hạn, nhờ vậy khắc phục các vấn đề với thực thể BottomNavigationBarFloatingActionButton. (I1bb78, b/186012452)
  • Từ Fragment 1.3.4: Giờ đây, bạn có thể truy xuất Parcelable của mình từ gói kết quả mảnh sau khi bị buộc tắt. (I65932, b/187443158)
  • Từ Parcelable 1.3.4: Khi chuyển đổi thành phần chung trên ViewGroup, nếu ViewGroup đã đặt transitionGroup thành false thì giờ đây, phương thức này sẽ chuyển đổi đúng cách. (I99675)

Đóng góp bên ngoài

Phiên bản 1.3

Phiên bản 1.3.6

Ngày 21 tháng 7 năm 2021

Phát hành androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6androidx.fragment:fragment-testing:1.3.6. Phiên bản 1.3.6 bao gồm các thay đổi sau.

Sửa lỗi

  • Từ Mảnh 1.4.0-alpha03: FragmentManager sẽ không còn gặp sự cố khi bạn cố gắng ẩn một mảnh đã xoá. (I573dd, b/183634730)
  • Giờ đây, chế độ xem của Fragment được đặt thành GONE khi sử dụng hide() khi chế độ xem gốc đã được đặt transitionGroup=”true”. (aosp/1766655, b/193603427)
  • Giờ đây, FragmentActivity sẽ luôn mở khoá trạng thái đã lưu là thao tác đầu tiên trong phương thức gọi lại trong vòng đời mà nó ghi đè. (I6db7a)

Cập nhật các phần phụ thuộc

Phiên bản 1.3.5

Ngày 16 tháng 6 năm 2021

Phát hành androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5androidx.fragment:fragment-testing:1.3.5. Phiên bản 1.3.5 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi hồi quy trong phần chuyển đổi thành phần chung trong Mảnh 1.3.4 bởi aosp/1679887. Giờ đây, Mảnh xử lý đúng cách các nhóm chuyển đổi (được đặt trực tiếp qua transitionGroup="true" hoặc gián tiếp qua transitionName hoặc background) và các thành phần chung sẽ không còn gửi IndexOutOfBoundsException nữa. (I16484, b/188679569, b/188969304)

Phiên bản 1.3.4

Ngày 18 tháng 5 năm 2021

Phát hành androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4androidx.fragment:fragment-testing:1.3.4. Phiên bản 1.3.4 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi hồi quy trong Mảnh 1.3.3 khi sử dụng API ViewTreeViewModelStoreOwner.get() với ViewModelProvider hoặc phương thức Jetpack Compose của viewModel() trong một Mảnh khi sử dụng Hilt. Giờ đây, các trường hợp sử dụng này dùng chính xác ViewModelProvider.Factory do Fragment của bạn cung cấp nếu ghi đè getDefaultViewModelProviderFactory() (như @AndroidEntryPoint Fragment được chú thích sẽ thực hiện). Nếu bạn không ghi đè phương thức đó, thì một SavedStateViewModelFactory để lưu và khôi phục trạng thái phương thức đó cùng với khung hiển thị của Mảnh sẽ được tạo dưới dạng nhà máy mặc định. (I5cbfa, b/186097368)
  • Khi sử dụng FragmentContainerView trên API 29, các phần lồng ghép sẽ không còn được gửi đi vô thời hạn, nhờ đó khắc phục các vấn đề với thực thể BottomNavigationBarFloatingActionButton. (I1bb78, b/186012452)
  • Giờ đây, bạn có thể truy xuất Parcelable của mình từ gói kết quả mảnh sau khi bị buộc tắt. (I65932, b/187443158)
  • Khi chuyển đổi thành phần chung trên ViewGroup, nếu ViewGroup đã đặt transitionGroup thành false thì giờ đây, phương thức này sẽ chuyển đổi đúng cách. (I99675)

Phiên bản 1.3.3

Ngày 21 tháng 4 năm 2021

Phát hành androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3androidx.fragment:fragment-testing:1.3.3. Phiên bản 1.3.3 bao gồm các thay đổi sau.

Tính năng mới

  • Việc dùng SavedStateViewModelFactory hiện hiệu quả khi được sử dụng với SavedStateRegistryOwner được trả về bằng cách sử dụng ViewTreeSavedStateRegistryOwner.get() với Chế độ xem của Fragment. (I21acf, b/181577191)

Sửa lỗi

  • Khắc phục lỗi hồi quy trong Mảnh1.3.2 khiến ảnh động popEnter không chạy khi hiển thị FragmentTransaction bao gồm một thao tác setPrimaryNavFragment như các lệnh được NavHostFragment sử dụng. (I38c87, b/183877426)
  • Giờ đây, FragmentContainerView đảm bảo rằng mỗi Fragment sẽ được gửi một tập hợp WindowInsets mới, nhờ đó đảm bảo rằng mỗi mảnh hiện có thể sử dụng các phần lồng ghép một cách độc lập. (I63f68, b/172153900)
  • Giờ đây, DialogFragment xử lý đúng cách các trường hợp mà mảnh con được thêm vào vùng chứa có cùng mã nhận dạng với vùng chứa trong lớp Dialog tuỳ chỉnh của bạn, khắc phục các vấn đề về hệ phân cấp khung hiển thị khi sử dụng lại các mã nhận dạng được các hộp thoại như BottomSheetDialog sử dụng nội bộ. (Ie6279, b/180021387)
  • Giờ đây, FragmentManager.dump() sẽ thụt lề đúng cách mảnh đầu tiên trong danh sách các mảnh đang hoạt động. (If5c33, b/183705451)

Sửa lỗi trình quản lý trạng thái mới

  • Giờ đây, trình quản lý trạng thái mảnh mới sẽ xử lý đúng cách các lượt chuyển đổi thoát bằng các thao tác ẩn. (I9e4de, b/184830265)

Phiên bản 1.3.2

Ngày 24 tháng 3 năm 2021

Phát hành androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2androidx.fragment:fragment-testing:1.3.2. Phiên bản 1.3.2 bao gồm các thay đổi sau.

Sửa lỗi trình quản lý trạng thái mới

  • Khi chạy cả hai thao tác popBackStack()commit(), thao tác cuối cùng sẽ đặt hướng cho tất cả các ảnh động thay vì chạy một số ảnh động bật lên và một số ảnh động nhập. (I7072e, b/181142246)
  • Các khung hiển thị trong hệ thống phân cấp thành phần chung sẽ không còn xoá tên lượt chuyển đổi khi chuyển đổi thành phần chung. (I4d4a6, b/179934757)

Thông tin cập nhật về phần phụ thuộc

  • Giờ đây, Fragment phụ thuộc vàoHoạt động 1.2.2, khắc phục vấn đề với tính năng kiểm tra tìm lỗi mã nguồn InvalidFragmentVersionForActivityResult của Hoạt động khi sử dụng Fragment 1.3.1 trở lên.
  • Giờ đây, Fragment tuỳ thuộc vào Vòng đời 2.3.1.

Phiên bản 1.3.1

Ngày 10 tháng 3 năm 2021

Phát hành androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1androidx.fragment:fragment-testing:1.3.1. Phiên bản 1.3.1 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, các hộp thoại trong DialogFragment có thể truy cập vào các chủ sở hữu của ViewTree thông qua DecorView, đảm bảo rằng bạn có thể sử dụng DialogFragment với ComposeView. (Ib9290, b/180691023)

Sửa lỗi

  • Giờ đây, Mảnh được tăng cường vào hoạt động RESUMED trước đó bằng cách sử dụng FragmentContainerView sẽ hiển thị đúng cách sau khi thay đổi cấu hình. (Ie14c8, b/180538371)
  • Không còn } thừa ở cuối mảnh toString() (I54705, b/177761088)
  • Các phương thức bị ghi đè trong FragmentActivity giờ đây kế thừa đúng phương thức cơ sở javaDoc (I736ce, b/139548782)
  • Tài liệu dành cho setFragmentResultsetFragmentResultListener đã cập nhật tài liệu thông số để cho biết các giá trị rỗng (I990ba, b/178348386) không còn được chấp nhận nữa

Sửa lỗi trình quản lý trạng thái mới

  • Khắc phục vấn đề rò rỉ bộ nhớ trong các mảnh do mFocusedView (Ib4e9e, b/179925887 gây ra)
  • Giờ đây, các mảnh gọi đúng onCreateOptionsMenu khi sử dụng giao dịch ẩn/hiển thị (I8bce8, b/180255554)
  • Giờ đây, các mảnh con có chuyển đổi bắt đầu trước khi mảnh được bố trí sẽ hiển thị đúng cách RESUMED (Ic11e6, b/180825150)
  • Giờ đây, các mảnh tăng cường bằng cách sử dụng thẻ <fragment> sẽ luôn chuyển thành RESUMED (I452ac, (I9fa49)

Thông tin cập nhật về phần phụ thuộc

Phiên bản 1.3.0

Ngày 10 tháng 2 năm 2021

Phát hành androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0androidx.fragment:fragment-testing:1.3.0. Phiên bản 1.3.0 bao gồm các thay đổi sau.

Thay đổi lớn kể từ phiên bản 1.2.0

  • Trình quản lý trạng thái mới: Việc ghi lại nội bộ đáng kể của FragmentManager đã khắc phục nhiều vấn đề xung quanh việc gửi các sự kiện trong vòng đời, ảnh động và chuyển đổi cũng như cách xử lý các phần bị hoãn.
  • Tích hợp API kết quả hoạt động: Hỗ trợ thêm cho API ActivityResultRegistry có trong Hoạt động 1.2.0 để xử lý startActivityForResult()+onActivityResult() cũng như requestPermissions()+onRequestPermissionsResult() chạy mà không có phương thức ghi đè trong Fragment ngoài việc cung cấp nội dung hấp dẫn để thử nghiệm những quy trình này. Hãy xem phần cập nhật Nhận kết quả từ một hoạt động.

    • Bản phát hành này khắc phục một số vấn đề xung quanh mã yêu cầu không hợp lệ và việc gửi đi các yêu cầu cấp quyền khiến Activity Result API không thể hoạt động trên các phiên bản FragmentActivity trước. Bạn phải nâng cấp lên Fragment 1.3.0 để sử dụng Activity Result API trong FragmentActivity hoặc AppCompatActivity.
  • Fragment Result API: Thêm tính năng hỗ trợ chuyển kết quả giữa 2 mảnh thông qua API mới trên FragmentManager. Tính năng này hoạt động đối với các mảnh phân cấp (mẹ/con), DialogFragments và các mảnh trong Điều hướng và đảm bảo rằng kết quả chỉ được gửi đến Mảnh của bạn trong khi ít nhất STARTED. Ngừng sử dụng các API mảnh mục tiêu và thay bằng các API mới này. Xem phần Nhận kết quả bằng cách sử dụng Fragment Result API.

  • FragmentOnAttachListener: Ngừng sử dụng lệnh gọi lại onAttachFragment() trên FragmentActivityFragment. FragmentOnAttachListener mới đã được thêm vào để cung cấp một tuỳ chọn thay thế linh hoạt hơn, cho phép uỷ quyền onAttachFragment() tách riêng, các trình nghe có thể thử nghiệm và hỗ trợ thêm trình nghe cho FragmentManager, trừ FragmentManager con trực tiếp.

  • Các điểm cải tiến FragmentScenario: Lớp FragmentScenario từ cấu phần phần mềm fragment-testing đã được viết lại trong Kotlin và có một số điểm cải tiến:

    • Giờ đây, FragmentScenario sử dụng setMaxLifecycle() để triển khai moveToState(), đảm bảo hành vi nhất quán trên tất cả các cấp độ API và phân tách trạng thái của Mảnh khỏi Hoạt động cơ bản.
    • Giờ đây, FragmentScenario hỗ trợ đặt Lifecycle.State ban đầu để hỗ trợ xác nhận trạng thái của mảnh trước khi chuyển sang từng Lifecycle.State lần đầu tiên.
    • Hiện có một phương án thay thế cho API FragmentScenario của onFragment ở dạng phương thức tiện ích mở rộng được sửa đổi Kotlin withFragment mà cho phép bạn trả về một giá trị. Đáng chú ý là phương án này sẽ gửi lại các ngoại lệ xuất hiện trong khối đã cho.
  • Hỗ trợ ViewTree: Giờ đây, Fragment hỗ trợ các API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View)ViewTreeSavedStateRegistryOwner mà bạn đã thêm vào Vòng đời 2.3.0SavedState 1.1.0 sao cho chế độ này sẽ trả về Mảnh dưới dạng ViewModelStoreOwner, cũng như SavedStateRegistryOwnerLifecycleOwner gắn với Vòng đời khung hiển thị của mảnh khi sử dụng View trong phạm vi Fragment.

  • Các thay đổi về ảnh động TRANSIT_: Các hiệu ứng mặc định của mảnh là TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE hiện sử dụng Animator thay vì Animation. Các tài nguyên dùng để tạo ra các ảnh động này hiện đang ở chế độ riêng tư.

  • setRetainInstance() không dùng nữa: Ngừng sử dụng phương thức setRetainInstance() trên Mảnh. Với sự ra mắt của ViewModels, các nhà phát triển có API cụ thể cho việc giữ lại trạng thái liên kết được với các biểu đồ Hoạt động, Mảnh và Điều hướng. Điều này cho phép các nhà phát triển sử dụng một Mảnh thông thường, không được giữ lại và giữ trạng thái cụ thể mà họ muốn giữ lại riêng biệt, tránh việc bị rò rỉ nguồn trong khi vẫn duy trì các thuộc tính hữu ích của từng trường hợp tạo và huỷ trạng thái được giữ lại (cụ thể là hàm khởi tạo của ViewModel và lệnh gọi lại onCleared() mà nó nhận được).

  • Không dùng bộ chuyển đổi ViewPager 1 nữa: Với bản phát hành ViewPager2 1.0.0, lớp FragmentPagerAdapterFragmentStatePagerAdapter để tương tác với ViewPager đã ngừng hoạt động. Hãy xem Di chuyển từ ViewPager sang ViewPager2.

Phiên bản 1.3.0-rc02

Ngày 27 tháng 1 năm 2021

Phát hành androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02androidx.fragment:fragment-testing:1.3.0-rc02. Phiên bản 1.3.0-rc02 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề khi DialogFragment mẹ sẽ xuất hiện trên DialogFragment con sau khi thay đổi cấu hình; giờ đây, các đoạn hộp thoại con luôn xuất hiện phía trên một đoạn hộp thoại mẹ. (I30806, b/177439520)
  • Khắc phục vấn đề khi việc thực hiện một thao tác hide với Animation sẽ khiến mảnh ẩn xuất hiện ở cuối ảnh động. (I57e22, b/175417675)
  • Giờ đây, các mảnh có chuyển đổi được thêm trước khi phân cấp chế độ xem được đính kèm đúng cách hiện đã đạt đến RESUMED. (I1fc1d, b/177154873)

Sửa lỗi trình quản lý trạng thái mới

  • Giờ đây, chế độ xem của Mảnh Lifecycle xử lý đúng cách các trường hợp chế độ xem của Mảnh bị huỷ trước khi Lifecycle đạt đến CREATED, tránh các trường hợp ngoại lệ nêu rõ “không có sự kiện nào bị HUỶ”. (eda2bd, b/176138645)
  • Giờ đây, Mảnh sử dụng Animator sẽ hiển thị theo đúng thứ tự khi sử dụng FragmentContainerView. (Id9aa3, b/176089197)

Phiên bản 1.3.0-rc01

Ngày 16 tháng 12 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01androidx.fragment:fragment-testing:1.3.0-rc01. Phiên bản 1.3.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Giờ đây, onPrepareOptionsMenu() tuân theo logic tương tự như onCreateOptionsMenu() và không còn được gọi khi mảnh mẹ gọi setMenuVisibility(false). (Id7de8, b/173203654)

Sửa lỗi trình quản lý trạng thái mới

  • Khắc phục vấn đề rò rỉ và cấu phần phần mềm hình ảnh khi thêm một mảnh có Animation vào FragmentContainerView, sau đó làm gián đoạn việc thêm bằng thao tác bật lên. (I952d8)
  • Đã khắc phục vấn đề khung hiển thị của mảnh tiếp tục ở trong hệ phân cấp khung hiển thị nếu khung hiển thị đó được thay thế trong các phương thức onCreate() hoặc onViewCreated(). (I8a7d5)
  • Giờ đây, tiêu điểm được khôi phục đúng cách về chế độ xem gốc của Fragment khi tiếp tục xem lại. (Ifc84b)
  • Giờ đây, việc kết hợp các thao tác bật lên và thay thế trong cùng một giao dịch mảnh sẽ hiển thị các ảnh động thích hợp (Ifd4e4, b/170328691)

Phiên bản 1.3.0-beta02

Ngày 2 tháng 12 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02androidx.fragment:fragment-testing:1.3.0-beta02. Phiên bản 1.3.0-beta02 bao gồm các thay đổi sau.

Tính năng mới

  • FragmentScenario đã được chuyển đổi hoàn toàn sang Kotlin, đồng thời duy trì khả năng tương thích nguồn và tệp nhị phân thông qua việc sử dụng giao diện chức năng của Kotlin 1.4 cho FragmentAction. (I19d31)

Các thay đổi về hành vi

  • Giờ đây, bạn có thể sử dụng FragmentContainerViews không làm tăng kích thước mảnh bằng thuộc tính class hoặc android:name bên ngoài FragmentActivity. (Id4397, b/172266337)
  • Giờ đây, việc cố gắng đặt vòng đời tối đa của một mảnh thành DESTROYED sẽ gửi một IllegalArgumentException (Ie7651, b/170765622)
  • Giờ đây, việc khởi động FragmentScenario có trạng thái DESTROYED sẽ gửi IllegalArgumentException (I73590, b/170765622)

Sửa lỗi trình quản lý trạng thái mới

  • Khắc phục vấn đề khung hiển thị không đạt đến trạng thái cuối cùng nếu bạn làm gián đoạn quá trình chuyển đổi mảnh đang sử dụng Animator hoặc một trong các tuỳ chọn TRANSIT_FRAGMENT_. (I92426, b/169874632)
  • Khắc phục vấn đề khiến các mảnh có Animation thoát ra không được huỷ đúng cách. (I83d65)
  • Giờ đây, các mảnh thoát ra có hiệu ứng đã đảo ngược sẽ huỷ đúng cách và khởi động lại với hiệu ứng nhập phù hợp. (I62226, b/167092035)
  • Khắc phục vấn đề Animator thoát ra của hide() không chạy. (Id7ffe)
  • Giờ đây, các mảnh xuất hiện đúng cách khi bị hoãn, sau đó bắt đầu ngay lập tức. (Ie713b, b/170022857)
  • Các mảnh xoá khung hiển thị có tiêu điểm trong ảnh động sẽ không còn cố gắng khôi phục tiêu điểm trên khung hiển thị đã tách rời khi chúng đạt RESUMED (I38c65, b/172925703)

Đóng góp bên ngoài

  • Giờ đây, FragmentFactory sẽ lưu riêng từng lớp mảnh vào bộ nhớ đệm cho nhiều thực thể ClassLoader. Cảm ơn Simon Schiller! (#87, b/113886460)

Phiên bản 1.3.0-beta01

Ngày 1 tháng 10 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01androidx.fragment:fragment-testing:1.3.0-beta01. Phiên bản 1.3.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, setMaxLifecycle() hỗ trợ đặt trạng thái Lifecycle thành INITIALIZING miễn là mảnh đó chưa được chuyển sang CREATED. (b/159662173)

Các thay đổi về API

Các thay đổi về hành vi

  • Các tệp tài nguyên mảnh đã được đặt chính xác ở chế độ riêng tư. (aosp/1425237)

Sửa lỗi

  • Giờ đây, các mảnh tăng cường bằng cách sử dụng thẻ <fragment> sẽ đợi cho đến khi khung hiển thị của các mục đó được thêm vào vùng chứa trước khi chuyển sang BẮT ĐẦU (I02f4c)
  • Các mảnh hiển thị và setMaxLifecycle() đến CREATED hiện đã chạy đúng cách các hiệu ứng thoát của chúng. (b/165822335)
  • Việc xoá một mảnh rời chưa được thêm vào ngăn xếp lui không còn gây rò rỉ bộ nhớ nữa. Cảm ơn Nicklas Ansman Giertz! (b/166489383)
  • Giờ đây, các mảnh đang hoạt động sẽ luôn có FragmentManager không rỗng, và các mảnh có FragmentManagerkhông rỗng sẽ luôn được coi là đang hoạt động. (aosp/1422346)
  • Giờ đây, hiệu ứng mặc định của mảnh (TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE) sử dụng Animator thay vì Animation. (b/166155034)

Sửa lỗi trình quản lý trạng thái mới

  • Giờ đây, các mảnh sẽ khôi phục đúng cách trạng thái tiêu điểm của chế độ xem từ ngay trước khi bắt đầu ảnh động. (Icc256)
  • Các mảnh chỉ có chuyển đổi phần tử chung hiện sẽ hoàn thành chuẩn xác các hiệu ứng đặc biệt của chúng, nghĩa là chúng sẽ chuyển sang trạng thái cuối cùng (Iaebc7, b/166658128)
  • Giờ đây, chế độ xem của Fragment luôn bị xoá khỏi vùng chứa trước khi bị huỷ. (Id5876)
  • Giờ đây, trình quản lý trạng thái mới sẽ xoá chế độ xem mảnh thoát ra một cách nhất quán trước khi thêm chế độ xem nhập vào. (I41a6e)
  • Trình quản lý trạng thái mới sẽ áp dụng những thay đổi rõ ràng đối với chế độ hiển thị của khung hiển thị mảnh. Điều này có nghĩa là nếu bạn đặt khung hiển thị của mảnh nhập thành INVISIBLE trước khi ảnh động bắt đầu, thì ảnh sẽ thực sự tiếp tục không hiển thị. (b/164481490)
  • Giờ đây, các Fragment ưu tiên Animators hơn Animations, nên một mảnh có cả hai phần tử này sẽ chỉ chạy Animator và bỏ qua Animation. (b/167579557)
  • Trình quản lý trạng thái mới không còn làm cho các mảnh nhấp nháy khi sử dụng ảnh động nhập nữa. (b/163084315)

Vấn đề đã biết

Khi sử dụng trình quản lý trạng thái mới, nếu bạn nhấn quay lại trong hiệu ứng nhập vào đặc biệt thay vì quay lại mảnh trước đó, thì mảnh cũ sẽ không bao giờ được thêm lại, dẫn đến màn hình trống. (b/167259187, b/167092035, b/168442830)

Phiên bản 1.3.0-alpha08

Ngày 19 tháng 8 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08androidx.fragment:fragment-testing:1.3.0-alpha08. Phiên bản 1.3.0-alpha08 bao gồm các thay đổi sau.

Trình quản lý trạng thái mới

Bản phát hành này bao gồm việc tái cấu trúc chính việc quản lý trạng thái nội bộ của FragmentManager, ảnh hưởng đến việc gửi các phương thức, ảnh động và chuyển đổi vòng đời cũng như cách xử lý các giao dịch bị hoãn. Tuỳ chọn này được bật theo mặc định. Xem Fragment: Tạo lại bài đăng trên blog của Internals để biết thêm chi tiết. (b/139536619, b/147749580)

  • Bạn có thể sử dụng API thử nghiệm trong FragmentManager.enableNewStateManager(boolean) để kiểm soát việc FragmentManager có sử dụng trình quản lý trạng thái mới hay không. (I7b6ee)

Các vấn đề sau đây chỉ được khắc phục khi sử dụng trình quản lý trạng thái mới:

  • Giờ đây, mảnh trước của thao tác replace đã dừng lại chính xác trước khi mảnh mới bắt đầu. (b/161654580)
  • Giờ đây, các mảnh chặn nhiều ảnh động cạnh tranh trên cùng một mảnh, tránh trường hợp Animation sẽ ghi đè tất cả hiệu ứng Transition, hoặc AnimatorTransition trên một mảnh riêng lẻ sẽ đều chạy được. (b/149569323)
  • Giờ đây, enterTransitionexitTranstion trong tất cả các mảnh vào và thoát đều chạy được thay vì chỉ mảnh vào cuối cùng và mảnh thoát đầu tiên. (b/149344150)
  • Các mảnh bị hoãn không còn bị kẹt ở trạng thái CREATED mà thay vào đó, chuyển sang STARTED cùng với các mảnh khác. (b/129035555)
  • Khắc phục vấn đề về việc FragmentManager thực thi các thao tác không đúng thứ tự khi kết hợp một giao dịch đã đặt lại bị trì hoãn và một giao dịch không theo thứ tự. (b/147297731)
  • Việc bật lên nhiều mảnh cùng lúc sẽ không còn khiến các mảnh trung gian tạm thời hiển thị khi trì hoãn các mảnh nữa. (b/37140383)
  • Giờ đây, FragmentManager trả về các mảnh chính xác khi gọi findFragmentById() hoặc findFragmentByTag() từ trong lệnh gọi lại onAttachFragment(). (b/153082833)
  • Các mảnh không còn gọi onCreateView() trên các mảnh bị huỷ khi mảnh thay thế chúng bị trì hoãn. (b/143915710)
  • Thông báo lỗi khi cố gắng kết hợp khung Transition và các thực thể AndroidX Transition hiện đề cập đến mảnh có hiệu ứng chuyển đổi không hợp lệ. (b/155574969)

Các thay đổi về hành vi

  • Giờ đây, bạn có thể gọi launch() trên ActivityResultLauncher trong phương thức vòng đời onCreate() của một mảnh. (b/161464278)
  • Giờ đây, khi registerForActivityResult() được gọi sau onCreate(), sẽ có một ngoại lệ cho biết rằng hành vi này không được phép thay vì ngầm không phân phối kết quả sau khi thay đổi cấu hình. (b/162255449)
  • Giờ đây, FragmentActivity sử dụng API OnContextAvailableListener trong Hoạt động 1.2.0-alpha08 để khôi phục trạng thái của FragmentManager. Mọi trình nghe được thêm vào các lớp con của FragmentActivity sẽ chạy sau trình nghe này. (I513da)

Sửa lỗi

  • Giờ đây, ActivityOptions được chuyển qua khi sử dụng startIntentSenderForResult() sẽ được tuân thủ. (b/162247961)

Vấn đề đã biết

  • Khi sử dụng trình quản lý trạng thái mới, việc trực tiếp thiết lập chế độ hiển thị cho khung hiển thị gốc của mảnh sau onViewCreated() và trước onResume() dẫn đến chế độ hiển thị bạn đặt sẽ bị FragmentManager ghi đè, kiểm soát chế độ hiển thị của khung hiển thị gốc. Để khắc phục, bạn nên sử dụng các thao tác hide()show() để thay đổi chế độ hiển thị của mảnh. (b/164481490)

Phiên bản 1.3.0-alpha07

Ngày 22 tháng 7 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07androidx.fragment:fragment-testing:1.3.0-alpha07. Phiên bản 1.3.0-alpha07 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, FragmentScenario hỗ trợ đặt trạng thái Vòng đời ban đầu là CREATED, STARTED hoặc RESUMED thay vì luôn chuyển Mảnh sang trạng thái RESUMED. (b/159662750)
  • Thêm một phương án thay thế cho API FragmentScenario của onFragment ở dạng phương thức tiện ích được sửa đổi Kotlin withFragment, cho phép bạn trả về một giá trị. Đáng chú ý là phương án này sẽ gửi lại các ngoại lệ xuất hiện trong khối đã cho. (b/158697631)

Các thay đổi về hành vi

  • Giờ đây, FragmentScenario sử dụng setMaxLifecycle() để triển khai moveToState(), đảm bảo hành vi nhất quán trên tất cả các cấp độ API và phân tách trạng thái của Mảnh khỏi Hoạt động cơ bản. (b/156527405)
  • Giờ đây, SavedStateRegistryOwner được ViewTreeSavedStateRegistryOwner trả về gắn với Vòng đời của chế độ xem mảnh. Việc này đảm bảo rằng trạng thái được lưu lại và khôi phục cùng lúc với chế độ xem của mảnh. (b/158503763)

Sửa lỗi

  • Giờ đây, các mảnh chờ chế độ xem của mảnh đính kèm trước khi gọi ViewCompat.requestApplyInsets(), tránh các trường hợp đưa vào bị bỏ qua. (b/158095749)
  • Giờ đây, việc gọi clearFragmentResultListener sẽ xoá trình quan sát vòng đời đúng cách. (b/159274993)

Phiên bản 1.3.0-alpha06

Ngày 10 tháng 6 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06androidx.fragment:fragment-testing:1.3.0-alpha06. Phiên bản 1.3.0-alpha06 bao gồm các thay đổi sau.

Tính năng mới

  • Ngừng sử dụng lệnh gọi lại onAttachFragment() trên FragmentActivityFragment. FragmentOnAttachListener mới đã được thêm vào để cung cấp một tuỳ chọn thay thế linh hoạt hơn, cho phép uỷ quyền onAttachFragment() tách riêng, các trình nghe có thể thử nghiệm và hỗ trợ thêm trình nghe cho FragmentManager , trừ FragmentManager con trực tiếp. (I06d3d)

Sửa lỗi

  • Giờ đây, các mảnh mẹ đã khôi phục trạng thái khung hiển thị trước các mảnh con, khắc phục vấn đề thứ tự hình ảnh sau khi thay đổi cấu hình khi DialogFragment hiển thị một DialogFragment khác dưới dạng một mảnh con. (b/157195715)
  • Khắc phục vấn đề về việc kiểm tra tìm lỗi mã nguồn UseRequireInsteadOfGet không xử lý chính xác cách sử dụng chuỗi của thao tác ?.!!. (b/157677616)

Phiên bản 1.3.0-alpha05

Ngày 20 tháng 5 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05androidx.fragment:fragment-testing:1.3.0-alpha05. Phiên bản 1.3.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

Các thay đổi về API

  • Giờ đây, các API setFragmentResult()setFragmentResultListener() sẽ lấy BundleFragmentResultListener không rỗng. Để xoá một kết quả hoặc trình nghe đã đặt trước đó, hãy sử dụng phương thức clearFragmentResult()clearFragmentResultListener() mới. (b/155416778)
  • Giờ đây, các tiện ích Kotlin của setFragmentResultListener() sử dụng lambda được đánh dấu là inline. (b/155323404)

Các thay đổi về hành vi

  • Giờ đây, startActivityForResult(), startIntentSenderForResult()requestPermissions đã ngừng hoạt động trước đó trên Fragment sử dụng nội bộ ActivityResultRegistry, do đó giúp hạn chế việc chỉ sử dụng các bit thấp hơn (dưới 0xFFFF) cho mã yêu cầu khi sử dụng các API đó. (b/155518741)

Các bản cập nhật tài liệu

  • Mở rộng tài liệu trên hàm khởi tạo Fragment(@LayoutRes int)DialogFragment(@LayoutRes int) để làm rõ rằng các hàm này phải được gọi từ hàm khởi tạo không đối số của lớp phụ khi sử dụng FragmentFactory mặc định. (b/153042497)

Phiên bản 1.3.0-alpha04

Ngày 29 tháng 4 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04androidx.fragment:fragment-testing:1.3.0-alpha04. Phiên bản 1.3.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm tính năng hỗ trợ chuyển kết quả giữa 2 Mảnh thông qua API mới trên FragmentManager. Tính năng này hoạt động đối với các mảnh phân cấp (mẹ/con), DialogFragments và các mảnh trong Điều hướng và đảm bảo rằng kết quả chỉ được gửi đến Mảnh của bạn trong khi ít nhất STARTED. (b/149787344)

Các thay đổi về API

  • API mảnh mục tiêu không còn được dùng nữa. Để chuyển dữ liệu giữa các Mảnh, bạn nên sử dụng Fragment Result API mới. (b/149787344)
  • Ngừng sử dụng API startActivityForResult()/onActivityResult()requestPermissions()/onRequestPermissionsResult() trên Mảnh. Vui lòng sử dụng Activity Result API. (aosp/1290887)
  • Thay đổi có thể gây lỗi từ Hoạt động 1.2.0-alpha04: phương thức prepareCall() đã được đổi tên thành registerForActivityResult(). (aosp/1278717)

Sửa lỗi

  • Hiện đã ngừng sử dụng getViewLifecycleOwner() của mảnh trước khi gọi onSaveInstanceState(). Điều này phản ánh hành vi của vòng đời của mảnh. (b/154645875)
  • Giờ đây, thao tác gọi setMenuVisibility(false) trên một mảnh sẽ thay đổi chính xác chế độ hiển thị của các trình đơn do các mảnh con của mảnh đó cung cấp. (b/153593580)
  • Sửa illegalStateException khi thêm một mảnh vào hệ phân cấp chế độ xem của DialogFragment với FragmentContainerView. (b/154366601)
  • Phương thức getDefaultViewModelProviderFactory() trên các mảnh không còn gặp sự cố khi lưu trữ các mảnh bên ngoài một hoạt động. (b/153762914)

Phiên bản 1.3.0-alpha03

Ngày 1 tháng 4 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03androidx.fragment:fragment-testing:1.3.0-alpha03. Phiên bản 1.3.0-alpha03 bao gồm các thay đổi sau.

Các thay đổi về API

  • Giờ đây, các phương thức prepareCall trên Fragmentfinal. (b/152439361)

Sửa lỗi

  • Khắc phục lỗi hồi quy trong Fragment 1.3.0-alpha02 khi sử dụng BottomSheetDialogFragment. (b/151652127, aosp/1263328, aosp/1265163)
  • Khắc phục vấn đề khi sử dụng prepareCall từ một mảnh sau khi thay đổi cấu hình. (b/152137004)
  • Khắc phục vấn đề về việc các thành phần chung và quá trình chuyển đổi thoát bị bỏ qua khi sử dụng setTargetFragment(). (b/152023196)
  • Từ Mảnh 1.2.4: Cập nhật quy tắc Fragment ProGuard để cho phép làm rối mã nguồn của các mảnh được giữ lại. (b/151605338)
  • Từ Mảnh 1.2.4: Vô hiệu hoá FragmentLiveDataObserve quy tắc tìm lỗi mã nguồn trên các lớp DialogFragment vì vòng đời và vòng đời của chế độ xem luôn đồng bộ hoá, giúp sử dụng this hoặc viewLifecycleOwner khi gọi observe. (b/151765086)

Thay đổi về phần phụ thuộc

  • Các mảnh phụ thuộc vào Hoạt động 1.2.0-alpha03, có những điểm cải tiến đáng kể đối với Activity Result API có trong Hoạt động 1.2.0-alpha02.

Phiên bản 1.3.0-alpha02

Ngày 18 tháng 3 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02androidx.fragment:fragment-testing:1.3.0-alpha02. Phiên bản 1.3.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm tính năng hỗ trợ API ActivityResultRegistry có trong Hoạt động 1.2.0-alpha02 để xử lý các luồng startActivityForResult()+onActivityResult() cũng như requestPermissions()+onRequestPermissionsResult() mà không cần phương thức ghi đè trong Mảnh, bên cạnh việc cung cấp hook để thử nghiệm những quy trình này. Hãy xem phần cập nhật Nhận kết quả từ một hoạt động. (b/125158199)

Các thay đổi về API

  • Giờ đây, DialogFragment cung cấp một hàm khởi tạo có @LayoutRes cho biết bố cục mà onCreateView() sẽ tăng theo mặc định. (b/150327080)
  • Giờ đây, phương thức onActivityCreated() không được dùng nữa. Bạn phải thực hiện mã nhấn vào thành phần hiển thị của mảnh trong onViewCreated() (được gọi ngay trước onActivityCreated()) và mã khởi động khác phải trong onCreate(). Để nhận được một lệnh gọi lại cụ thể khi onCreate() của hoạt động hoàn tất, thì LifeCycleObserver phải được đăng ký trên Lifecycle của hoạt động trong onAttach() và bị xoá sau khi thao tác gọi lại onCreate() được nhận. (b/144309266)

Sửa lỗi

  • Từ Fragment 1.2.3: Sửa lỗi DialogFragment gây ra StackOverflowError khi gọi getLayoutInflater() từ trong onCreateDialog(). (b/117894767, aosp/1258664)
  • Từ Fragment 1.2.3: Giảm phạm vi của các quy tắc ProGuard đi kèm trong Fragment để đảm bảo có thể xoá các lớp Fragment không sử dụng. (b/149665169)
  • Từ Mảnh 1.2.3: Sửa lỗi dương tính giả trong việc kiểm tra UseRequireInsteadOfGet Tìm lỗi mã nguồn khi sử dụng tên biến cục bộ đã ẩn tên thuộc tính Kotlin. (b/149891163)
  • Từ Mảnh 1.2.3: FragmentContainerView không còn gửi UnsupportedOperationException do sử dụng hàm khởi tạo không chính xác trong bản xem trước bố cục. (b/149707833)

Lỗi đã biết

  • BottomSheetDialogFragment không còn định vị chính xác hộp thoại trên màn hình nữa. (b/151652127)

Phiên bản 1.3.0-alpha01

Ngày 4 tháng 3 năm 2020

Phát hành androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01androidx.fragment:fragment-testing:1.3.0-alpha01. Phiên bản 1.3.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm tính năng hỗ trợ API ViewTreeLifecycleOwner.get(View) được thêm vào trong Vòng đời 2.3.0-alpha01 để API này trả về viewLifecycleOwner của Mảnh dưới dạng LifecycleOwner cho mọi Khung hiển thị do onCreateView() trả về. (aosp/1182955)

Các thay đổi về API

  • Phương thức setRetainInstance() trên Mảnh không còn được dùng nữa. Với sự ra mắt của ViewModels, các nhà phát triển có API cụ thể cho việc giữ lại trạng thái liên kết được với các biểu đồ Hoạt động, Mảnh và Điều hướng. Điều này cho phép các nhà phát triển sử dụng một Mảnh thông thường, không được giữ lại và giữ trạng thái cụ thể mà họ muốn giữ lại riêng biệt, tránh việc bị rò rỉ nguồn trong khi vẫn duy trì các thuộc tính hữu ích của từng trường hợp tạo và huỷ trạng thái được giữ lại (cụ thể là hàm khởi tạo của ViewModel và lệnh gọi lại onCleared() mà nó nhận được). (b/143911815)
  • Với bản phát hành ViewPager2 1.0.0, các lớp FragmentPagerAdapterFragmentStatePagerAdapter dùng để tương tác với ViewPager đã ngừng hoạt động. Hãy xem Di chuyển từ ViewPager sang ViewPager2. (b/145132715)

Sửa lỗi

  • Giờ đây, các quy tắc Fragment ProGuard chỉ giữ lại đúng các lớp hàm khởi tạo Fragment mặc định được sử dụng chứ không phải cho tất cả các thực thể Fragment, qua đó khắc phục lỗi hồi quy trong Mảnh 1.2.1. (b/149665169
  • Quy tắc tìm lỗi mã nguồn require___() được thêm vào trong Mảnh 1.2.2 không còn chứa giá trị dương tính giả trên các biến cục bộ có cùng tên với tên thuộc tính Kotlin bị ẩn (tức là view). (b/149891163)
  • FragmentContainerView không còn gửi UnsupportedOperationException khi sử dụng bản xem trước bố cục trong Android Studio nữa. (b/149707833)
  • Khắc phục vấn đề về việc các mảnh bị giữ lại được thêm vào sau khi lưu trạng thái sẽ không được tạo lại liên tục và bị huỷ bỏ sau mỗi lần thay đổi cấu hình. (b/145832397)

Phiên bản 1.2.5

Phiên bản 1.2.5

Ngày 10 tháng 6 năm 2020

Phát hành androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5androidx.fragment:fragment-testing:1.2.5. Phiên bản 1.2.5 bao gồm các thay đổi sau.

Sửa lỗi

  • Hiện đã ngừng sử dụng getViewLifecycleOwner() của mảnh trước khi gọi onSaveInstanceState(). Điều này phản ánh hành vi của vòng đời của mảnh. Trước đây, mã này đã được phát hành trong Fragment 1.3.0-alpha04. (b/154645875)
  • Giờ đây, thao tác gọi setMenuVisibility(false) trên một mảnh sẽ thay đổi chính xác chế độ hiển thị của các trình đơn do các mảnh con của mảnh đó cung cấp. Trước đây, mã này đã được phát hành trong Fragment 1.3.0-alpha04. (b/153593580)

Phiên bản 1.2.4

Phiên bản 1.2.4

Ngày 1 tháng 4 năm 2020

Phát hành androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4androidx.fragment:fragment-testing:1.2.4. Phiên bản 1.2.4 bao gồm các thay đổi sau.

Sửa lỗi

  • Cập nhật quy tắc Fragment ProGuard để cho phép làm rối mã nguồn của các mảnh được giữ lại. (b/151605338)
  • Vô hiệu hoá quy tắc tìm lỗi mã nguồn FragmentLiveDataObserve trên các lớp DialogFragment vì vòng đời và vòng đời của khung hiển thị luôn đồng bộ hoá, giúp sử dụng this hoặc viewLifecycleOwner khi gọi observe. (b/151765086)

Phiên bản 1.2.3

Phiên bản 1.2.3

Ngày 18 tháng 3 năm 2020

Phát hành androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3androidx.fragment:fragment-testing:1.2.3. Phiên bản 1.2.3 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi trong DialogFragment gây ra StackOverflowError khi gọi getLayoutInflater() từ trong onCreateDialog(). (b/117894767, aosp/1258665)
  • Giảm phạm vi của các quy tắc ProGuard đi kèm trong Mảnh để đảm bảo có thể xoá các lớp Mảnh không sử dụng. (b/149665169)
  • Sửa lỗi dương tính giả trong việc kiểm tra Tìm lỗi mã nguồn UseRequireInsteadOfGet khi sử dụng tên biến cục bộ đã ẩn tên thuộc tính Kotlin. (b/149891163)
  • FragmentContainerView không còn gửi UnsupportedOperationException vì sử dụng hàm khởi tạo không chính xác trong bản xem trước bố cục. (b/149707833)

Phiên bản 1.2.2

Phiên bản 1.2.2

Ngày 19 tháng 2 năm 2020

Phát hành androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2androidx.fragment:fragment-testing:1.2.2. Phiên bản 1.2.2 bao gồm các thay đổi sau.

Kiểm tra tìm lỗi mã nguồn mới

  • Tìm lỗi mã nguồn đề xuất sử dụng viewLifecycleOwner làm LifecycleOwner để gọi tới OnBackPressedDispatcher trong onCreateView(), onViewCreated()onActivityCreated(). (b/142117657)
  • Thêm tính năng kiểm tra lỗi mã nguồn mới để xác nhận rằng bạn đang sử dụng đúng debugImplementation khi sử dụng cấu phần mềm fragment-testing. (b/141500106)
  • Giờ đây, Mảnh đề xuất các phương thức require___() liên kết cho các thông báo lỗi mô tả thay vì checkNotNull(get___()), requireNonNull(get___()) hoặc get___()!! cho tất cả các Fragment API có cả getrequire tương đương. (aosp/1202883)

Sửa lỗi

  • Sửa các tệp Fragment ProGuard để tránh cảnh báo R8 (b/148963981)
  • Cải thiện đề xuất của tính năng kiểm tra tìm lỗi mã nguồn hiện tại bằng cách sử dụng viewLifecycleOwner khi dùng observe để xử lý cả phiên bản phương thức mở rộng livedata-ktx của observe. (b/148996309)
  • Sửa định dạng cho nhiều bước kiểm tra tìm lỗi mã nguồn (aosp/1157012)

Đóng góp bên ngoài

  • Cảm ơn Zac Sweers đã thay mặt cho Slack đóng góp vào các lần kiểm tra tìm lỗi mã nguồn require___()! (aosp/1202883)

Phiên bản 1.2.1

Phiên bản 1.2.1

Ngày 5 tháng 2 năm 2020

Phát hành androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1androidx.fragment:fragment-testing:1.2.1. Phiên bản 1.2.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Các mảnh được thêm vào thông qua phương thức addreplace sử dụng một thực thể Class (hoặc phiên bản sửa đổi Kotlin) hiện có hàm khởi tạo mặc định được ProGuard giữ lại. (b/148181315)
  • FragmentStatePagerAdapterFragmentPagerAdapter không còn phát hiện các ngoại lệ do FragmentManager gửi khi chạy finishUpdate(). (aosp/1208711)
  • Khắc phục vấn đề FragmentManager.findFragment() không hoạt động với các mảnh đã thêm qua thẻ <fragment>. (b/147784323)
  • Giờ đây, các mảnh tăng cường bằng cách sử dụng thẻ <fragment> luôn nhận được lệnh gọi tới onInflate() trước onCreate() khi ở trong bố cục. (aosp/1215856)
  • Việc gọi toString() trên phiên bản FragmentManager không còn gửi NullPointerException khi Hoạt động đã bị huỷ. (b/148189412)

Thay đổi về phần phụ thuộc

Phiên bản 1.2.0

Phiên bản 1.2.0

Ngày 22 tháng 1 năm 2020

Phát hành androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0androidx.fragment:fragment-testing:1.2.0. Phiên bản 1.2.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 1.1.0

  • FragmentContainerView: FragmentContainerView là vùng chứa được đề xuất cho các Mảnh được thêm vào linh động, thay thế việc sử dụng FrameLayout hoặc các bố cục khác. Mã này cũng hỗ trợ class, android:name tương tự và android:tag không bắt buộc như thẻ <fragment>, nhưng sử dụng FragmentTransaction thông thường để thêm mảnh ban đầu này thay vì đường dẫn mã tuỳ chỉnh do <fragment> sử dụng.
  • định thời gian onDestroyView(): Các Mảnh hiện chờ ảnh động thoát, chuyển đổi khung thoát và chuyển đổi AndroidX thoát (khi sử dụng 1.3.0 Chuyển đổi) để hoàn tất trước khi gọi onDestroyView().
  • add()replace() dựa trên lớp: Thêm các nội dung quá tải add()replace() mới vào FragmentTransaction, thực hiện Class<? extends Fragment>Bundle không bắt buộc của đối số. Các phương thức này sử dụng FragmentFactory của bạn để tạo một phiên bản của Mảnh để thêm. Các tiện ích Kotlin sử dụng các loại đã sửa đổi (tức là fragmentTransaction.replace<YourFragment>(R.id.container)) cũng đã được thêm vào fragment-ktx.
  • Tích hợp Vòng đời ViewModel SavedState: SavedStateViewModelFactory hiện là trạng thái ban đầu mặc định được sử dụng khi sử dụng by viewModels(), by activityViewModels(), hàm khởi tạo ViewModelProvider hoặc ViewModelProviders.of() với một Mảnh.
  • Tính năng kiểm tra tìm lỗi mã nguồn mới: Thêm tính năng kiểm tra tìm lỗi mã nguồn mới đảm bảo bạn đang sử dụng getViewLifecycleOwner() khi quan sát LiveData từ onCreateView(), onViewCreated() hoặc onActivityCreated().
  • Không dùng getFragmentManager() nữa: Ngừng sử dụng phương thức getFragmentManager()requireFragmentManager() trên Mảnh, thay vào đó là một phương thức getParentFragmentManager() duy nhất. Phương thức này sẽ trả về FragmentManager không rỗng mà Mảnh được thêm vào (bạn có thể sử dụng isAdded() để xác định xem có thể gọi an toàn hay không).
  • FragmentManager.enableDebugLogging() không dùng nữa: Ngừng sử dụng phương thức FragmentManager.enableDebugLogging tĩnh này. Giờ đây, FragmentManager đã áp dụng Log.isLoggable() đối với thẻ FragmentManager, cho phép bạn bật tính năng ghi nhật ký DEBUG hoặc VERBOSE mà không cần biên dịch lại ứng dụng của bạn.

Lỗi đã biết

  • Các mảnh chỉ được tham chiếu qua thuộc tính class hoặc android:name trên FragmentContainerView sẽ không được ProGuard tự động lưu giữ, do đó bạn phải tự thêm quy tắc lưu giữ cho từng lớp mảnh. (b/142601969)
  • Khi thêm NavHostFragment bằng class hoặc android:name trong XML với FragmentContainerView, bạn không thể dùng findNavController() trong onCreate() của Hoạt động. (b/142847973)

Phiên bản 1.2.0-rc05

Ngày 8 tháng 1 năm 2020

Phát hành androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05androidx.fragment:fragment-testing:1.2.0-rc05. Phiên bản 1.2.0-rc05 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi hồi quy trong 1.2.0-rc04 Mảnh khi sử dụng thẻ <fragment> khiến onViewCreated() bị gọi sai trong quá trình huỷ hoạt động. (b/146290333)
  • Các mảnh được thêm bằng thẻ <fragment> hiện đã xoá đúng cách các phần không thuộc cấu hình ngay cả khi chúng chỉ thỉnh thoảng xuất hiện trong bố cục (tức là chỉ trong bố cục ngang). Do đó, các Mảnh này hiện được chuyển chính xác sang CREATED ngay cả khi không có trong bố cục thay vì được tạo bản sao nhưng không chuyển qua bất kỳ phương thức vòng đời nào. (b/145769287)

Phiên bản 1.2.0-rc04

Ngày 18 tháng 12 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04androidx.fragment:fragment-testing:1.2.0-rc04. Phiên bản 1.2.0-rc04 bao gồm các thay đổi sau.

Sửa lỗi

  • Điều chỉnh ảnh động cho TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE để tránh các vấn đề về hình ảnh. (b/145468417)

Phiên bản 1.2.0-rc03

Ngày 4 tháng 12 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03androidx.fragment:fragment-testing:1.2.0-rc03. Phiên bản 1.2.0-rc03 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục thay đổi hành vi ngoài ý muốn khi các Mảnh bị xoá vẫn được trả về bởi findFragmentById() / findFragmentByTag() trong khi các lượt ảnh động/lần chuyển đổi thoát của những Mảnh này chạy. (b/143982969, aosp/1167585)
  • Giờ đây, các Mảnh con cháu sẽ được dừng đúng cách trước khi Mảnh mẹ chứa hoạt động gọi onSaveInstanceState(). (b/144380645)
  • Khắc phục vấn đề trong đó các Khung hiển thị bị đánh dấu không chính xác là INVISIBLE sau khi bật lên một Mảnh bị ẩn. (b/70793925)
  • Các thao tác chuyển đổi phần tử chung của Mảnh nay xử lý các Khung hiển thị đã được xoay, điều chỉnh theo tỷ lệ, v.v. (b/142835261)

Các bản cập nhật tài liệu

  • Làm rõ tài liệu về việc ngừng sử dụng liên quan đến setUserVisibleHint(). (b/143897055)
  • Cải thiện tài liệu trên setFragmentFactory()getFragmentFactory() để cho biết rõ hơn rằng việc đặt FragmentFactory cũng sẽ ảnh hưởng đến FragmentManagers của thành phần con. (aosp/1170095)

Thay đổi về phần phụ thuộc

  • Mảnh bây giờ phụ thuộc vào Vòng đời 2.2.0-rc03 Lifecycle ViewModel SavedState 1.0.0-rc03 và Hoạt động 1.1.0-rc03.

Phiên bản 1.2.0-rc02

Ngày 7 tháng 11 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02androidx.fragment:fragment-testing:1.2.0-rc02. Phiên bản 1.2.0-rc02 bao gồm các thay đổi sau.

Sửa lỗi

  • Khi ở trong Kotlin, LintFix sử dụng getViewLifecycleOwner() khi quan sát LiveData từ onCreateView(), onViewCreated() hoặc onActivityCreated() (có trong Mảnh 1.2.0-rc01) nay sử dụng cú pháp quyền truy cập vào thuộc tính Kotlin viewLifecycleOwner thay vì getViewLifecycleOwner(). (aosp/1143821)

Phiên bản 1.2.0-rc01

Ngày 23 tháng 10 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01androidx.fragment:fragment-testing:1.2.0-rc01. Phiên bản 1.2.0-rc01 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, FragmentContainerView hỗ trợ thuộc tính class ngoài android:name, phản ánh chức năng của thẻ <fragment>. (b/142722242)
  • Thêm một chương trình kiểm tra tìm lỗi mã nguồn mới để đảm bảo bạn đang sử dụng getViewLifecycleOwner() khi quan sát LiveData từ onCreateView(), onViewCreated() hoặc onActivityCreated(). (b/137122478)

Sửa lỗi

  • Giờ đây, lệnh gọi lại onDismissonCancel trên DialogFragment đảm bảo rằng DialogInterface được chuyển đến các giá trị này là không rỗng và getDialog() sẽ trả về giá trị không rỗng khi thực thi. (b/141974033)
  • FragmentContainerView hiện thêm Mảnh mà class hoặc android:name xác định là một phần của hành vi tăng cường, đảm bảo rằng findFragmentById()findFragmentByTag() sẽ hoạt động ngay sau đó. (b/142520327)
  • Khắc phục lỗi IllegalStateException trong FragmentContainerView do trạng thái đang được lưu. (b/142580713)
  • Sửa UnsupportedOperationException trong FragmentContainerView khi lớp FragmentContainerView bị làm rối mã nguồn. (b/142657034)

Vấn đề đã biết

  • Các mảnh chỉ được tham chiếu qua thuộc tính class hoặc android:name trên FragmentContainerView sẽ không được ProGuard tự động lưu giữ, do đó bạn phải tự thêm quy tắc lưu giữ cho từng lớp mảnh. Chúng tôi đã vô hiệu hoá đề xuất quy tắc tìm lỗi mã nguồn chuyển sang FragmentContainerView cho đến khi điều này được khắc phục qua aapt2. (b/142601969)

Phiên bản 1.2.0-beta02

Ngày 11 tháng 10 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02androidx.fragment:fragment-testing:1.2.0-beta02. Phiên bản 1.2.0-beta02 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề khiến onInflate() của Mảnh không nhận được các thuộc tính phù hợp từ FragmentContainerView, các trường hợp vi phạm như NavHostFragment. (b/142421837)

Phiên bản 1.2.0-beta01

Ngày 9 tháng 10 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01androidx.fragment:fragment-testing:1.2.0-beta01. Phiên bản 1.2.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • FragmentContainerView bổ sung tính năng hỗ trợ việc thêm một Mảnh ban đầu có hỗ trợ thêm các thuộc tính XML android:nameandroid:tag không bắt buộc. Không giống như thẻ <fragment>, FragmentContainerView sử dụng một FragmentTransaction bình thường nâng cao để thêm Mảnh ban đầu, cho phép FragmentTransaction thực hiện các thao tác khác trên FragmentContainerView và cho phép sử dụng tính năng Liên kết chế độ xem cho bố cục. (b/139830628, b/141177981)
  • Giờ đây, các Mảnh chứa cảnh báo tìm lỗi mã nguồn cung cấp một bản sửa lỗi nhanh để thay thế <fragment> bằng FragmentContainerView. (b/139830056)

Sửa lỗi

  • Sửa ClassCastException khi sử dụng androidx.transition. (b/140680619)
  • Giờ đây, khi sử dụng tính năng Chuyển đổi 1.3.0-beta01, các Mảnh đang chờ androidx.transition chuyển đổi (ngoài các chuyển đổi khung hình và ảnh động đã được khắc phục trong Mảnh 1.2.0-alpha03) và Mảnh 1.2.0-alpha02 lần lượt hoàn tất trước khi gửi onDestroyView(). (aosp/1119841)
  • Giờ đây, khi sử dụng tính năng Chuyển đổi 1.3.0-beta01, các Mảnh đã huỷ đúng cách các lượt chuyển đổi androidx.transition trước khi bắt đầu các lượt chuyển đổi/ảnh động mới trên cùng một vùng chứa. (aosp/1119841)
  • Khắc phục vấn đề trên API 17 trở xuống khi sử dụng quá trình chuyển đổi androidx.transition trên chế độ xem gốc của Mảnh khi sử dụng FragmentContainerView. (b/140361893)
  • Giờ đây, cấu phần phần mềm fragment-testing phụ thuộc vào AndroidX Test 1.2.0, khắc phục sự không tương thích với Espresso 3.2.0 mới nhất. (b/139100149)
  • Xoá việc sử dụng Log.w trong FragmentManager. (aosp/1126468)

Vấn đề đã biết

  • onInflate() của Mảnh không nhận được các thuộc tính phù hợp từ FragmentContainerView, các trường hợp vi phạm như NavHostFragment. (b/142421837)

Phiên bản 1.2.0-alpha04

Ngày 18 tháng 9 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04androidx.fragment:fragment-testing:1.2.0-alpha04. Phiên bản 1.2.0-alpha04 bao gồm các thay đổi sau.

Thay đổi về API

  • Ngừng sử dụng phương thức getFragmentManager()requireFragmentManager() trên Fragment, thay vào đó là một phương thức getParentFragmentManager() duy nhất. Phương thức này sẽ trả về FragmentManager không rỗng mà Mảnh được thêm vào (bạn có thể sử dụng isAdded() để xác định xem có thể gọi an toàn hay không). (b/140574496)
  • Phương thức FragmentManager.enableDebugLogging tĩnh không dùng nữa. Giờ đây, FragmentManager đã tuân thủ Log.isLoggable() đối với thẻ FragmentManager, cho phép bạn bật tính năng ghi nhật ký DEBUG hoặc VERBOSE mà không cần biên dịch lại ứng dụng của bạn. (aosp/1116591)

Sửa lỗi

  • Các Mảnh hiện bị huỷ đúng cách trong khi thoát ảnh động trên các Mảnh khác đang chạy. (b/140574199)
  • Khắc phục vấn đề Mảnh gọi Activity.findViewById() trong khi trước đó Mảnh không làm việc này. (aosp/1116431)

Phiên bản 1.2.0-alpha03

Ngày 5 tháng 9 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03androidx.fragment:fragment-testing:1.2.0-alpha03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi về API

  • FragmentContainerView đổi tên thành final (b/140133091)

Sửa lỗi

  • FragmentContainerView hiện sẽ đảo ngược thứ tự bản vẽ khi bật các Mảnh rời khỏi ngăn xếp lui. (b/139104187)
  • Khắc phục vấn đề trong đó ảnh động sẽ chạy sai khi vừa bật lên một Mảnh và thêm một Mảnh mới cùng một lúc. (b/111659726)
  • Giờ đây, các Mảnh đang chờ chuyển đổi (ngoài ảnh động đã được khắc phục trong Mảnh 1.2.0-alpha02) để hoàn tất trước khi gửi onDestroyView(). (b/138741697)

Phiên bản 1.2.0-alpha02

Ngày 7 tháng 8 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02androidx.fragment:fragment-testing:11.2.0-alpha02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • SavedStateViewModelFactory hiện là trạng thái ban đầu mặc định được sử dụng khi dùng by viewModels(), by activityViewModels(), hàm khởi tạo ViewModelProvider hoặc ViewModelProviders.of() với Fragment. (b/135716331)
  • Các ảnh động mặc định khi sử dụng TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADE với setTransition trên FragmentTransaction đã được cập nhật để khớp với ảnh động do các hoạt động sử dụng trên thiết bị Android 10. (aosp/1012812, aosp/1014730)

Thay đổi về API

  • Giới thiệu FragmentContainerView làm vùng chứa được đề xuất cho các Mảnh được thêm linh động, thay thế việc sử dụng FrameLayout, v.v. vì tính năng này khắc phục các vấn đề sắp xếp thứ tự của ảnh động z và tổng hợp các phần lồng ghép cửa sổ gửi đến các Mảnh. (b/37036000, aosp/985243, b/136494650)
  • Thêm phương thức FragmentManager.findFragment(View) tĩnh để truy xuất Mảnh chứa từ một chế độ xem bị một Mảnh tăng cường. Tiện ích Kotlin cũng có sẵn trong fragment-ktx. (aosp/1090757)
  • Thêm các phương thức nạp chồng mới của add()replace() vào FragmentTransaction thực hiện Class<? extends Fragment>Bundle không bắt buộc của đối số. Các phương thức này sử dụng FragmentFactory của bạn để tạo một phiên bản của Mảnh để thêm. Các tiện ích Kotlin sử dụng các loại đã sửa đổi (tức là fragmentTransaction.replace<YourFragment>(R.id.container)) cũng đã được thêm vào fragment-ktx. (b/126124987)
  • Thêm chú thích @MainThread vào phương thức gọi lại trong vòng đời Fragment. (b/127272564)
  • Ngừng sử dụng các API liên quan đến tiêu đề breadcrumb (tập hợp liên kết phân cấp) trên FragmentTransactionFragmentManager.BackStackEntry. (b/138252944)
  • Phương thức setTransitionStyle trên FragmentTransaction không còn được dùng nữa. (aosp/1011537)
  • Nhiều phương thức trong FragmentManager không còn là abstract. Bản thân FragmentManager vẫn là abstract và không được tạo bản sao hay mở rộng trực tiếp; bạn sẽ tiếp tục chỉ nhận được một thực thể hiện có từ getSupportFragmentManager(), getChildFragmentManager(), v.v.

Sửa lỗi

  • Từ Mảnh 1.1.0-rc04: Giờ đây, các Mảnh huỷ bỏ chính xác các quá trình chuyển đổi bị hoãn trên Mảnh được bật lên. (b/138251858)
  • Từ Fragment 1.1.0-rc03: Khắc phục sự cố khi việc gọi postponeEnterTransition() với thời gian chờ nhiều hơn một lần sẽ không huỷ các lần hết thời gian chờ trước đó. (b/137797118)
  • Từ Fragment 1.1.0-rc02: Khắc phục sự cố trong FragmentPagerAdapterFragmentStatePagerAdapter khi xoá mục hiện tại. (b/137209870)
  • Giờ đây, các Mảnh chờ ảnh động hoàn tất trước khi gửi onDestroyView(). (b/136110528)
  • Giờ đây, ảnh động trong Mảnh từ các mảnh con và các thành phần con cháu được xử lý đúng cách khi tạo ảnh động cho Mảnh mẹ. (b/116675313)
  • Sửa lỗi NullPointerException khi sử dụng chuyển đổi thành phần dùng chung đồng thời kết hợp thao tác bật lên và thêm. (b/120507394)
  • Thêm giải pháp cho IllegalStateException khi sử dụng FragmentPagerAdapterFragmentStatePagerAdapter trong các thử nghiệm Robolectric. (b/137201343)

Phiên bản 1.2.0-alpha01

Ngày 2 tháng 7 năm 2019

Phát hành androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01androidx.fragment:fragment-testing:1.2.0-alpha01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Giờ đây, FragmentManager gọi requestApplyInsets() sau khi đính kèm chế độ xem của Mảnh và ngay trước khi gọi onViewCreated(), đảm bảo rằng chế độ xem của bạn luôn có phần lồng ghép chính xác. (b/135945162)

Sửa lỗi

  • Sửa lỗi NullPointerException khi bật lên FragmentTransaction sử dụng setPrimaryNavigationFragment() trước replace(). (b/134673465)

Phiên bản 1.1.0

Phiên bản 1.1.0

Ngày 5 tháng 9 năm 2019

Phát hành androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0androidx.fragment:fragment-testing:1.1.0. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Những thay đổi quan trọng kể từ phiên bản 1.0.0

  • fragment-testing: Cấu phần phần mềm fragment-testing cung cấp một lớp FragmentScenario để kiểm tra riêng một Mảnh. Xem Kiểm tra tài liệu về Fragment của ứng dụng để biết thêm chi tiết.
  • FragmentFactory: Giờ đây, bạn có thể đặt FragmentFactory trên FragmentManager để quản lý việc tạo các thực thể của mảnh và loại bỏ yêu cầu nghiêm ngặt để có hàm khởi tạo không đối số.
  • Uỷ quyền thuộc tính Kotlin cho ViewModels: Cấu phần phần mềm fragment-ktx hiện chứa 2 uỷ quyền thuộc tính Kotlin: by viewModels() để truy cập vào ViewModels liên kết với từng mảnh và by activityViewModels() để truy cập vào ViewModels trong phạm vi hoạt động.
  • Vòng đời tối đa: Giờ đây, bạn có thể đặt trạng thái Vòng đời tối đa cho một Mảnh bằng cách gọi setMaxLifecycle() trên FragmentTransaction. Thao tác này sẽ thay thế cho setUserVisibleHint() hiện không dùng nữa. FragmentPagerAdapterFragmentStatePagerAdapter có một hàm khởi tạo mới cho phép bạn chuyển sang hành vi mới.
  • Hàm khởi tạo FragmentActivity LayoutId: Giờ đây, bạn có thể gọi lớp con của FragmentActivity trong hàm khởi tạo trên FragmentActivity lấy mã nhận dạng R.layout, cho biết bố cục nào cần đặt làm thành phần hiển thị nội dung như một cách khác để gọi setContentView() trong onCreate(). Việc này không làm thay đổi yêu cầu lớp con có hàm khởi tạo không đối số.
  • Hàm khởi tạo Fragment LayoutId: Giờ đây, bạn có thể gọi lớp con của Fragment trong hàm khởi tạo trên Fragment lấy mã nhận dạng R.layout, cho biết bố cục nào cần được sử dụng cho Mảnh này như một cách khác để ghi đè onCreateView(). Bạn có thể định cấu hình bố cục tăng cường trong onViewCreated().
  • Hoãn với thời gian chờ: Một nội dung quá tải postponeEnterTransition() mới đã được thêm vào làm hết thời gian chờ.

Phiên bản 1.1.0-rc04

Ngày 7 tháng 8 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04androidx.fragment:fragment-testing:1.1.0-rc04. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Giờ đây, các Mảnh huỷ bỏ chính xác các quá trình chuyển đổi bị hoãn trên Mảnh được bật lên. (b/138251858)

Phiên bản 1.1.0-rc03

Ngày 19 tháng 7 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03androidx.fragment:fragment-testing:1.1.0-rc03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Khắc phục sự cố khi việc gọi postponeEnterTransition() với thời gian chờ nhiều hơn một lần sẽ không huỷ các lần hết thời gian chờ trước đó. (b/137797118)

Phiên bản 1.1.0-rc02

Ngày 17 tháng 7 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02androidx.fragment-testing:fragment:1.1.0-rc02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Khắc phục sự cố trong FragmentPagerAdapterFragmentStatePagerAdapter khi xoá mục hiện tại. (b/137209870)

Phiên bản 1.1.0-rc01

Ngày 2 tháng 7 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01androidx.fragment:fragment-testing:1.1.0-rc01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Giờ đây, Mảnh cập nhật đúng chế độ hiển thị khi sử dụng thao tác show() hoặc hide() trong khi quá trình chuyển đổi đang chạy. (b/133385058)
  • Sửa lỗi NullPointerException khi bật lên FragmentTransaction sử dụng setPrimaryNavigationFragment() trước replace(). (b/134673465)

Phiên bản 1.1.0-beta01

Ngày 5 tháng 6 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01androidx.fragment:fragment-testing:1.1.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Các lệnh gọi lại androidx.lifecycle.Lifecycle (cụ thể có liên quan đến STARTED, RESUMED, PAUSED, STOPPEDDESTROYED) cho các Mảnh lồng nhau hiện đã được lồng đúng cách. (b/133497591)
  • Giờ đây, các phiên bản OnBackPressedCallback đã đăng ký trong onCreate() của Fragment được ưu tiên hơn phiên bản FragmentManager con. (b/133175997)
  • Các Mảnh con không còn ảnh động khi Mảnh mẹ được thay thế. (b/121017790)
  • Giờ đây, các ảnh động và chuyển đổi Mảnh bị bỏ qua khi bạn sử dụng animateLayoutChanges="true", khắc phục vấn đề các Mảnh không bị huỷ đúng cách. (b/116257087)

Phiên bản 1.1.0-alpha09

Ngày 16 tháng 5 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09androidx.fragment:fragment-testing:1.1.0-alpha09. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi về API

  • Giờ đây, các Mảnh nhận một lệnh gọi lại đến phương thức onPrimaryNavigationFragmentChanged(boolean) mới khi Mảnh điều hướng chính thay đổi. aosp/960857

Sửa lỗi

  • Các mục trong trình đơn được tăng cường bởi một Mảnh con đã được xoá chính xác khi xoá Mảnh mẹ. b/131581013

Phiên bản 1.1.0-alpha08

Ngày 7 tháng 5 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08androidx.fragment:fragment-testing:1.1.0-alpha08. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Bản phát hành này không tương thích với Preferences 1.1.0-alpha01 đến 1.1.0-alpha04. Vui lòng nâng cấp lên Preferences 1.1.0-alpha05 khi sử dụng phiên bản Fragment này.

Tính năng mới

  • Thêm một phương thức nạp chồng mới của postponeEnterTransition() có thời gian chờ, mà sau đó Mảnh sẽ tự động gọi startPostponedEnterTransition() b/120803208

Thay đổi về API

  • Thay đổi có thể gây lỗi: các phương thức FragmentFactoryinstantiate không dùng nữa tiến hành trên Bundle đã bị xoá. aosp/953856
  • Thay đổi có thể gây lỗi: Hằng số RESUME_ONLY_CURRENT_FRAGMENTUSE_SET_USER_VISIBLE_HINT trong FragmentPagerAdapterFragmentStatePagerAdapter lần lượt được đổi tên thành BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENTBEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Sửa lỗi

  • Các Mảnh đã bị giới hạn vòng đời thông qua setMaxLifecycle() không còn được tiếp tục trước khi đạt đến trạng thái cuối cùng. b/131557151
  • Khi sử dụng setMaxLifecycle(Lifecycle.State.CREATED), các Mảnh sẽ huỷ đúng cách chế độ xem của chúng. aosp/954180

Phiên bản 1.1.0-alpha07

Ngày 25 tháng 4 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07androidx.fragment:fragment-testing:1.1.0-alpha07. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Giờ đây, bạn có thể đặt trạng thái Vòng đời tối đa cho một Mảnh bằng cách gọi setMaxLifecycle() trên FragmentTransaction. Thao tác này sẽ thay thế cho setUserVisibleHint() hiện không dùng nữa. FragmentPagerAdapterFragmentStatePagerAdapter có một hàm khởi tạo mới cho phép bạn chuyển sang hành vi mới. (b/129780800)

Các thay đổi về API

  • Giờ đây, bạn chỉ có thể gọi moveToState(STARTED) trên FragmentScenario trên các thiết bị có API 24 trở lên. (b/129880016)

Các thay đổi về hành vi

  • Do (b/129907905), các Mảnh trên ngăn xếp lùi sẽ không nhận được lệnh gọi lại đến onCreateView() khi hoạt động lưu trữ được tạo lại. Giờ đây, onCreateView() sẽ chỉ được gọi khi Mảnh hiển thị (tức là ngăn xếp lùi được bật lên).

Sửa lỗi

  • Khắc phục vấn đề khi sử dụng thẻ <fragment> trong XML và hàm khởi tạo contentLayoutId của FragmentActivity hoặc AppCompatActivity. (b/129907905)
  • Khắc phục vấn đề về việc các Mảnh trên ngăn xếp lui không được di chuyển sang ít nhất CREATED sau khi thay đổi cấu hình, khiến các Fragment ViewModel và các thành phần con cháu được giữ lại không được xử lý đúng cách. (b/129593351)
  • Khắc phục sự cố trong restoreSaveState do việc huỷ đồng bộ hoá các Mảnh được giữ lại sau khi lưu trạng thái thực thể. (b/130433793) (aosp/947824)
  • Khắc phục các vấn đề trong đó OnBackPressedCallback được thêm bằng vòng đời Mảnh sẽ không được gọi nếu FragmentManager có ngăn xếp lui. Xem androidx.activity 1.0.0-alpha07 để biết thêm chi tiết. (aosp/948209)
  • Các Mảnh không còn thực thi LAYER_TYPE_HARDWARE cho ảnh động nữa. Nếu bạn đặc biệt cần ảnh động lớp phần cứng, vui lòng đặt làm một phần ảnh động. (b/129486478)

Phiên bản 1.1.0-alpha06

Ngày 3 tháng 4 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06androidx.fragment:fragment-testing:1.1.0-alpha06. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Các ngoại lệ do FragmentManager gửi hiện có tên của Mảnh trong thông báo. (b/67759402)

Các thay đổi về API

  • Giờ đây, FragmentFragmentActivity chứa một hàm khởi tạo thứ hai nhận @LayoutRes int thay thế hoạt động trước đó của bạn khi thêm chú thích lớp bằng @ContentView. Cách tiếp cận này hoạt động trong cả mô-đun ứng dụng và thư viện. (b/128352521)
  • Giờ đây, onActivityResult() của FragmentActivity được đánh dấu đúng cách là @CallSuper. (b/127971684)
  • Phương thức instantiate của FragmentFactory dùng Gói đối số đã không còn được dùng nữa và các ứng dụng nên sử dụng phương thức nạp chồng mới instantiate mà không sử dụng Gói này. (b/128836103)
  • Giờ đây, các phương thức FragmentScenario được chú thích đúng cách bằng @StyleRes. (aosp/924193)
  • Ngừng sử dụng FragmentTabHost. (b/127971835)
  • getThemedContext() của FragmentActivity đã bị xoá. (aosp/934078)

Sửa lỗi

  • Khắc phục một lỗi hồi quy trong 1.1.0-alpha05 khiến Mảnh được chia sẻ nhấp nháy trên màn hình. (b/129405432)
  • Khắc phục vấn đề trong đó mảnh điều hướng chính sẽ bị mất sau một loạt thao tác popBackStack+replace+popBackStack. (b/124332597)
  • Khắc phục vấn đề khi sử dụng hàm khởi tạo @ContentView trên Hoạt động của bạn khi khôi phục trạng thái Mảnh. (b/127313094)
  • Sửa lỗi logic của setTargetFragment() khi thay thế một Mảnh mục tiêu hiện có bằng một Mảnh chưa được đính kèm vào FragmentManager. (aosp/932156)

Phiên bản 1.1.0-alpha05

Ngày 13 tháng 3 năm 2019

Phát hành androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05androidx.fragment:fragment-testing:1.1.0-alpha05. Bạn có thể xem danh sách đầy đủ các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Hoạt động tra cứu chú giải @ContentView hiện được lưu vào bộ nhớ đệm (b/123709449)

Thay đổi về hành vi

  • Giờ đây, thao tác gọi remove(), hide(), show(), detach()setPrimaryNavigationFragment() có một Mảnh được đính kèm với một FragmentManager khác sẽ gửi IllegalStateException thay vì tắt tiếng không thành công (aosp/904301)

Sửa lỗi

  • onNewIntent cho FragmentActivity hiện được đánh dấu chính xác là @CallSuper (b/124120586)
  • Khắc phục vấn đề trong đó onDismiss() của DialogFragment có thể được gọi hai lần khi sử dụng getDialog().dismiss() hoặc getDialog().cancel() (b/126563750)

Phiên bản 1.1.0-alpha04

Ngày 7 tháng 2 năm 2019

Phát hành androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04androidx.fragment:fragment-testing 1.1.0-alpha04.

Tính năng mới

  • Thêm chức năng hỗ trợ chú giải lớp @ContentView để cho phép bạn chỉ định tệp XML bố cục nào sẽ được tăng cường để thay thế cho việc ghi đè onCreateView(). Bạn nên thực hiện các công việc liên quan đến chế độ xem trong onViewCreated(). (aosp/837619)
  • fragment-testing hiện phụ thuộc vào androidx.test:core-ktx 1.1.0 ổn định (b/121209673)
  • Giờ đây, bạn có thể sử dụng openActionBarOverflowOrOptionsMenu với FragmentScenario để kiểm tra trình đơn tuỳ chọn được lưu trữ trên Mảnh (b/121126668)

Thay đổi về API

  • Thêm phương thức requireArguments() trả về @NonNull Bundle hoặc gửi IllegalStateException (b/121196360)
  • Thêm ghi chú rằng getLifecycle(), getViewLifecycleOwner(), và getViewLifecycleOwnerLiveData() không được ghi đè và sẽ được đưa ra vào bản phát hành chính thức trong tương lai. Vui lòng gửi yêu cầu về tính năng nếu bạn hiện đang ghi đè phương thức này. (aosp/880714)
  • Thêm ghi chú rằng getViewModelStore() không được ghi đè và sẽ được đưa ra vào bản phát hành chính thức trong tương lai. Vui lòng gửi yêu cầu về tính năng nếu bạn hiện đang ghi đè phương thức này. (aosp/880713)
  • Khắc phục vấn đề về khả năng tương thích tệp nhị phân với các bản phát hành trước đó của Mảnh. (aosp/887877) (aosp/889834)

Sửa lỗi

  • Các Mảnh mục tiêu sẽ bị xoá khi bạn chuyển null cho setTargetFragment(). (aosp/849969)
  • Khắc phục vấn đề Mảnh mục tiêu đôi khi không có sẵn trong hoặc sau onDestroy(). (b/122312935)
  • Giờ đây, DialogFragment’s onDismiss() được gọi trước onDestroy(). (aosp/874133) (aosp/890734)

Phiên bản 1.1.0-alpha03

Ngày 17 tháng 12 năm 2018

Tính năng mới

  • Mảnh hiện triển khai BundleSavedStateRegistryOwner và phụ thuộc vào thư viện SavedState mới phát hành [aosp/824380]
  • Thêm phương thức uỷ quyền thuộc tính Kotlin by activityViewModels để truy xuất ViewModels liên kết với Activity vùng chứa [b/119050253]
  • Mở rộng phương thức uỷ quyền thuộc tính by viewModels Kotlin để thực hiện một phương thức lambda không bắt buộc nhằm nhận ViewModelStoreOwner, cho phép bạn chuyển vào Mảnh mẹ hoặc ViewModelStoreOwner tuỳ chỉnh khác có mã như val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

Thay đổi về API

  • FragmentScenario hiện cho phép bạn nêu rõ một giao diện như Theme.AppCompat [b/119054431]. Đây là một thay đổi có thể gây lỗi.
  • Thêm phương thức requireView() trả về @NonNull View hoặc gửi IllegalStateException [b/120241368]
  • Thêm phương thức requireParentFragment() trả về một @NonNull Fragment hoặc gửi IllegalStateException [b/112103783]

Sửa lỗi

  • Khắc phục IllegalStateException: Trạng thái không lưu được b/120814739
  • Các Mảnh đang được khôi phục từ trạng thái phiên bản đã lưu sẽ luôn nhận được Bundle có giá trị không rỗng [b/119794496]
  • Các Mảnh đã xoá không còn sử dụng lại được đối tượng Lifecycle của chúng nếu được thêm lại [b/118880674]

Phiên bản 1.1.0-alpha02

Ngày 3 tháng 12 năm 2018

Tính năng mới

  • Giờ đây, các tiện ích Kotlin của FragmentScenario cho phép bạn sử dụng biểu thức lambda cho quá trình xây dựng Mảnh để thay thế việc chuyển vào phiên bản FragmentFactory. (aosp/812913)

Sửa lỗi

  • Khắc phục IllegalStateException khi sử dụng các Mảnh lồng nhau trên ngăn xếp lui (b/119256498)
  • Khắc phục sự cố khi sử dụng FragmentScenario.recreate() với FragmentFactory (aosp/820540)
  • Khắc phục vấn đề các Mảnh mục tiêu không truy cập được sau khi Mảnh bị xoá (aosp/807634)

Phiên bản 1.1.0-alpha01

Ngày 5 tháng 11 năm 2018

Đây là bản phát hành đầu tiên của cấu phần phần mềm fragment-testingFragmentScenario, được tạo trên các API androidx.test:core. Xem tài liệu về Fragment thử nghiệm để biết thêm thông tin.

Tính năng mới

  • Lớp FragmentScenario mới để thử nghiệm các Mảnh riêng biệt.
  • Giờ đây, bạn có thể đặt FragmentFactory trên bất kỳ FragmentManager nào để kiểm soát cách các phiên bản Fragment mới được tạo bản sao.
  • Thêm một uỷ quyền thuộc tính by viewModels() Kotlin mới để truy xuất ViewModels từ một Mảnh.
  • Các sự kiện đầu vào đang chờ xử lý (chẳng hạn như lượt nhấp) nay bị huỷ trong onStop() của Mảnh.

Thay đổi về API

  • Mở rộng đáng kể các thẻ chú giải có tính chất rỗng trên bề mặt API của Mảnh.

Sửa lỗi

  • Khắc phục vấn đề khiến các thao tác Mảnh không thành công từ LiveData (b/77944637)

Vấn đề đã biết

  • Không thể truy cập các Mảnh mục tiêu sau khi một Mảnh bị xoá khỏi FragmentManager.
  • fragment-testing phụ thuộc vào androidx.test:core:1.0.0-beta01 thay vì androidx.test:core:1.0.0 chính xác.