Fragment
Podziel aplikację na kilka niezależnych ekranów hostowanych w określonej aktywności.
Najnowsza aktualizacja Wersja stabilna Kandydat do wydania Wersja Beta Wydanie alfa
26 czerwca 2024 r. 1.8.1 - - -

Deklarowanie zależności

Aby dodać zależność od fragmentu, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.

W pliku build.gradle aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:

Odlotowy

dependencies {
    def fragment_version = "1.8.1"

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

    // 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")
}

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli odkryjesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj istniejące problemy w tej bibliotece. Możesz oddać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego numeru

Więcej informacji znajdziesz w dokumentacji narzędzia do śledzenia problemów.

Wersja 1.8

Wersja 1.8.1

26 czerwca 2024 r.

Usługa androidx.fragment:fragment-*:1.8.1 została zwolniona. Wersja 1.8.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że przy uruchamianiu gestu przewidywania tekstu wstecznego fragmenty bez kontenera miały stan DESTROYED. Teraz są w stanie CREATED do czasu zakończenia gestu. (If6b83, b/345244539)

Wersja 1.8.0

12 czerwca 2024 r.

Usługa androidx.fragment:fragment-*:1.8.0 została zwolniona. Wersja 1.8.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 1.7.0

  • Artefakt fragment-compose zawiera teraz element Composable AndroidFragment, który umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentów. Automatycznie obsługuje zapisywanie i przywracanie stanu fragmentu. Powinno to być bezpośrednie zastąpienie wcześniej zalecanego sposobu korzystania z funkcji AndroidViewBinding do rozszerzania fragmentu kodu.
  • Wywołanie zwrotne onBackStackChangeCancelled w interfejsie OnBackStackChangedListener interfejsu FragmentManager jest teraz uruchamiane w ramach operacji wykonywania w FragmentManager. Jego ruch jest przybliżony zgodnie z czasem wywołania zwrotnego onBackStackChangeCommitted.

Wersja 1.8.0-rc01

29 maja 2024 r.

Usługa androidx.fragment:fragment-*:1.8.0-rc01 została zwolniona. Wersja 1.8.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Wywołanie zwrotne onBackStackChangeCancelled w interfejsie FragmentManagers OnBackStackChangedListener jest teraz uruchamiane w ramach operacji wykonywania w FragmentManager, przybliżając je zgodnie z czasem wywołania zwrotnego onBackStackChangeCommitted. (I5ebfb, b/332916112)

Wersja 1.8.0-beta01

14 maja 2024 r.

Usługa androidx.fragment:fragment-*:1.8.0-beta01 została zwolniona. Wersja 1.8.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Od fragmentu 1.7.1: prognozowanie wstecz będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają przejście w postaci animacji lub przewijania Androidx. Rozwiązano problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie czarnego ekranu. (I43037, b/339169168)

Wersja 1.8.0-alpha02

17 kwietnia 2024 r.

Usługa androidx.fragment:fragment-*:1.8.0-alpha02 została zwolniona. Wersja 1.8.0-alfa02 zawiera te zatwierdzenia.

Poprawki błędów

  • Z fragmentu 1.7.0-rc02: dodano logi wskazujące, dlaczego ustawienie sharedElement bez innych przejść nie uda się uruchomić. (Iec48e).
  • Z fragmentu 1.7.0-rc02: naprawiliśmy błąd polegający na tym, że w przypadku dodania niewidocznego udostępnionego elementu do transakcji, w których można było przewijać wszystkie pozostałe przejścia, dochodziło do awarii. Teraz transakcja będzie słusznie uznawana za nieoczekiwaną. (I18ccd)

Wersja 1.8.0-alpha01

3 kwietnia 2024 r.

Usługa androidx.fragment:fragment-*:1.8.0-alpha01 została zwolniona. Wersja 1.8.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • Nowa funkcja AndroidFragment Composable umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentów. Automatycznie obsługuje zapisywanie i przywracanie stanu fragmentu. Można go użyć jako bezpośredniego zamiennika obiektu AndroidViewBinding Composable.(b/312895363, Icf841).

Zmiany w dokumentacji

  • Zaktualizowaliśmy dokumentację interfejsów API OnBackStackChangedListener, aby wskazać, kiedy są one wywoływane i jak należy ich używać. (I0bfd9)

Aktualizacja zależności

Wersja 1.7

Wersja 1.7.1

14 maja 2024 r.

Usługa androidx.fragment:fragment-*:1.7.1 została zwolniona. Wersja 1.7.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Przewidywanie wsteczne będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają Animator lub Seekable Przejście z Androida. Rozwiązano problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie pustego ekranu. (I43037, b/339169168)

Wersja 1.7.0

1 maja 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0 została zwolniona. Wersja 1.7.0 zawiera te zatwierdzenia.

Przewidywanie gestów pleców

  • Fragmenty kodu obsługują teraz przewidywanie reklam w aplikacji, gdy korzystasz z Animator lub przejścia z AndroidaX w wersji 1.5.0. Dzięki temu użytkownik może użyć gestu cofania, aby zobaczyć poprzedni fragment. Wystarczy, że przewiniesz animację lub przejście, zanim zdecyduje się zrealizować transakcję przez wykonanie gestu lub anulowanie.
System przenoszenia Zasób XML Obsługuje predykcyjne plecy
Animation R.anim Nie
Animator R.animator Tak
Platforma Transition R.transition Nie
AndroidX Transition z przejściem na wersję 1.4.1 lub starszą R.transition Nie
AndroidX Transition z przejściem na wersję 1.5.0 R.transition Tak

Jeśli po włączeniu gestu przewidywania tekstu wstecznego zauważysz problemy z obsługą funkcji przewidywania tekstu Wstecz we fragmentach kodu, zgłoś problem dotyczący fragmentu, dołączając przykładowy projekt, który go powiela. Aby wyłączyć prognozowanie wsteczne, użyj funkcji FragmentManager.enabledPredictiveBack(false) w sekcji onCreate() aktywności.

FragmentManager.OnBackStackChangedListener() udostępnia teraz funkcje onBackStackChangeProgressed() i onBackStackChangeCancelled() do otrzymywania odpowiednio zdarzeń związanych z przewidywanym postępem wstecznym i zdarzeń anulowanych.

Fragment kodu tworzenia wiadomości

Wprowadziliśmy nowy artefakt fragment-compose skupiający się na obsłudze aplikacji, które są w trakcie przechodzenia z architektury opartej na fragmentach na architekturę w pełni opartą na Compose.

Pierwszą funkcją dostępną w tym nowym artefaktie jest metoda rozszerzenia content w Fragment. Jej celem jest ułatwienie korzystania z funkcji tworzenia wiadomości w interfejsie użytkownika danego fragmentu przez utworzenie dla Ciebie ComposeView i ustawienie właściwej wartości ViewCompositionStrategy.

  class ExampleFragment : Fragment() {

      override fun onCreateView(
          inflater: LayoutInflater,
          container: ViewGroup?,
          savedInstanceState: Bundle?
      ) = content {
          // Write your @Composable content here
          val viewModel: ExampleViewModel = viewModel()

          // or extract it into a separate, testable method
          ExampleComposable(viewModel)
      }
  }

Wersja 1.7.0-rc02

17 kwietnia 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0-rc02 została zwolniona. Wersja 1.7.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Dodaliśmy logi wskazujące, dlaczego ustawienie zasady sharedElement bez żadnych innych przeniesień nie uda się uruchomić. (Iec48e).
  • Naprawiono błąd polegający na tym, że w przypadku dodania niewyszukanego udostępnionego elementu do transakcji, w których można było przewijać wszystkie pozostałe przejścia, powodowała się awaria. Teraz transakcja będzie słusznie uznawana za nieoczekiwaną. (I18ccd)

Wersja 1.7.0-rc01

3 kwietnia 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0-rc01 została zwolniona. Wersja 1.7.0-rc01 zawiera te zatwierdzenia.

Aktualizacja zależności

Wersja 1.7.0-beta01

20 marca 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0-beta01 została zwolniona. Wersja 1.7.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Funkcja FragmentHostCallback jest teraz pisana w Kotlin tak, aby wartość null typu ogólnego typu hosta odpowiadała dopuszczalności wartości null zwracanego typu onGetHost(). (I40af5).

Poprawki błędów

  • Naprawiono błąd, który powodował, że w przypadku wykonania gestu przewidywania tekstu wstecz w przypadku fragmentu, który nie znajduje się w kontenerze, taki fragment nigdy nie został zniszczony. Fragment zostanie natychmiast przeniesiony do stanu ostatecznego. (Ida0d9).
  • Naprawiono błąd we fragmentach „Fragmenty”, który powodował, że przerywanie przychodzących przejść gestem przewidywania skutkowało zniszczeniem widoku wejściowego i pozostawaniem pustego ekranu. (Id3f22, b/319531491)

Wersja 1.7.0-alpha10

7 lutego 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha10 została zwolniona. Wersja 1.7.0-alfa10 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono znany błąd w poprzedniej wersji fragmentu, w którym przy korzystaniu z obsługi prognozowanej wstecznie fragmentu w Animator lub AndroidX były zgłaszane żądania NullPointerException z handleOnBackProgressed, jeśli za pomocą addOnBackStackChangedListener nie dodano żadnego elementu FragmentManager.OnBackStackChangedListener. (I7c835)

Wersja 1.7.0-alpha09

24 stycznia 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha09 została zwolniona. Wersja 1.7.0-alpha09 zawiera te zatwierdzenia.

Fragment kodu tworzenia wiadomości

Wprowadziliśmy nowy artefakt fragment-compose skupiający się na obsłudze aplikacji, które są w trakcie przechodzenia z architektury opartej na fragmentach na architekturę w pełni opartą na Compose.

Pierwszą funkcją dostępną w tym nowym artefaktie jest metoda rozszerzenia content w Fragment. Jej celem jest ułatwienie korzystania z funkcji tworzenia wiadomości w interfejsie użytkownika danego fragmentu przez utworzenie dla Ciebie ComposeView i ustawienie właściwej wartości ViewCompositionStrategy. (561cb7, b/258046948)

class ExampleFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = content {
        // Write your @Composable content here
        val viewModel: ExampleViewModel = viewModel()

        // or extract it into a separate, testable method
        ExampleComposable(viewModel)
    }
}

Nowe funkcje

  • FragmentManager.OnBackStackChangedListener() udostępnia teraz funkcje onBackStackChangeProgressed() i onBackStackChangeCancelled() do otrzymywania odpowiednio zdarzeń związanych z przewidywanym postępem wstecznym i zdarzeń anulowanych. (214b87)

Znany problem

  • Gdy używasz obsługi prognozowania Wstecz z użyciem fragmentu kodu Animator lub przejścia z AndroidaX, fragment kodu zgłasza NullPointerException z handleOnBackProgressed, jeśli w addOnBackStackChangedListener nie dodano jeszcze żadnego elementu FragmentManager.OnBackStackChangedListener. Ręczne dodanie detektora rozwiąże problem. Poprawka dla tego problemu będzie dostępna w następnej wersji fragmentu kodu.

Wersja 1.7.0-alpha08

10 stycznia 2024 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha08 została zwolniona. Wersja 1.7.0-alfa08 zawiera te zatwierdzenia.

Czyszczenie danych

Wersja 1.7.0-alpha07

29 listopada 2023 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha07 została zwolniona. Wersja 1.7.0-alfa07 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono NullPointerException powodowany przez ustawienie przejścia dla udostępnianego elementu oraz brak możliwości ustawienia wejścia/wyjścia. (I8472b)
  • Z fragmentu 1.6.2: gdy fragment kodu FragmentContainerView jest zawyżony, jego stany, takie jak FragmentManager, Host i identyfikator, są teraz dostępne w wywołaniu zwrotnym onInflate. (I1e44c, b/307427423)
  • Z fragmentu 1.6.2: jeśli używasz clearBackStack do usunięcia zestawu fragmentów, wszystkie fragmenty ViewModel zagnieżdżonego fragmentu zostaną wyczyszczone po wyczyszczeniu ViewModels fragmentu nadrzędnego. (I6d83c, b/296173018)

Wersja 1.7.0-alpha06

4 października 2023 roku

Usługa androidx.fragment:fragment-*:1.7.0-alpha06 została zwolniona. Wersja 1.7.0-alfa06 zawiera te zatwierdzenia.

Aktualizacja zależności

  • Fragmenty kodu zostały zaktualizowane, aby korzystać z nowego interfejsu API animateToStart dodanego w przejściu 1.5.0-alpha04.

Wersja 1.7.0-alpha05

20 września 2023 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha05 została zwolniona. Wersja 1.7.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

  • Fragmenty umożliwiają teraz korzystanie z prognozowania podczas korzystania z przejścia Androidax. Dzięki temu możesz użyć gestu cofania, aby przewinąć do poprzedniego fragmentu przy użyciu własnego przejścia Androidx, zanim zdecydujesz się zatwierdzić lub anulować transakcję za pomocą ukończonego gestu. Aby włączyć tę funkcję, musisz polegać na przeniesieniu 1.5.0-alpha03. (Ib49b4, b/285175724)

Znane problemy

  • Obecnie występuje problem, który polega na tym, że po jednorazowym anulowaniu gestu cofnięcia z przejściem następnym razem, gdy uruchomisz gest cofania, przejście nie zostanie wykonane, przez co ekran stanie się pusty. Może to być spowodowane problemem w bibliotece przejść. (b/300157785). Jeśli zauważysz ten problem, zgłoś problem dotyczący fragmentu kodu Fragment, podając przykładowy projekt, który go odtwarza. Aby wyłączyć prognozowanie wsteczne, użyj funkcji FragmentManager.enabledPredictiveBack(false) w sekcji onCreate() aktywności.

Wersja 1.7.0-alpha04

6 września 2023 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha04 została zwolniona. Wersja 1.7.0-alfa04 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z anulowaniem gestu przewidywania tekstu wstecznego, który powodował, że fragment kodu nie zapewniał prawidłowego stanu cyklu życia. (I7cffe, b/297379023)
  • Naprawiono regresje, w przypadku których można było uruchamiać animacje z przejściami. (I59f36)
  • Naprawiono błąd polegający na tym, że w przypadku fragmentów z prognozowaniem wstecznym 2 razy po krótkim czasie cofanie się do ostatniego fragmentu z stosunku tylnego powodowała awarię. (Ifa1a4).

Wersja 1.7.0-alpha03

23 sierpnia 2023 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha03 została zwolniona. Wersja 1.7.0-alfa03 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z fragmentami z fragmentami z powrotem, który powodował, że pierwszy fragment w stosunku wstecznym menedżera fragmentów był pomijany, a działanie kończyło się w przypadku powrotu do systemu za pomocą 3 przycisków lub gestu przewidywania. (I0664b, b/295231788)

Wersja 1.7.0-alpha02

9 sierpnia 2023 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha02 została zwolniona. Wersja 1.7.0-alfa02 zawiera te zatwierdzenia.

Poprawki błędów

  • Jeśli używasz fragmentów z funkcją przewidywania gestów Wstecz z interfejsu API 34, a korzystasz z systemu przejścia, który nie obsługuje przewijania (Animations, Transitions) lub nie obsługuje żadnych przejść, przed wykonaniem działania cofania fragmenty czekają teraz na zakończenie gestu. (I8100C)

Wersja 1.7.0-alpha01

7 czerwca 2023 r.

Usługa androidx.fragment:fragment-*:1.7.0-alpha01 została zwolniona. Ta wersja jest opracowana w gałęzi wewnętrznej.

Nowe funkcje

  • Fragmenty kodu obsługują teraz prognozowanie w aplikacji przy korzystaniu z funkcji Animator. Dzięki temu możesz użyć gestu cofania, aby zobaczyć poprzedni fragment w niestandardowym animatorze, zanim zdecydujesz, czy chcesz zrealizować transakcję za pomocą ukończonego gestu, czy ją anulować. Możesz też wyłączyć to nowe zachowanie, korzystając z eksperymentu enablePredictiveBack() i przekazywania w celu false.

Wersja 1.6

Wersja 1.6.2

1 listopada 2023 roku

Usługa androidx.fragment:fragment-*:1.6.2 została zwolniona. Wersja 1.6.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Gdy fragment kodu FragmentContainerView jest zawyżony, jego stany, takie jak FragmentManager, Host i identyfikator, są teraz dostępne w wywołaniu zwrotnym onInflate. (I1e44c, b/307427423)
  • Jeśli używasz elementu clearBackStack do usunięcia zestawu fragmentów, wszystkie elementy ViewModel zagnieżdżonego fragmentu zostaną wyczyszczone, gdy wyczyszczono ViewModels fragmentu nadrzędnego. (I6d83c, b/296173018)

Wersja 1.6.1

26 lipca 2023 r.

Usługa androidx.fragment:fragment-*:1.6.1 została zwolniona. Wersja 1.6.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że zapisany stan, gdy aktywność została zatrzymana, ale nie została zniszczona, był niewłaściwie buforowany nawet po przywróceniu wystąpienia fragmentu do stanu RESUMED. Spowodowałoby to ponowne użycie stanu z pamięci podręcznej, jeśli wystąpienie fragmentu znajdowało się w stosie wstecznym podczas korzystania z interfejsu API wielu stosów wstecznych do zapisywania i przywracania tego fragmentu. (I71288, b/246289075)

Aktualizacja zależności

  • Fragment jest teraz zależny od Aktywności 1.7.2. Rozwiązano problem, który powodował, że użytkownicy Kotlin nie mogli rozszerzyć możliwości korzystania z ComponentDialog bez wyraźnej zależności od aktywności. (b/287509323)

Wersja 1.6.0

7 czerwca 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0 została zwolniona. Wersja 1.6.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 1.5.0

  • Zapisane stany Fragment zasobów zostały w całości podzielone między stan biblioteki prywatnej (niestandardowe klasy Parcelable) i stan podany przez dewelopera. Teraz jest on zawsze zapisywany w elemencie Bundle, który umożliwia dokładne określenie, skąd dokładnie pochodzi stan fragmentu.
  • Interfejs FragmentManager.OnBackStackChangedListener został rozszerzony o 2 dodatkowe wywołania zwrotne onBackStackChangeStarted i onBackStackChangeCommitted, które są wywoływane z każdym elementem Fragment tuż przed dodaniem ich do stosu fragmentów lub z nich bezpośrednio po zatwierdzeniu transakcji.
  • Operator FragmentStrictMode dodał nowy element WrongNestedHierarchyViolation, który wykrywa, że fragment podrzędny jest zagnieżdżony w hierarchii widoków jej elementu nadrzędnego, ale nie został dodany do jego elementu childFragmentManager.
  • Interfejsy API Fragment i FragmentManager, które przyjmują wartości Intent lub IntentSender, są teraz odpowiednio oznaczone adnotacjami @NonNull. Zapobiega to przekazywaniu wartości null jako wartości null, które zawsze powodowałyby natychmiastową awarię odpowiednich interfejsów API platformy Androida, do których odwołują się te metody.
  • DialogFragment zapewnia teraz dostęp do bazowego źródła danych ComponentDialog za pomocą interfejsu API requireComponentDialog().
  • Fragment zależy teraz od cyklu życia 2.6.1.
  • Fragment korzysta teraz z parametru SavedState 1.2.1.
  • Fragment jest teraz zależny od instalatora profili 1.3.0.
  • Artefakt fragment-testing-manifest oddziela wpisy manifestu od pozostałych komponentów do testowania fragmentów. Oznacza to, że możesz:

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    Pozwala to uniknąć konfliktów z powodu odchylenia wersji między fragment-testing a androidx.test

Wersja 1.6.0-rc01

10 maja 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0-rc01 została zwolniona. Wersja 1.6.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że w przypadku kilku kolejnych żądań startActivityForResult wysyłano żądania ActivityResult z nieprawidłowym kodem żądania. (If0b9d, b/249519359)
  • Rozwiązaliśmy problem, który powodował, że wywołania zwrotne onBackStackChangeListener były wysyłane w przypadku transakcji, które w rzeczywistości nie wpływały na tylny stos, jeśli były pomieszane z transakcjami, które takie działanie miały. (I0eb5c, b/279306628)

Wersja 1.6.0-beta01

19 kwietnia 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0-beta01 została zwolniona. Wersja 1.6.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Użycie parametru postponeEnterTransition z określonym czasem oczekiwania, a następnie zastąpienie odłożonego fragmentu nie powoduje już wycieku przełożonego fragmentu. (I2ec7d, b/276375110)
  • Nowe wywołania zwrotne onBackStackChangeStarted i onBackStackChangeCommitted będą teraz wysyłać fragment tylko raz, nawet jeśli wiele transakcji zawiera ten sam fragment. (IC6B69)

Wersja 1.6.0-alpha09

5 kwietnia 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0-alpha09 została zwolniona. Wersja 1.6.0-alfa09 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • DialogFragment zapewnia teraz dostęp do bazowego źródła danych ComponentDialog za pomocą interfejsu API requireComponentDialog(). (I022e3, b/234274777)
  • Fragmenty commitNow(), executePendingTransactions() i popBackStackImmediate() API zostały oznaczone adnotacjami @MainThread, co oznacza, że teraz wszystkie będą generować błędy kompilacji, jeśli nie zostaną wywołane z wątku głównego, i nie będą czekać na błąd w czasie działania. (IC9665, b/236538905)

Poprawki błędów

  • Naprawiliśmy błąd w FragmentManager, który powodował, że zapisywanie i przywracanie w tej samej ramce mogło powodować awarię. (Ib36af, b/246519668)
  • Wywołania zwrotne OnBackStackChangedListener onBackStackChangeStarted i onBackStackChangeCommitted są teraz wykonywane tylko po zmianie stosu wstecznego FragmentManager. (I66055, b/274788957)

Wersja 1.6.0-alpha08

22 marca 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0-alpha08 została zwolniona. Wersja 1.6.0-alfa08 zawiera te zatwierdzenia.

Zmiana działania

  • Czas wywołania zwrotnego OnBackStackChangedListener.onBackStackChangeCommited został dostosowany tak, aby był wykonywany przed wykonaniem operacji na fragmentach. Dzięki temu wywołanie zwrotne nigdy nie zostanie przekazane odłączony fragment. (I66a76, b/273568280)

Poprawki błędów

  • Z fragmentu 1.5.6: naprawiliśmy problem polegający na tym, że wywołanie clearFragmentResultListener w elemencie setFragmentResultListener nie działało, jeśli Lifecycle miał już wartość STARTED, a wynik był już dostępny. (If7458).

Aktualizacje zależności

Wersja 1.6.0-alpha07

8 marca 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0-alpha07 została zwolniona. Wersja 1.6.0-alfa07 zawiera te zatwierdzenia.

Poprawki błędów

  • Z fragmentu 1.5.6: naprawiliśmy problem polegający na tym, że usunięcie dowolnego fragmentu, niezależnie od tego, czy dodano do niego pozycje menu, skutkowało unieważnieniem menu aktywności. (50f098, b/244336571)

Wersja 1.6.0-alpha06

22 lutego 2023 roku

Usługa androidx.fragment:fragment-*:1.6.0-alpha06 została zwolniona. Wersja 1.6.0-alfa06 zawiera te zatwierdzenia.

Zmiana w działaniu

  • Nowe wywołanie zwrotne onBackStackChangedStarted dla metody onBackStackChangedListener użytkownika FragmentManager będzie teraz wykonywane, zanim fragmenty zaczną przechodzić do stanów docelowych. (I34726)

Wersja 1.6.0-alpha05

8 lutego 2023 r.

Usługa androidx.fragment:fragment-*:1.6.0-alpha05 została zwolniona. Wersja 1.6.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

  • Interfejs FragmentManager.OnBackStackChagnedListener oferuje teraz 2 dodatkowe wywołania zwrotne, onBackStackChangeStarted i onBackStackChangeCommitted, które pozwalają uzyskać dodatkowe informacje i kontrolować czas wystąpienia zmian stosu wstecznego w FragmentManager. (Ib7ce5, b/238686802)

Zmiany interfejsu API

  • Interfejsy API Fragment i FragmentManager, które przyjmują wartości Intent lub IntentSender, są teraz odpowiednio oznaczone adnotacjami @NonNull. Zapobiega to przekazywaniu wartości null jako wartości null, które zawsze powodowałyby natychmiastową awarię odpowiednich interfejsów API platformy Androida, do których wywoływały te metody. (I06fd4)

Wersja 1.6.0-alpha04

7 grudnia 2022 r.

Usługa androidx.fragment:fragment-*:1.6.0-alpha04 została zwolniona. Wersja 1.6.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • Operator FragmentStrictMode dodał nowy element WrongNestedHierarchyViolation, który wykrywa, że fragment podrzędny jest zagnieżdżony w hierarchii widoków jej elementu nadrzędnego, ale nie został dodany do jego elementu childFragmentManager. (I72521, b/249299268)

Zmiany w działaniu

  • Fragmenty przywracają teraz stan SavedStateRegistry przed onAttach(), dzięki czemu są dostępne ze wszystkich metod cyklu życia zwiększającego popularność. (I1e2b1).

Zmiany interfejsu API

  • Artefakt fragment-testing-manifest oddziela wpisy manifestu od pozostałych komponentów do testowania fragmentów. Oznacza to, że możesz:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

Pozwala to uniknąć konfliktów z powodu zniekształcenia wersji między fragment-testing a androidx.test.(I8e534, b/128612536)

Poprawki błędów

Wersja 1.6.0-alpha03

5 października 2022 r.

androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03 i androidx.fragment:fragment-testing:1.6.0-alpha03 zostały udostępnione. Wersja 1.6.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Klasy z rozszerzeniem DialogFragment będą teraz musiały wywoływać funkcję Super w zastąpieniach typu onDismiss(). (I14798, b/238928865)

Poprawki błędów

  • Usunięto regresje spowodowane przez integrację nowych interfejsów wywołań zwrotnych nowego dostawcy (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider), aby fragmenty otrzymywały prawidłowe wywołania zwrotne. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)

Wersja 1.6.0-alpha02

24 sierpnia 2022 r.

androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02 i androidx.fragment:fragment-testing:1.6.0-alpha02 zostały udostępnione. Wersja 1.6.0-alfa02 zawiera te zatwierdzenia.

Poprawki błędów

  • Z fragmentu 1.5.2: naprawiono błąd, który powodował, że jednoczesne wykonanie transakcji popBackStack() i replace() mogło powodować, że podczas wyjścia fragmenty kodu Animation/Animator były uruchamiane nieprawidłowe działanie Animation/Animator. (Ib1c07, b/214835303)

Wersja 1.6.0-alpha01

27 lipca 2022 roku

androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01 i androidx.fragment:fragment-testing:1.6.0-alpha01 zostały udostępnione. Wersja 1.6.0-alfa01 zawiera te zatwierdzenia.

Zmiany w działaniu

  • Zapisane stany Fragment zasobów zostały w całości podzielone między stan biblioteki prywatnej (niestandardowe klasy Parcelable) i stan podany przez dewelopera. Teraz jest on zawsze zapisywany w elemencie Bundle, który umożliwia dokładne określenie, skąd dokładnie pochodzi stan fragmentu. (b/207158202)

Poprawki błędów

  • Z fragmentu 1.5.1: napraw regresję w DialogFragmentCallbacksDetector, w której użycie wersji lint pakietu z pakietem AGP 7.4 powodowało awarię lint. (B/237567009)

Aktualizacja zależności

Wersja 1.5

Wersja 1.5.7

19 kwietnia 2023 r.

androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7 i androidx.fragment:fragment-testing:1.5.7 zostały udostępnione. Wersja 1.5.7 zawiera te zatwierdzenia.

Poprawki błędów

  • Użycie parametru postponeEnterTransition z określonym czasem oczekiwania, a następnie zastąpienie odłożonego fragmentu nie powoduje już wycieku przełożonego fragmentu. (I2ec7d, b/276375110)

Wersja 1.5.6

22 marca 2023 r.

androidx.fragment:fragment:1.5.6, androidx.fragment:fragment-ktx:1.5.6 i androidx.fragment:fragment-testing:1.5.6 zostały udostępnione. Wersja 1.5.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że usunięcie fragmentu (niezależnie od tego, czy dodano pozycje w menu, czy nie) skutkowało unieważnieniem menu aktywności. (50f098, b/244336571)
  • Rozwiązaliśmy problem, który powodował, że wywołanie clearFragmentResultListener w elemencie setFragmentResultListener nie działało, jeśli Lifecycle miał już wartość STARTED, a wynik był już dostępny. (If7458).

Wersja 1.5.5

7 grudnia 2022 r.

androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5 i androidx.fragment:fragment-testing:1.5.5 zostały udostępnione. Wersja 1.5.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragmenty nie będą już nieprawidłowo zapisywać stanu ViewModel w ramach stanu zapisanego rejestru widoków. (I10d2b, b/253546214)

Wersja 1.5.4

24 października 2022 r.

androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4 i androidx.fragment:fragment-testing:1.5.4 zostały udostępnione. Wersja 1.5.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd polegający na tym, że użycie niestandardowego elementu FragmentController z hostem bez implementacji interfejsu wywołania zwrotnego dostawcy (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) i wywołanie wycofanej funkcji wysyłania nie powodowało wysłania wiadomości do fragmentów podrzędnych. (I9B380)

Wersja 1.5.3

21 września 2022 r.

androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3 i androidx.fragment:fragment-testing:1.5.3 zostały udostępnione. Wersja 1.5.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że fragmenty stosu tylnego otrzymywały wywołania zwrotne onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() i onConfigurationChanged(). (I34581, I8dfe6, b/242570955)
  • Zagnieżdżone fragmenty podrzędne nie będą już otrzymywać wielu wywołań zwrotnych onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() ani onConfigurationChanged(). (I690b3, Id0096, If9d6b, I2cba2)

Wersja 1.5.2

10 sierpnia 2022 r.

androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2 i androidx.fragment:fragment-testing:1.5.2 zostały udostępnione. Wersja 1.5.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że jednoczesne wykonanie transakcji popBackStack() i replace() mogło powodować uruchomienie we fragmentach wyjściowych nieprawidłowego parametru Animation/Animator. (Ib1c07, b/214835303)

Wersja 1.5.1

27 lipca 2022 roku

androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1 i androidx.fragment:fragment-testing:1.5.1 zostały udostępnione. Wersja 1.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Napraw regresję w DialogFragmentCallbacksDetector, w której użycie wersji lint pakietu z pakietem AGP 7.4 powodowało awarię lint. (B/237567009)

Aktualizacja zależności

Wersja 1.5.0

29 czerwca 2022 r.

androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0 i androidx.fragment:fragment-testing:1.5.0 zostały udostępnione. Wersja 1.5.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 1.4.0

  • Integracja dodatków do tworzenia – usługa Fragment może teraz udostępniać bezstanowe ViewModelProvider.Factory za pomocą funkcji CreationExtras w cyklu życia 2.5.0.
  • Integracja okna dialogowego komponentuDialogFragment używa teraz elementu ComponentDialog w ramach Aktywności 1.5.0 jako domyślnego okna dialogowego zwracanego przez aplikację onCreateDialog().
  • Refaktoryzacja stanu zapisanej instancji – fragmenty zaczęły zmieniać sposób zapisywania stanu instancji. Ma to pomóc w jasnym zidentyfikowaniu stanu zapisanego we fragmencie oraz jego źródła. Bieżące zmiany to między innymi:
    • FragmentManager zapisuje teraz zapisany stan instancji w Bundle, a nie bezpośrednio w niestandardowym Parcelable.
    • Wyniki ustawione przez Fragment Result APIs, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznego FragmentManager.
    • Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego FragmentManager, co pozwala skorelować ilość zapisanego stanu powiązanego z poszczególnym fragmentem z unikalnymi identyfikatorami występującymi w logowaniu debugowania Fragment.

Inne zmiany

  • FragmentStrictMode umożliwia teraz prywatnym fragmentom innych firm omijanie określonych kar za naruszenie zasad dzięki użyciu allowViolation() z nazwą klasy.
  • Interfejsy API z fragmentami z krzyżykiem służące do dostarczania menu do sekcji ActionBar Twojej aktywności zostały wycofane. Interfejsy API MenuHost i MenuProvider dodane w Aktywności 1.4.0 udostępniają możliwą do testowania, zorientowaną na cykl życia równoważną powierzchnię interfejsu API, której powinny używać fragmenty.

Wersja 1.5.0-rc01

11 maja 2022 roku

androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01 i androidx.fragment:fragment-testing:1.5.0-rc01 zostały udostępnione. Wersja 1.5.0-rc01 zawiera te zatwierdzenia.

Refaktoryzacja stanu zapisanej instancji

  • Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego FragmentManager, dzięki czemu możesz skorelować ilość zapisanego stanu powiązanego z poszczególnym fragmentem z unikalnymi identyfikatorami występującymi w rejestrowaniu debugowania fragmentów. (A153e0, b/207158202)

Wersja 1.5.0-beta01

20 kwietnia 2022 r.

androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01 i androidx.fragment:fragment-testing:1.5.0-beta01 zostały udostępnione. Wersja 1.5.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Funkcja DialogFragment dodała nową metodę dismissNow, która używa commitNow w celu zapewnienia spójności z funkcją showNow. Pamiętaj, że nie spowoduje to natychmiastowego zamknięcia obiektu Dialog – spowoduje to tylko synchroniczną aktualizację stanu elementu FragmentManager. (I15c36, b/72644830)

Refaktoryzacja stanu zapisanej instancji

  • FragmentManager zapisuje teraz zapisany stan instancji w Bundle, a nie bezpośrednio w niestandardowym Parcelable. To pierwszy krok na drodze do uzyskania dodatkowego wglądu w to, co faktycznie jest zapisywane przez fragmenty. (I93807, b/207158202)
  • Wyniki ustawione przez interfejsy Fragment Result API, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznego FragmentManager. Dzięki temu uzyskasz lepszy wgląd w wyniki, które są zapisywane w ramach stanu zapisanej instancji. (I6ea12, b/207158202)

Wersja 1.5.0-alpha05

6 kwietnia 2022 roku

androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05 i androidx.fragment:fragment-testing:1.5.0-alpha05 zostały udostępnione. Wersja 1.5.0-alfa05 zawiera te zatwierdzenia.

Zmiany interfejsu API

Wersja 1.5.0-alpha04

23 marca 2022 r.

androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04 i androidx.fragment:fragment-testing:1.5.0-alpha04 zostały udostępnione. Wersja 1.5.0-alfa04 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Interfejsy API z fragmentami z krzyżykiem służące do tworzenia menu sekcji ActionBar Twojej aktywności zostały wycofane, ponieważ ściśle wiążą Twój fragment z Twoją aktywnością i nie można ich testować w oddzielnym trybie. Interfejsy API MenuHost i MenuProvider dodane w Aktywności 1.4.0-alpha01 udostępniają możliwą do testowania, zorientowaną na cykl życia równoważną powierzchnię interfejsu API, której powinny używać fragmenty. (I50a59, I20758)

Poprawki błędów

  • SavedStateViewFactory obsługuje teraz korzystanie z CreationExtras nawet wtedy, gdy zostało zainicjowane za pomocą SavedStateRegistryOwner. Jeśli podano dodatki, zainicjowane argumenty są ignorowane. (I6c43b, b/224844583)

Wersja 1.5.0-alpha03

23 lutego 2022 r.

androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03 i androidx.fragment:fragment-testing:1.5.0-alpha03 zostały udostępnione. Wersja 1.5.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Teraz możesz przekazać CreationExtras do funkcji by viewModels() i by activityViewModels(). (Ibefe7, b/217601110)

Zmiany w działaniu

Wersja 1.5.0-alpha02

9 lutego 2022 r.

androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02 i androidx.fragment:fragment-testing:1.5.0-alpha02 zostały udostępnione. Wersja 1.5.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentStrictMode umożliwia teraz prywatnym fragmentom innych firm omijanie określonych kar za naruszenie zasad dzięki użyciu allowViolation() z nazwą klasy. (I8f678)

Wersja 1.5.0-alpha01

26 stycznia 2022 r.

androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01 i androidx.fragment:fragment-testing:1.5.0-alpha01 zostały udostępnione. Wersja 1.5.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Z fragmentu 1.4.1: FragmentContainerView nie zgłasza już niedozwolonego wyjątku stanu, gdy identyfikatory widoków wygenerowane na podstawie pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • Z fragmentu 1.4.1: gdy używasz niestandardowej funkcji lambda ownerProducer z funkcją leniwą by viewModels(), jeśli nie podano niestandardowego elementu ViewModelProvider.Factory, zamiast zawsze używać fabryki fragmentu, jeśli nie podano niestandardowego elementu ViewModelProvider.Factory.defaultViewModelProviderFactory (I56170, b/214106513)
  • Rozwiązaliśmy problem, który powodował awarię, która powodowała pierwszy raz dostęp do elementu ViewModel z wywołania zwrotnego registerForActivityResult() elementu Fragment. (IEa2b3).

Wersja 1.4

Wersja 1.4.1

26 stycznia 2022 r.

androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1 i androidx.fragment:fragment-testing:1.4.1 zostały udostępnione. Wersja 1.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • FragmentContainerView nie zgłasza już niedozwolonego wyjątku stanu, gdy identyfikatory widoków wygenerowane na podstawie pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • Gdy używasz niestandardowej funkcji lambda ownerProducer z funkcją leniwą by viewModels(), jeśli nie podano niestandardowej wartości ViewModelProvider.Factory, będzie ona teraz używać parametru defaultViewModelProviderFactory tego właściciela. Zamiast tego zawsze będzie używać fabryki fragmentu. (I56170, b/214106513)

Wersja 1.4.0

17 listopada 2021 r.

androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0 i androidx.fragment:fragment-testing:1.4.0 zostały udostępnione. Wersja 1.4.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 1.3.0

  • Interfejsy API FragmentStrictMode udostępniają testy środowiska wykonawczego, które pozwalają sprawdzić, czy aplikacja lub biblioteki, z których korzystasz, nie wywołują wycofanych interfejsów API z fragmentami. W przypadku wykrycia naruszenia zasad możesz wydrukować komunikat logu, aktywować własny detektor lub zawiesić aplikację. Element FragmentStrictMode.Policy kontrolujący włączanie sprawdzania i nakładane kary można ustawić w elemencie FragmentManager za pomocą nowej metody setStrictModePolicy(). Ta zasada obowiązuje w odniesieniu do tego elementu FragmentManager i przechodni do wszystkich podrzędnych menedżerów fragmentów, które nie mają ustawionych własnych unikalnych zasad. Więcej informacji o fragmentach znajdziesz w sekcji StrictMode.
  • FragmentContainerView udostępnia teraz metodę getFragment(), która zwraca fragment, który został ostatnio dodany do kontenera. Wykorzystuje tę samą logikę co findFragmentById() z identyfikatorem FragmentContainerView, ale umożliwia łańcuch wywołań.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario implementuje teraz Closeable, co pozwala na korzystanie z niej za pomocą metody use Kotlina lub try-with-resources.

  • Dodano FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}, aby określić, czy chcesz włączyć standardową animację przejścia z motywu na podstawie fragmentu kodu.

  • Eksperymentalny interfejs API FragmentManager.enableNewStateManager(boolean) został usunięty i obecnie jedyną dostępną opcją jest nowy menedżer stanu.

Wiele wstecznych stosów

FragmentManager utrzymuje stos zaplecza złożony z transakcji obejmujących fragmenty, które korzystały z addToBackStack(). Dzięki temu możesz skompletować te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywanie stanu z fragmentami, które umożliwiają odpowiednie przywracanie stanu fragmentów.

Ta wersja rozszerza te mechanizmy o 3 nowe interfejsy API usługi FragmentManager: saveBackStack(String name), restoreBackStack(String name) i clearBackStack(String name). Te interfejsy API używają tego samego identyfikatora name co addToBackStack(), aby zapisać stan elementu FragmentTransaction i stan każdego fragmentu, który został dodany w tych transakcjach. Dzięki temu możesz później przywrócić te transakcje i ich fragmenty z niezmienionym stanem. Dzięki temu możesz skutecznie przełączać się między kilkoma stosami wstecznymi, zapisując bieżący stos i przywracając jeden z zapisanych.

Funkcja saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczna i powoduje cofnięcie wszystkich transakcji dotyczących fragmentów z powrotem do tej konkretnej nazwy, a wszystkie dodane fragmenty do zniszczenia i usunięcia. Różni się jednak kilka istotnych aspektów:

  • Pole saveBackStack() zawsze uwzględnia warunki.
  • W przeciwieństwie do funkcji popBackStack(), która powoduje, że wszystkie transakcje są umieszczane na stosie wstecznym, jeśli podana nazwa nie znajduje się w stosie wstecznym lub jeśli podana nazwa jest pusta, saveBackStack() nie robi nic, jeśli nie zatwierdzono wcześniej transakcji z fragmentami za pomocą addToBackStack() z taką samą, niepustą nazwą.
  • Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że zapisywany jest stan wyświetlania każdego fragmentu, wywoływany jest onSaveInstanceState() każdego fragmentu i ten stan zostaje przywrócony, a wszystkie powiązane z nimi instancje ViewModel są zachowywane (a onCleared() nie jest dla nich wywoływane).

Transakcje z fragmentami, których można używać z funkcją saveBackStack(), muszą spełniać określone kryteria:

  • Aby transakcje mogły zostać przywrócone w ramach pojedynczej, niepodzielnej operacji, każda transakcja wykorzystująca fragment kodu musi korzystać z parametru setReorderingAllowed(true).
  • Zapisane transakcje muszą być niezależne (tzn. nie mogąnie odnosić się bezpośrednio do żadnych fragmentów spoza tego zbioru transakcji), aby umożliwić ich przywrócenie w dowolnym momencie, bez względu na to, jakie zmiany zostały wprowadzone w stosie wstecznym.
  • Żaden zapisany fragment nie może być zachowanym fragmentem lub mieć zachowany fragment w przechodnim zestawie fragmentów podrzędnych, aby mieć pewność, że po zapisaniu stosu wstecznego FragmentManager nie zwróci żadnych odwołań do zapisanych fragmentów.

Podobnie jak w przypadku zdarzeń saveBackStack(), restoreBackStack() i clearBackStack(), które powodują przywrócenie wcześniej zapisanego stosu wstecznego lub usunięcie wcześniej zapisanego stosu, obie te działania nie mają żadnego działania, jeśli nie zostało przez Ciebie wcześniej wywołane saveBackStack() o tej samej nazwie.

Więcej informacji znajdziesz w artykule Wiele wstecznych stosów: szczegółowa analiza.

Wersja 1.4.0-rc01

3 listopada 2021 r.

Wersja androidx.fragment:fragment:1.4.0-rc01 została opublikowana bez zmian z fragmentu w wersji 1.4.0-beta01. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.

Wersja 1.4.0-beta01

27 października 2021 roku

androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 i androidx.fragment:fragment-testing:1.4.0-beta01 zostały udostępnione. Wersja 1.4.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragmenty nadrzędne będą teraz wysyłać element onHiddenChanged() w całej hierarchii przed uruchomieniem własnego wywołania zwrotnego. (Iedc20, b/77504618)
  • Klawiatura zamyka się teraz automatycznie w przypadku przejścia od fragmentu z otwartą klawiaturą do fragmentu z widokiem elementu recyklingu. (I8b842, b/196852211)
  • DialogFragment używa teraz setReorderingAllowed(true) do wszystkich transakcji, które tworzy, gdy wywołujesz show(), showNow() lub dismiss(). (IE2c14).
  • Bardzo długie ostrzeżenie o przypadku licencji DetachAndAttachFragmentInSameFragmentTransaction zostało skrócone do DetachAndAttachSameFragment. (E9Eca3).

Wersja 1.4.0-alpha10

29 września 2021 r.

androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 i androidx.fragment:fragment-testing:1.4.0-alpha10 zostały udostępnione. Wersja 1.4.0-alfa10 zawiera te zatwierdzenia.

Lint

  • Dodaliśmy ostrzeżenie dotyczące lintowania DetachAndAttachFragmentInSameFragmentTransaction w przypadku wykrycia wywoływania zarówno detach(), jak i attach() na tym samym Fragment w tej samej FragmentTransaction. Ponieważ te uzupełniające operacje wykonują się wzajemnie w ramach tej samej transakcji, muszą zostać rozdzielone na osobne transakcje, aby można było wykonać jakieś działanie. (Aosp/1832956, b/200867930)
  • Dodano błąd lintowania FragmentAddMenuProvider w celu skorygowania użycia cyklu życia fragmentu do cyklu życia widoku fragmentu w przypadku korzystania z interfejsu API addMenuProvider typu MenuHost. (Aosp/1830457, b/200326272)

Aktualizacje dokumentacji

  • Komunikat o wycofaniu interfejsów API obsługiwany teraz przez interfejsy Activity Result API (startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions i onRequestPermissionsResult) został rozszerzony i zawiera więcej szczegółów. (CCE80F)
  • Wiadomość o wycofaniu usługi onActivityCreated() dotycząca zarówno wersji Fragment, jak i DialogFragment została uzupełniona o więcej informacji. (224db4).

Wersja 1.4.0-alpha09

15 września 2021 r.

androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09 i androidx.fragment:fragment-testing:1.4.0-alpha09 zostały udostępnione. Wersja 1.4.0-alfa09 zawiera te zatwierdzenia.

Nowe funkcje

  • Możesz teraz wywołać funkcję clearBackStack(name), aby wyczyścić wszystkie stany zapisane wcześniej w usłudze saveBackStack(name). (I70cd7)

Zmiany interfejsu API

  • Klasa FragmentContainerView została przepisana w Kotlin, tak aby funkcja getFragment prawidłowo uwzględniała możliwość wartości null. (If694a, b/189629145)
  • FragmentMode jest teraz napisany w języku Kotlin (I11767, b/199183506)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że stan fragmentu, który został dodany za pomocą metody setReorderingAllowed(true), a następnie natychmiast usunięty przed wykonaniem oczekujących transakcji, nie był prawidłowo oczyszczony. (I8ccb8)

Wersja 1.4.0-alpha08

1 września 2021 roku

androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08 i androidx.fragment:fragment-testing:1.4.0-alpha08 zostały udostępnione. Wersja 1.4.0-alfa08 zawiera te zatwierdzenia.

Poprawki błędów

  • Poprawiliśmy sprawdzanie lint w UseRequireInsteadOfGet, aby lepiej obsługiwać zbędne nawiasy. (I2d865)
  • Poprawiliśmy sprawdzanie licencji UseGetLayoutInflater, aby obsługiwać dodatkowe przypadki skrajne. (IE5423)

Wersja 1.4.0-alpha07

18 sierpnia 2021 r.

Wersje androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 i androidx.fragment:fragment-testing:1.4.0-alpha07 zostały udostępnione bez istotnych zmian. Wersja 1.4.0-alfa07 zawiera te zatwierdzenia.

Wersja 1.4.0-alpha06

4 sierpnia 2021 r.

androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06 i androidx.fragment:fragment-testing:1.4.0-alpha06 zostały udostępnione. Wersja 1.4.0-alfa06 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z wieloma stosami tylnymi, które występowały podczas szybkiego przełączania między stosami tylnymi, które pojawiały się jako IllegalStateException podczas przywracania elementu FragmentTransaction lub jako druga kopia fragmentu. (I9039f)
  • Rozwiązaliśmy problem, który powodował, że usługa FragmentManager zachowywała kopię stanu zapisaną wcześniej przez saveBackStack() nawet po przywróceniu stanu. (Ied212).
  • Metoda dismissAllowingStateLoss() obiektu DialogFragment nie ulega już awarii, gdy wywołujesz ją po zapisaniu stanu przy dodawaniu fragmentu DialogFragment za pomocą metody show(FragmentTransaction, String). (I84422)

Wersja 1.4.0-alpha05

21 lipca 2021 r.

androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05 i androidx.fragment:fragment-testing:1.4.0-alpha05 zostały udostępnione. Wersja 1.4.0-alfa05 zawiera te zatwierdzenia.

Poprawki błędów

  • Z fragmentu 1.3.6: widok fragmentu jest teraz prawidłowo ustawiony na GONE, gdy używasz hide(), gdy widok główny ma ustawiony transitionGroup=”true”. (aosp/1766655, b/193603427)
  • Z fragmentu 1.3.6: FragmentActivity teraz zawsze odblokowuje zapisany stan jako pierwszą operację w wywołaniach zwrotnych cyklu życia, które zastępuje. (I6db7a)

Aktualizacja zależności

Wersja 1.4.0-alpha04

30 czerwca 2021 r.

androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04 i androidx.fragment:fragment-testing:1.4.0-alpha04 zostały udostępnione. Wersja 1.4.0-alfa04 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • FragmentManager używa teraz modułu SavedStateRegistry dla zaawansowanych, aby zapisać swój stan. Metody saveAllState() i restoreSavedState() zostały również wycofane w metodzie FragmentController. Jeśli używasz FragmentController do hostowania fragmentów poza obszarem FragmentActivity, musisz mieć implementację FragmentHostCallbacks implementacji SavedStateRegistryOwner. (Iba68e, b/188734238)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że wywołanie saveBackStack() w ramach obsługi wielu stosów zwrotnych nie było możliwe, gdy było wykonywane w tym samym czasie co polecenie FragmentTransaction, które używało replace(). (I73137)
  • Poprawiliśmy błąd NullPointerException, który występował po ręcznym przywróceniu zapisanego stosu zawierającego wiele transakcji podczas korzystania z interfejsu API restoreBackStack() do obsługi wielu stosów wstecznych. Rozwiązaliśmy też problem, który powodował, że usługa setReorderingAllowed(true) nie była sprawdzana w przypadku wszystkich transakcji. (I8C593)
  • Rozwiązaliśmy problem, który powodował, że usługa FragmentManager nieprawidłowo przywracała wcześniej zapisany stan fragmentów nawet po usunięciu tych fragmentów z elementu FragmentManager, przez co stan zapisanego stanu stale się powiększał. (I1fb8e)

Wersja 1.4.0-alpha03

16 czerwca 2021 r.

androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 i androidx.fragment:fragment-testing:1.4.0-alpha03 zostały udostępnione. Wersja 1.4.0-alfa03 zawiera te zatwierdzenia.

Nowe funkcje

  • Wszystkie klasy Fragment StrictMode Violation zostały zaktualizowane o bardziej szczegółowe komunikaty o błędach, które wyjaśniają szczegóły naruszenia. (b/187871638)
    • FragmentTagUsageViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który wskazuje kontener nadrzędny, do którego zostałby dodany fragment. (IC33a7).
    • WrongFragmentContainerViolation zawiera teraz bardziej szczegółowy komunikat o błędzie obejmujący kontener, do którego dodano fragment. (IB55f8).
    • Klasy przypadków użycia funkcji TargetFragmentUsageViolation zawierają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie i inne zawarte w nim informacje. (Icc6ac).
    • Klasy rozszerzenia RetainInstanceUsageViolation zawierają teraz bardziej szczegółowe komunikaty o błędach zawierające fragment powodujący naruszenie. (I6bd55)
    • FragmentReuseViolation ma teraz bardziej szczegółowy komunikat o błędzie, który obejmuje poprzedni identyfikator fragmentu. (I28ce2).
    • SetUserVisibleHintViolation zawiera teraz bardziej szczegółowy komunikat o błędzie zawierający wartość wskazówkę widoczną dla użytkownika. (Ib2d5f)

Zmiany w działaniu

  • Cofnięto ograniczenie nawiązywania połączeń z użytkownikiem fitsSystemWindows na urządzeniu FragmentContainerView – nie powoduje to już awarii aplikacji. (6b8ddd, b/190622202)

Poprawki błędów

  • Z fragmentu 1.3.5: naprawiono regresję w przejściach elementów udostępnionych wprowadzonych we Fragmentie 1.3.4 przez aosp/1679887. Fragmenty prawidłowo obsługują teraz grupy przejść (ustawione bezpośrednio przez transitionGroup="true" lub pośrednio za pomocą transitionName bądź background), a udostępnione elementy nie będą już zgłaszać elementów IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)
  • FragmentManager nie będzie już ulegać awarii, gdy spróbujesz ukryć usuwany fragment. (I573dd, b/183634730)
  • Kontrola lintowania OnCreateDialogIncorrectCallback nie będzie już powodowała awarii podczas oceny zmiennej najwyższego poziomu. (0a9efa, b/189967522)

Wersja 1.4.0-alpha02

2 czerwca 2021 r.

androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02 i androidx.fragment:fragment-testing:1.4.0-alpha02 zostały udostępnione. Wersja 1.4.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • Gdy logowanie jest włączone przez FragmentManager, FragmentStrictMode zawsze będzie rejestrować naruszenia, niezależnie od bieżącej zasady trybu ścisłego. (I02df6, b/187872638)
  • FragmentStrictMode umożliwia teraz wykluczanie określonych klas Fragment z trybu ścisłego Violation, co pozwala tej klasie na pominięcie kar. (Ib4e5d, b/184786736)

  • Klasa FragmentStrictMode Violation została rozwinięta, aby dodać informacje o strukturze poszczególnych naruszeń. Pozwoli Ci to sprawdzić dokładnie, co spowodowało naruszenie zasad, a także fragment naruszający zasady (If5118, b/187871150), każdy element Violation ma następujące elementy:

    • WrongFragmentContainerViolation zawiera teraz obiekt ViewGroup, do którego próbowano dodać Fragment. (I83c75, b/187871150)
    • TargetFragmentUsageViolationzostały rozwinięte do SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation i GetTargetFragmentRequestCodeUsageViolation, przy czym SetTargetFragmentUsageViolation zawiera docelowy fragment i kod żądania. (I741b4, b/187871150)
    • SetUserVisibleHintViolation zawiera teraz wartość logiczną przekazywaną do setUserVisibleHint(). (I00585, b/187871150)
    • FragmentTagUsageViolation zawiera teraz grupę widoków, w której tag <fragment> próbował nadrobić fragment kodu.(I5dbbc, b/187871150)
    • FragmentReuseViolation zawiera teraz unikalny identyfikator poprzedniej instancji Fragment, która spowodowała naruszenie. (I0544d, b/187871150)
    • Funkcja RetainInstanceUsageViolation jest teraz abstrakcyjna i ma 2 podklasy: SetRetainInstanceUsageViolation i GetRetainInstanceUsageViolation, które reprezentują 2 przypadki typu naruszenia. (Ic81e5, b/187871150)

Zmiany w działaniu

  • FragmentContainerView zgłasza teraz wyjątek podczas próby zmiany atrybutu fitsSystemWindow automatycznie lub za pomocą kodu XML. Wstawki powinny być obsługiwane przez widok poszczególnych fragmentów. (IE6651, b/187304502)

Wersja 1.4.0-alpha01

18 maja 2021 r.

androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01 i androidx.fragment:fragment-testing:1.4.0-alpha01 zostały udostępnione. Wersja 1.4.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentContainerView udostępnia teraz metodę getFragment(), która zwraca fragment, który został ostatnio dodany do kontenera. Wykorzystuje tę samą logikę co findFragmentById() z identyfikatorem FragmentContainerView, ale umożliwia łańcuch wywołań. (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • Dodano FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}, aby określić, czy chcesz włączyć standardową animację przejścia z motywu na podstawie fragmentu kodu. (I46652)

Wiele wstecznych stosów

FragmentManager utrzymuje stos zaplecza złożony z transakcji obejmujących fragmenty, które korzystały z addToBackStack(). Dzięki temu możesz skompletować te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywanie stanu z fragmentami, które umożliwiają odpowiednie przywracanie stanu fragmentów.

W tej wersji rozszerzamy te mechanizmy o 2 nowe interfejsy API FragmentManager: saveBackStack(String name) i restoreBackStack(String name). Te interfejsy API używają tego samego identyfikatora name co addToBackStack(), aby zapisać stan elementu FragmentTransaction i stan każdego fragmentu, który został dodany w tych transakcjach. Dzięki temu możesz później przywrócić te transakcje i ich fragmenty z niezmienionym stanem. Dzięki temu możesz skutecznie przełączać się między kilkoma stosami wstecznymi, zapisując bieżący stos i przywracając jeden z zapisanych.

Funkcja saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczna i powoduje cofnięcie wszystkich transakcji dotyczących fragmentów z powrotem do tej konkretnej nazwy, a wszystkie dodane fragmenty do zniszczenia i usunięcia. Różni się jednak kilka istotnych aspektów:

  • Pole saveBackStack() zawsze uwzględnia warunki.
  • W przeciwieństwie do funkcji popBackStack(), która powoduje, że wszystkie transakcje są umieszczane na stosie wstecznym, jeśli podana nazwa nie znajduje się w stosie wstecznym lub jeśli podana nazwa jest pusta, saveBackStack() nie robi nic, jeśli nie zatwierdzono wcześniej transakcji z fragmentami za pomocą addToBackStack() z taką samą, niepustą nazwą.
  • Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że zapisywany jest stan wyświetlania każdego fragmentu, wywoływany jest onSaveInstanceState() każdego fragmentu i ten stan zostaje przywrócony, a wszystkie powiązane z nimi instancje ViewModel są zachowywane (a onCleared() nie jest dla nich wywoływane).

Transakcje z fragmentami, których można używać z funkcją saveBackStack(), muszą spełniać określone kryteria:

  • Aby transakcje mogły zostać przywrócone w ramach pojedynczej, niepodzielnej operacji, każda transakcja wykorzystująca fragment kodu musi korzystać z parametru setReorderingAllowed(true).
  • Zapisane transakcje muszą być niezależne (tzn. nie mogąnie odnosić się bezpośrednio do żadnych fragmentów spoza tego zbioru transakcji), aby umożliwić ich przywrócenie w dowolnym momencie, bez względu na to, jakie zmiany zostały wprowadzone w stosie wstecznym.
  • Żaden zapisany fragment nie może być zachowanym fragmentem lub mieć zachowany fragment w przechodnim zestawie fragmentów podrzędnych, aby mieć pewność, że po zapisaniu stosu wstecznego FragmentManager nie zwróci żadnych odwołań do zapisanych fragmentów.

Podobnie jak w przypadku funkcji saveBackStack(), restoreBackStack() nie robi nic, jeśli nie zostało przez Ciebie wcześniej wysłane połączenie z tą samą nazwą (saveBackStack()). (B/80029773)

Fragment StrictMode

Interfejsy API FragmentStrictMode udostępniają testy środowiska wykonawczego, które pozwalają sprawdzić, czy aplikacja lub biblioteki, z których korzystasz, nie wywołują wycofanych interfejsów API z fragmentami. W przypadku wykrycia naruszenia zasad możesz wydrukować komunikat logu, aktywować własny detektor lub zawiesić aplikację. Element FragmentStrictMode.Policy kontrolujący włączanie sprawdzania i nakładane kary można ustawić w elemencie FragmentManager za pomocą nowej metody setStrictModePolicy(). Ta zasada obowiązuje w odniesieniu do tego elementu FragmentManager i przechodni do wszystkich podrzędnych menedżerów fragmentów, które nie mają ustawionych własnych unikalnych zasad. (nr 123, nr 131, #150, b/143774122)

  • Funkcja detectFragmentReuse() wykrywa, czy wcześniej usunięte wystąpienie Fragment jest ponownie dodawane do instancji FragmentManager. Po zniszczeniu instancji Fragment i usunięciu z niej odwołania do FragmentManager nie należy nigdy wchodzić w interakcję z nią ani zachowywania do niej odwołania. (nr 142, b/153738653)
  • detectFragmentTagUsage() wykrywa, czy w pliku XML układu używasz tagu <fragment>. Do rozszerzania fragmentów w ramach układu zawsze używaj elementu FragmentContainerView. (nr 141, b/153738235)
  • Funkcja detectWrongFragmentContainer() wykrywa fragment, który został dodany do kontenera, który nie jest elementem FragmentContainerView. Zawsze używaj FragmentContainerView jako kontenera na fragmenty w układzie. (nr 146, b/181137036)
  • detectRetainInstanceUsage() wykrywa, kiedy używasz wycofanych interfejsów API setRetainInstance() lub getRetainInstance(). (nr 140, b/153737954)
  • detectSetUserVisibleHint() wykrywa, że używasz wycofanego interfejsu API setUserVisibleHint(). (#136, b/153738974)
  • detectTargetFragmentUsage() wykrywa, że używasz wycofanych interfejsów API setTargetFragment(), getTargetFragment() lub getTargetRequestCode(). (#139, b/153737745)

Zmiany interfejsu API

Kontrola nowych licencji

  • Funkcja sprawdzania licencji UseGetLayoutInflater ostrzega teraz, gdy używasz elementu LayoutInflater.from(Context) w elemencie DialogFragment. Aby uzyskać właściwą dla elementu LayoutInflater, należy zawsze używać metody getLayoutInflater() fragmentu okna dialogowego. (nr 156, b/170781346)
  • Kontrola licencji DialogFragmentCallbacksDetector ostrzega teraz podczas wywoływania funkcji setOnCancelListener lub setOnDismissListener w metodzie onCreateDialog() elementu DialogFragment. Te detektory należą do samej DialogFragment i należy zastąpić wartości onCancel() i onDismiss(), aby otrzymywać te wywołania zwrotne. (#171, b/181780047, b/187524311)

Poprawki błędów

  • Z fragmentu 1.3.4: naprawiono regresję wprowadzoną we fragmentie 1.3.3 w przypadku korzystania z interfejsu API ViewTreeViewModelStoreOwner.get() z poleceniem ViewModelProvider lub metody Jetpack Compose „viewModel()” wewnątrz fragmentu. Te przypadki użycia teraz prawidłowo korzystają z ViewModelProvider.Factory podanego przez fragment, jeśli zastępuje on getDefaultViewModelProviderFactory() (tak jak w przypadku fragmentów z adnotacjami @AndroidEntryPoint, gdy używasz Hilt). Jeśli nie zastąpisz tej metody, domyślna fabryka to SavedStateViewModelFactory, który zapisuje i przywraca swój stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Z Fragmentu 1.3.4: jeśli używasz FragmentContainerView w interfejsie API 29, wstawienia nie będą już wysyłane w nieskończoność, co rozwiąże problemy z instancjami BottomNavigationBar i FloatingActionButton. (I1bb78, b/186012452)
  • Z Fragmentu 1.3.4: możesz pobrać Parcelable z pakietu wyników z fragmentami po zakończeniu procesu. (I65932, b/187443158)
  • Z fragmentu 1.3.4: przejście udostępnianego elementu w grupie ViewGroup, jeśli w ViewGroup ma wartość transitionGroup o wartości „false”, przejście jest teraz prawidłowo przeprowadzane. (I99675)

Treści tłumaczone przez użytkowników zewnętrznych

Wersja 1.3

Wersja 1.3.6

21 lipca 2021 r.

androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6 i androidx.fragment:fragment-testing:1.3.6 zostały udostępnione. Wersja 1.3.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Od fragmentu 1.4.0-alpha03: element FragmentManager nie będzie już ulegać awarii, gdy spróbujesz ukryć usunięty fragment. (I573dd, b/183634730)
  • Widok fragmentu jest teraz ustawiony prawidłowo na GONE, gdy używasz zasady hide(), gdy widok główny zawiera wartość transitionGroup=”true”. (aosp/1766655, b/193603427)
  • FragmentActivity zawsze odblokowuje teraz zapisany stan jako pierwszą operację w wywołaniach zwrotnych cyklu życia, którą zastępuje. (I6db7a)

Aktualizacja zależności

Wersja 1.3.5

16 czerwca 2021 r.

androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5 i androidx.fragment:fragment-testing:1.3.5 zostały udostępnione. Wersja 1.3.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono regresję dotyczącą przejść elementów wspólnych wprowadzonych we Fragmentie 1.3.4 przez aosp/1679887. Fragmenty prawidłowo obsługują teraz grupy przejść (ustawione bezpośrednio przez transitionGroup="true" lub pośrednio za pomocą transitionName bądź background), a udostępnione elementy nie będą już zgłaszać elementów IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)

Wersja 1.3.4

18 maja 2021 r.

androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4 i androidx.fragment:fragment-testing:1.3.4 zostały udostępnione. Wersja 1.3.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy regresję wprowadzoną we fragmencie 1.3.3 w przypadku korzystania z interfejsu API ViewTreeViewModelStoreOwner.get() za pomocą ViewModelProvider lub metody Jetpack Compose viewModel() we fragmencie kodu podczas korzystania z Hilt. Te przypadki użycia teraz prawidłowo korzystają z ViewModelProvider.Factory podanego przez Twój fragment, jeśli zastępuje on getDefaultViewModelProviderFactory() (jak ma to miejsce w przypadku fragmentów z adnotacjami @AndroidEntryPoint). Jeśli nie zastąpisz tej metody, domyślna fabryka to SavedStateViewModelFactory, który zapisuje i przywraca swój stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Jeśli używasz interfejsu FragmentContainerView w interfejsie API 29, wstawienia nie będą już wysyłane w nieskończoność, co rozwiąże problemy z instancjami BottomNavigationBar i FloatingActionButton. (I1bb78, b/186012452)
  • Po śmierci obiektu w ten sposób możesz uzyskać dostęp do interfejsu Parcelable z pakietu wyników z fragmentami. (I65932, b/187443158)
  • Podczas przenoszenia udostępnionego elementu w grupie ViewGroup, jeśli transitionGroup ViewGroup ma wartość false (fałsz), przejście będzie teraz prawidłowo przeprowadzane. (I99675)

Wersja 1.3.3

21 kwietnia 2021 r.

androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3 i androidx.fragment:fragment-testing:1.3.3 zostały udostępnione. Wersja 1.3.3 zawiera te zatwierdzenia.

Nowe funkcje

  • Używanie właściwości SavedStateViewModelFactory działa teraz, gdy jest używane z parametrem SavedStateRegistryOwner zwróconym przez użycie ViewTreeSavedStateRegistryOwner.get() z widokiem fragmentu. (I21acf, b/181577191)

Poprawki błędów

  • Naprawiliśmy regresję wprowadzoną we fragmentie 1.3.2, która powodowała, że animacje popEnter nie były uruchamiane w przypadku wyskakującego żądania FragmentTransaction zawierającego operację setPrimaryNavFragment, taką jak ta używana przez NavHostFragment. (I38c87, b/183877426)
  • FragmentContainerView dba teraz o to, aby do każdego obiektu Fragment wysyłać nowy zbiór WindowInsets, dzięki czemu każdy fragment może niezależnie przetwarzać elementy wstawienia. (I63f68, b/172153900)
  • DialogFragment teraz prawidłowo obsługuje przypadki, gdy fragment podrzędny jest dodawany do kontenera o tym samym identyfikatorze co kontener w niestandardowej klasie Dialog. Rozwiązujemy problemy z hierarchią widoków podczas ponownego wykorzystywania identyfikatorów, które są używane wewnętrznie w oknach takich jak BottomSheetDialog. (IE6279, b/180021387)
  • FragmentManager.dump() prawidłowo dodaje teraz wcięcie do pierwszego fragmentu na liście aktywnych fragmentów. (If5c33, b/183705451)

Nowe poprawki błędów w ramach Menedżera stanu

  • Nowy menedżer stanu fragmentów prawidłowo obsługuje teraz przejścia z operacjami ukrywania. (I9e4de, b/184830265)

Wersja 1.3.2

24 marca 2021 r.

androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2 i androidx.fragment:fragment-testing:1.3.2 zostały udostępnione. Wersja 1.3.2 zawiera te zatwierdzenia.

Nowe poprawki błędów w ramach Menedżera stanu

  • Jeśli wykonasz jednocześnie operacje popBackStack() i commit(), ostatnia operacja ustawi kierunek dla wszystkich animacji zamiast uruchamiać niektóre animacje pop i niektóre animacje wprowadzania. (I7072e, b/181142246)
  • Nazwa przejścia w widoku w obrębie wspólnego elementu nie będzie już wyczyszczona. (I4d4a6, b/179934757)

Aktualizacje zależności

  • Fragment jest teraz zależny od aktywności 1.2.2. Naprawiliśmy problem ze sprawdzaniem lintowania aktywności InvalidFragmentVersionForActivityResult, gdy używasz fragmentu w wersji 1.3.1 lub nowszej.
  • Fragment korzysta teraz z cyklu życia 2.3.1.

Wersja 1.3.1

10 marca 2021 r.

androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1 i androidx.fragment:fragment-testing:1.3.1 zostały udostępnione. Wersja 1.3.1 zawiera te zatwierdzenia.

Nowe funkcje

  • Okna w elemencie DialogFragment mogą teraz uzyskiwać dostęp do właścicieli ViewTree za pomocą elementu DecorView, co daje pewność, że DialogFragment może być używany z zasadą ComposeView. (IB9290, b/180691023)

Poprawki błędów

  • Fragmenty, które zostały uzupełnione do działania RESUMED za pomocą FragmentContainerView, są teraz prawidłowo wyświetlane po zmianie konfiguracji. (Ie14c8, b/180538371)
  • Na końcu fragmentu nie ma już dodatkowego elementu } toString() (I54705, b/177761088)
  • Zastąpione metody we FragmentActivity teraz prawidłowo dziedziczą metodę podstawowej javaDoc (I736ce, b/139548782)
  • Dokumenty dotyczące parametrów setFragmentResult i setFragmentResultListener zostały zaktualizowane, aby odzwierciedlić fakt, że nie akceptują już one wartości null (I990ba, b/178348386)

Nowe poprawki błędów w ramach Menedżera stanu

  • Naprawiono wyciek pamięci we fragmentach spowodowany przez funkcję mFocusedView (Ib4e9e, b/179925887)
  • Fragmenty kodu teraz prawidłowo wywołują onCreateOptionsMenu podczas korzystania z funkcji pokazywania/ukrywania transakcji (I8bce8, b/180255554)
  • Fragmenty podrzędne z przejściami rozpoczynającymi się przed określeniem fragmentu będą teraz prawidłowo uwzględniane RESUMED (Ic11e6, b/180825150)
  • Fragmenty rozszerzone za pomocą tagu <fragment> będą teraz zawsze trafiać do RESUMED (I452ac, (I9fa49)

Aktualizacje zależności

Wersja 1.3.0

10 lutego 2021 r.

androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0 i androidx.fragment:fragment-testing:1.3.0 zostały udostępnione. Wersja 1.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.2.0

  • Nowy menedżer stanu: znaczne przeredagowanie zasobów wewnętrznych FragmentManager rozwiązało wiele problemów z wysyłaniem zdarzeń cyklu życia, animacjami i przejściami oraz sposobem obsługi przełożonych fragmentów.
  • Integracja interfejsu Activity Result API: dodaliśmy obsługę interfejsu API ActivityResultRegistry wprowadzonego w Aktywności 1.2.0 do obsługi przepływów startActivityForResult()+onActivityResult() i requestPermissions()+onRequestPermissionsResult() bez zastępowania metod we fragmencie kodu, a także zaoferowaliśmy punkty zaczepienia do testowania tych przepływów. Zobacz zaktualizowany artykuł Uzyskiwanie wyników z aktywności.

    • W tej wersji rozwiązaliśmy kilka problemów dotyczących nieprawidłowych kodów żądań i wysyłania próśb o uprawnienia, które uniemożliwiają działanie interfejsu Activity Result API w poprzednich wersjach FragmentActivity. Aby korzystać z interfejsów API wyników działań w kodzie FragmentActivity lub AppCompatActivity, musisz uaktualnić fragment kodu do wersji 1.3.0.
  • Fragment Result API: dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w FragmentManager. Działa to w przypadku fragmentów hierarchii (nadrzędny/podrzędny), DialogFragments i fragmentów w Nawigacji. Zapewnia też, że wyniki są wysyłane tylko do Twojego fragmentu, gdy jego wartość wynosi co najmniej STARTED. Interfejsy API fragmentów docelowych zostały wycofane i zastąpione nowymi interfejsami. Zapoznaj się z sekcją Uzyskiwanie wyników za pomocą interfejsu Fragment Result API.

  • FragmentOnAttachListener: wywołanie zwrotne onAttachFragment() dla adresów FragmentActivity i Fragment zostało wycofane. Dodaliśmy nowy element FragmentOnAttachListener, który zapewnia bardziej elastyczną alternatywę, pozwalając detektorowi onAttachFragment() rozdzielać, które można przetestować, oraz obsługiwać dodawanie detektora do elementów FragmentManager innych niż bezpośredni podrzędny element FragmentManager.

  • FragmentScenario Ulepszenia: klasa FragmentScenario z artefaktu fragment-testing została przeredagowana w Kotlin i otrzymał kilka ulepszeń:

    • FragmentScenario używa teraz setMaxLifecycle() do implementacji moveToState(), co zapewnia spójne działanie na wszystkich poziomach interfejsu API i oddziela stan fragmentu od aktywności.
    • FragmentScenario obsługuje teraz ustawienie początkowej wartości Lifecycle.State, która obsługuje potwierdzanie stanu fragmentu przed pierwszym przeniesieniem do poszczególnych elementów Lifecycle.State.
    • Istnieje obecnie alternatywa dla FragmentScenario API onFragment w postaci metody Kotlin ulepszonego rozszerzenia withFragment, która umożliwia zwrócenie wartości. W szczególności odrzuca wyjątki zgłoszone w danym bloku.
  • Pomoc na poziomie ViewTree: Fragment obsługuje teraz interfejsy API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View) i ViewTreeSavedStateRegistryOwner dodane w cyklu życia 2.3.0 i SavedState 1.1.0, tak aby zwracał fragment jako ViewModelStoreOwner, a SavedStateRegistryOwner i LifecycleOwner powiązany z cyklem życia fragmentu, gdy używasz View w Fragment.

  • Zmiany animacji TRANSIT_: domyślne efekty fragmentów (TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE i TRANSIT_FRAGMENT_FADE) są teraz używane w postaci Animator zamiast Animation. Zasoby użyte do stworzenia tych animacji są teraz prywatne.

  • Wycofanie setRetainInstance(): metoda setRetainInstance() w fragmentach kodu została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do zachowywania stanu, który można powiązać z działaniami, fragmentami i wykresami nawigacji. Pozwala to deweloperom używać normalnego, niezachowanego fragmentu i zachowywania konkretnego stanu, który chce zachować oddzielnie. Pozwala to uniknąć wspólnego źródła wycieków, a jednocześnie zachować przydatne właściwości pojedynczego utworzenia i zniszczenia zachowanego stanu (czyli konstruktora ViewModel i otrzymanego przez niego wywołania zwrotnego onCleared()).

  • Wycofanie adaptera ViewPager 1: wraz z udostępnieniem ViewPager2 1.0.0 klasy FragmentPagerAdapter i FragmentStatePagerAdapter do interakcji z ViewPager zostały wycofane. Zapoznaj się z sekcją Migracja z ViewPager do ViewPager2.

Wersja 1.3.0-rc02

27 stycznia 2021 r.

androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02 i androidx.fragment:fragment-testing:1.3.0-rc02 zostały udostępnione. Wersja 1.3.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że po zmianie konfiguracji element nadrzędny DialogFragment pojawiał się nad podrzędnym DialogFragment. Fragmenty okien podrzędnych zawsze są teraz wyświetlane nad nadrzędnym fragmentem okna. (I30806, b/177439520)
  • Rozwiązanie problemu polegającego na tym, że wykonanie operacji hide z użyciem Animation powodowało, że na końcu animacji migdał fragment ukrywający. (I57e22, b/175417675)
  • Fragmenty z przejściami dodanymi przed dołączeniem hierarchii widoku teraz prawidłowo docierają do RESUMED. (I1fc1d, b/177154873)

Nowe poprawki błędów w ramach Menedżera stanu

  • Widok Lifecycle fragmentu obsługuje teraz przypadki, w których jego widok zostaje zniszczony, zanim Lifecycle osiągnie CREATED, unikając wyjątków stwierdzających „brak zdarzenia od INITIALIZED”. (eda2bd, b/176138645)
  • Fragmenty z parametrem Animator wyświetlają się teraz w odpowiedniej kolejności podczas korzystania z tagu FragmentContainerView. (Id9aa3, b/176089197)

Wersja 1.3.0-rc01

16 grudnia 2020 roku

androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01 i androidx.fragment:fragment-testing:1.3.0-rc01 zostały udostępnione. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja onPrepareOptionsMenu() działa teraz tak samo jak onCreateOptionsMenu() i nie jest już wywoływana, gdy fragment nadrzędny wywołuje funkcję setMenuVisibility(false). (Id7de8, b/173203654)

Nowe poprawki błędów w ramach Menedżera stanu

  • Usunięto wyciek i wizualne artefakty, które występowały podczas dodawania fragmentu z użyciem Animation do FragmentContainerView, a następnie przerywania dodawania za pomocą operacji pop. (I952d8)
  • Rozwiązaliśmy problem, który powodował, że widok fragmentu pozostał w hierarchii widoku, jeśli został zastąpiony podczas korzystania z metod onCreate() lub onViewCreated(). (I8a7d5)
  • Zaznaczenie jest teraz prawidłowo przywracane do widoków głównych fragmentów kodu po ich wznowieniu. (Ifc84b).
  • Łączenie operacji pop i zastępowania w ramach transakcji dotyczącej tego samego fragmentu powoduje teraz wyświetlanie prawidłowych animacji (Ifd4e4, b/170328691)

Wersja 1.3.0-beta02

Grudzień 2, 2020

androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 i androidx.fragment:fragment-testing:1.3.0-beta02 zostały udostępnione. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.

Nowe funkcje

  • Środowisko FragmentScenario zostało w pełni przekonwertowane na Kotlin przy zachowaniu zgodności źródła i binarnego przez wykorzystanie funkcjonalnych interfejsów Kotlin 1.4 dla FragmentAction. (I19d31)

Zmiany w działaniu

  • Obiekty FragmentContainerView, które nie rozszerzają fragmentu za pomocą atrybutu class lub android:name, mogą być teraz używane poza FragmentActivity. (Id4397, b/172266337)
  • Próba ustawienia maksymalnego cyklu życia fragmentu na DESTROYED spowoduje wysłanie żądania IllegalArgumentException (Ie7651, b/170765622)
  • Inicjowanie przykładowego scenariusza ze stanem DESTROYED spowoduje teraz wysłanie żądania IllegalArgumentException (I73590, b/170765622)

Nowe poprawki błędów w ramach Menedżera stanu

  • Rozwiązaliśmy problem, który powodował, że widok nie osiągał końcowego stanu, jeśli zakłóciłeś przejście fragmentu, które używało jednej z opcji Animator lub jednej z opcji TRANSIT_FRAGMENT_. (I92426, b/169874632)
  • Rozwiązaliśmy problem, który uniemożliwiał prawidłowe zniszczenie fragmentów z wyjściem Animation. (I83d65)
  • Wyjściowe fragmenty, których efekty zostały wycofane, są teraz prawidłowo anulowane i ponownie uruchamiane z odpowiednim efektem wejścia. (I62226, b/167092035)
  • Rozwiązaliśmy problem, który powodował, że nie można było uruchomić wyjścia Animator elementu hide(). (Id7ffe).
  • Fragmenty prawidłowo wyświetlają się teraz po przełożeniu i zaczynaniu od razu. (IE713b, b/170022857)
  • Fragmenty, które usuwają ostrość podczas animacji, nie będą już próbowały przywrócić fokusu do odłączonego widoku, gdy osiągną wartość RESUMED (I38c65, b/172925703).

Treści tłumaczone przez użytkowników zewnętrznych

  • FragmentFactory buforuje teraz klasy fragmentów oddzielnie dla poszczególnych instancji ClassLoader. Dzięki Simon Schiller. (#87, b/113886460)

Wersja 1.3.0-beta01

1 października 2020 roku

androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 i androidx.fragment:fragment-testing:1.3.0-beta01 zostały udostępnione. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • setMaxLifecycle() umożliwia teraz ustawianie stanu Lifecycle na INITIALIZING, o ile fragment nie został przeniesiony do CREATED. (b/159662173)

Zmiany interfejsu API

Zmiany w działaniu

  • Pliki zasobów z fragmentem zostały prawidłowo oznaczone jako prywatne. (Aosp/1425237).

Poprawki błędów

  • Fragmenty rozszerzone za pomocą tagu <fragment> będą teraz prawidłowo czekać, aż ich widoki zostaną dodane do kontenera, zanim zostaną przeniesione do kontenera STARTED (I02f4c).
  • Fragmenty, które są widoczne, a następnie od setMaxLifecycle() do CREATED, teraz prawidłowo uruchamiają efekty wyjścia. (B/165822335)
  • Usunięcie odłączonego fragmentu, który nie został dodany do stosu wstecznego, nie powoduje już wycieku pamięci. Dzięki uprzejmości Nicklasa Ansmana Giertza! (b/166489383)
  • Aktywne fragmenty mają teraz atrybut FragmentManager o wartości innej niż null, a fragmenty z wartością FragmentManager inną niż null zawsze będą uważane za aktywne. (Aosp/1422346).
  • Domyślne efekty fragmentów, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE i TRANSIT_FRAGMENT_FADE, są teraz używane jako Animator zamiast Animation. (B/166155034)

Nowe poprawki błędów w ramach Menedżera stanu

  • Fragmenty kodu prawidłowo przywracają swój fokus wyświetlania z początku animacji. (ICC256)
  • Fragmenty, które mają tylko wspólne przejście elementu, mają teraz prawidłowo wypełnione efekty specjalne, co oznacza, że przechodzą do ostatecznego stanu (Iaebc7, b/166658128).
  • Widoki fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876).
  • Nowy menedżer stanu konsekwentnie usuwa teraz wyjściowy widok fragmentów przed dodaniem wyświetlanego fragmentu. (I41a6e)
  • Jawne zmiany w widoczności widoku fragmentów są teraz respektowane przez nowego menedżera stanu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu wprowadzającego na INVISIBLE, pozostanie on niewidoczny. (b/164481490)
  • Fragmenty mają teraz wyższy priorytet Animators niż Animations, co oznacza, że fragment z oboma funkcjami będzie uruchamiać tylko tag Animator i zignorować Animation. (b/167579557)
  • Nowy menedżer stanu nie sprawia już, że fragmenty podczas wprowadzania animacji nie migają. (b/163084315)

Znany problem

Jeśli podczas korzystania z nowego menedżera stanu naciśniesz Wstecz w trakcie wprowadzania efektu specjalnego, zamiast wracać do poprzedniego fragmentu, stary fragment nie zostanie nigdy ponownie dodany, co skutkuje pustym ekranem. (b/167259187, b/167092035, b/168442830)

Wersja 1.3.0-alfa08

19 sierpnia 2020 r.

androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08 i androidx.fragment:fragment-testing:1.3.0-alpha08 zostały udostępnione. Wersja 1.3.0-alfa08 zawiera te zatwierdzenia.

Nowy menedżer stanowy

Ta wersja zawiera znaczną refaktoryzację wewnętrznego zarządzania stanem FragmentManager, co wpływa na wysyłanie metod cyklu życia, animacji i przejść oraz sposób obsługi przełożonych transakcji. Ta opcja jest domyślnie włączona. Więcej informacji znajdziesz w artykule Fragmenty: odbudowywanie kodu wewnętrznego (w języku angielskim). (b/139536619, b/147749580)

  • Eksperymentalny interfejs API w języku FragmentManager.enableNewStateManager(boolean) może być używany do określania, czy FragmentManager ma używać nowego menedżera stanu. (I7b6ee).

Te problemy rozwiązuje się tylko wtedy, gdy korzystasz z nowego menedżera stanu:

  • Poprzedni fragment operacji replace został prawidłowo zatrzymany przed uruchomieniem nowego fragmentu. (B/161654580)
  • Fragmenty kodu uniemożliwiają teraz wyświetlanie kilku konkurujących animacji w przypadku tych samych fragmentów, co pozwala uniknąć sytuacji, w której element Animation zastąpiłby wszystkie efekty Transition lub Animator i Transition w pojedynczym fragmencie. (b/149569323)
  • enterTransition i exitTranstion wszystkich fragmentów wchodzących i wychodzących są teraz uruchamiane, a nie tylko ostatni fragment wchodzący i pierwszy fragment wyjściowy. (b/149344150)
  • Przełożone fragmenty nie blokują się już w stanie CREATED, ale są przenoszone do STARTED z innymi fragmentami. (b/129035555)
  • Rozwiązaliśmy problem, który powodował, że usługa FragmentManager uruchamiała operacje w niezgodności z transakcją w przełożonym zamówieniu i transakcji w innym zamówieniu. (b/147297731)
  • Przesunięcie wielu fragmentów jednocześnie nie będzie już powodować tymczasowego wyświetlania fragmentów pośrednich podczas odkładania fragmentów. (B/37140383)
  • Funkcja FragmentManager zwraca teraz prawidłowe fragmenty podczas wywoływania funkcji findFragmentById() lub findFragmentByTag() z poziomu wywołania zwrotnego onAttachFragment(). (b/153082833)
  • Fragmenty nie wywołują już funkcji onCreateView() w przypadku zniszczenia fragmentów, gdy fragment, który je zastępuje, zostanie przełożony. (b/143915710)
  • Komunikat o błędzie przy próbie połączenia instancji platformy Transition i Transition AndroidaX zawiera teraz fragment z nieprawidłowym przejściem. (b/155574969)

Zmiany w działaniu

  • Możesz teraz wywoływać funkcję launch() w elemencie ActivityResultLauncher w metodzie cyklu życia onCreate() danego fragmentu. (b/161464278)
  • Wywołanie registerForActivityResult() po onCreate() powoduje teraz wyjątek informujący o tym, że jest to niedozwolone. Wyjątkiem jest dyskretne niedostarczenie wyników po zmianie konfiguracji. (b/162255449)
  • FragmentActivity używa teraz interfejsu API OnContextAvailableListener wprowadzonego w sekcji Aktywność 1.2.0-alpha08 do przywrócenia stanu FragmentManager. Wszystkie detektory dodane do podklas FragmentActivity będą uruchamiane po tym detektorze. (I513da).

Poprawki błędów

  • Reguły ActivityOptions przekazywane podczas korzystania z funkcji startIntentSenderForResult() są teraz respektowane. (b/162247961)

Znany problem

  • W przypadku korzystania z nowego menedżera stanu bezpośrednie ustawienie widoczności widoku głównego fragmentu po onViewCreated() i przed onResume() spowoduje, że ustawiona przez Ciebie widoczność zostanie zastąpiona przez ustawienie FragmentManager, które kontroluje widoczność widoku głównego. Aby obejść ten problem, zmień widoczność fragmentu za pomocą operacji hide() i show(). (b/164481490)

Wersja 1.3.0-alpha07

22 lipca 2020 r.

androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07 i androidx.fragment:fragment-testing:1.3.0-alpha07 zostały udostępnione. Wersja 1.3.0-alfa07 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentScenario umożliwia teraz ustawienie początkowego stanu cyklu życia CREATED, STARTED lub RESUMED zamiast zawsze przenoszenia fragmentu do stanu RESUMED. (B/159662750)
  • Do interfejsu API FragmentScenario onFragment dodaliśmy alternatywę w postaci zmodyfikowanej metody rozszerzenia withFragment Kotlin, która umożliwia zwracanie wartości. W szczególności odrzuca wyjątki zgłoszone w danym bloku. (b/158697631)

Zmiany w działaniu

  • FragmentScenario używa teraz setMaxLifecycle() do implementacji moveToState(), co zapewnia spójne działanie na wszystkich poziomach interfejsu API i oddziela stan fragmentu od aktywności. (B/156527405)
  • Pole SavedStateRegistryOwner zwrócone przez ViewTreeSavedStateRegistryOwner jest teraz powiązane z cyklem życia widoku fragmentu. Dzięki temu stan elementu zostanie zapisany i przywrócony jednocześnie z widokiem fragmentu. (B/158503763)

Poprawki błędów

  • Fragmenty czekają teraz na dołączenie widoku fragmentu przed wywołaniem funkcji ViewCompat.requestApplyInsets(). Pozwala to uniknąć sytuacji, w których żądanie wstawienia zostało odrzucone. (b/158095749)
  • Wywołanie clearFragmentResultListener powoduje teraz prawidłowe wyczyszczenie funkcji obserwatora cyklu życia. (b/159274993)

Wersja 1.3.0-alpha06

10 czerwca 2020 r.

androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06 i androidx.fragment:fragment-testing:1.3.0-alpha06 zostały udostępnione. Wersja 1.3.0-alfa06 zawiera te zatwierdzenia.

Nowe funkcje

  • Wywołanie zwrotne onAttachFragment() dla usług FragmentActivity i Fragment zostało wycofane. Dodaliśmy nowy element FragmentOnAttachListener, który stanowi bardziej elastyczną alternatywę, która umożliwia delegowanie elementów onAttachFragment() do rozdzielania, możliwych do testowania detektorów oraz obsługę dodawania detektora do obiektów FragmentManager innych niż bezpośredni podrzędny element FragmentManager. (I06d3d)

Poprawki błędów

  • Fragmenty nadrzędne są teraz wyświetlane przed fragmentami podrzędnymi. Rozwiązano problem z wizualną kolejnością po zmianie konfiguracji, gdy element DialogFragment wyświetlał inny element DialogFragment jako fragment podrzędny. (b/157195715)
  • Rozwiązaliśmy problem, który powodował, że kontrola licencji UseRequireInsteadOfGet nie obsługiwała prawidłowo łańcuchowych przypadków użycia operatorów ?. i !!. (b/157677616)

Wersja 1.3.0-alpha05

20 maja 2020 r.

androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05 i androidx.fragment:fragment-testing:1.3.0-alpha05 zostały udostępnione. Wersja 1.3.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

Zmiany interfejsu API

  • Interfejsy API setFragmentResult() i setFragmentResultListener() przyjmują teraz odpowiednio niepuste wartości Bundle i FragmentResultListener. Aby wyraźnie wyczyścić wcześniej ustawiony wynik lub detektor, użyj nowych metod clearFragmentResult() i clearFragmentResultListener(). (b/155416778)
  • Rozszerzenia Kotlin (setFragmentResultListener()), które korzystają z metody lambda, są teraz oznaczone jako inline. (b/155323404)

Zmiany w działaniu

  • Wcześniej wycofane startActivityForResult(), startIntentSenderForResult() i requestPermissions w systemie Fragment używają teraz wewnętrznie parametru ActivityResultRegistry, dzięki czemu nie trzeba ograniczać używania w kodach żądań tylko dolnych bitów (poniżej 0xFFFF) w przypadku kodów żądań podczas korzystania z tych interfejsów API. (b/155518741)

Aktualizacje dokumentacji

  • Rozszerzyliśmy dokumentację konstruktorów Fragment(@LayoutRes int) i DialogFragment(@LayoutRes int), aby wyjaśnić, że powinny być one wywoływane z konstruktora bez argumentów podklas, gdy używany jest domyślny FragmentFactory. (b/153042497)

Wersja 1.3.0-alfa04

29 kwietnia 2020 roku

androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04 i androidx.fragment:fragment-testing:1.3.0-alpha04 zostały udostępnione. Wersja 1.3.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w FragmentManager. Działa to w przypadku fragmentów hierarchii (nadrzędny/podrzędny), DialogFragments i fragmentów w Nawigacji. Zapewnia też, że wyniki są wysyłane tylko do Twojego fragmentu, gdy jego wartość wynosi co najmniej STARTED. (b/149787344)

Zmiany interfejsu API

  • Interfejsy API fragmentów docelowych zostały wycofane. Do przekazywania danych między fragmentami należy używać nowych interfejsów API Fragment Result API. (b/149787344)
  • Interfejsy API startActivityForResult()/onActivityResult() i requestPermissions()/onRequestPermissionsResult() dla fragmentu kodu zostały wycofane. Użyj interfejsów Activity Result API. (Aosp/1290887).
  • Zmiana niezgodność z Aktywności 1.2.0-alpha04: nazwa metody prepareCall() została zmieniona na registerForActivityResult(). (Aosp/1278717)

Poprawki błędów

  • Element getViewLifecycleOwner() fragmentu jest teraz zatrzymany przed wywołaniem funkcji onSaveInstanceState(), co odzwierciedla zachowanie cyklu życia danego fragmentu. (B/154645875)
  • Wywołanie setMenuVisibility(false) we fragmencie powoduje teraz prawidłową zmianę widoczności menu dostarczanych przez jego fragmenty podrzędne. (b/153593580)
  • Naprawiono błąd illegalStateException, który występował podczas dodawania fragmentu do hierarchii widoków elementu DialogFragment za pomocą FragmentContainerView. (B/154366601)
  • Metoda getDefaultViewModelProviderFactory() we fragmentach nie ulega już awarii, gdy hostujesz fragmenty poza aktywnością. (b/153762914)

Wersja 1.3.0-alfa03

Kwiecień 1, 2020

androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 i androidx.fragment:fragment-testing:1.3.0-alpha03 zostały udostępnione. Wersja 1.3.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Metody prepareCall w Fragment są teraz final. (b/152439361)

Poprawki błędów

  • Naprawiono regresję wprowadzoną we fragmentie 1.3.0-alpha02 podczas korzystania z BottomSheetDialogFragment. (b/151652127, aosp/1263328, aosp/1265163)
  • Naprawiono poważny błąd związany z korzystaniem z pola prepareCall z fragmentu po zmianie konfiguracji. (B/152137004)
  • Rozwiązaliśmy problem, który powodował, że przejścia z udostępnianego elementu i wyjścia były ignorowane w przypadku korzystania z funkcji setTargetFragment(). (b/152023196)
  • Z fragmentu 1.2.4: zaktualizowano reguły ProGuard fragmentów z fragmentami, aby umożliwić zaciemnianie przechowywanych fragmentów. (b/151605338)
  • Z fragmentu 1.2.4: wyłączono regułę FragmentLiveDataObserve Lint w klasach DialogFragment, ponieważ ich cykl życia i cykl życia wyświetlania są zawsze zsynchronizowane, dzięki czemu można bezpiecznie używać this lub viewLifecycleOwner przy wywoływaniu funkcji observe. (B/151765086)

Zmiany zależności

  • Fragmenty kodu zależą od aktywności 1.2.0-alpha03, w przypadku której wprowadziliśmy istotne ulepszenia w interfejsie Activity Result API w aplikacji 1.2.0-alpha02.

Wersja 1.3.0-alfa02

18 marca 2020 r.

androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02 i androidx.fragment:fragment-testing:1.3.0-alpha02 zostały udostępnione. Wersja 1.3.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy obsługę interfejsu API ActivityResultRegistry wprowadzonego w aktywności 1.2.0-alpha02 w celu obsługi przepływów startActivityForResult()+onActivityResult() i requestPermissions()+onRequestPermissionsResult() bez zastępowania metod we fragmencie, a także dodatkowe punkty zaczepienia do testowania tych przepływów. Zobacz zaktualizowany artykuł Uzyskiwanie wyników z aktywności. (b/125158199)

Zmiany interfejsu API

  • DialogFragment udostępnia teraz konstruktor @LayoutRes wskazujący układ, który onCreateView() powinien domyślnie zwiększać. (B/150327080)
  • Metoda onActivityCreated() została wycofana. Kod łączący widok fragmentu powinien zostać wykonany w języku onViewCreated() (który jest wywoływany bezpośrednio przed onActivityCreated()), a inny kod inicjujący – w języku onCreate(). Aby można było otrzymać wywołanie zwrotne po zakończeniu działania onCreate() aktywności, zdarzenie LifeCycleObserver powinno być zarejestrowane w Lifecycle aktywności w onAttach() i usunięte po otrzymaniu wywołania zwrotnego onCreate(). (b/144309266)

Poprawki błędów

  • Z fragmentu 1.2.3: naprawiliśmy błąd w funkcji DialogFragment, który powodował, że podczas wywoływania getLayoutInflater() z aplikacji onCreateDialog() występował błąd StackOverflowError. (b/117894767, Aosp/1258664)
  • Od Fragmentu 1.2.3: zmniejszono zakres uwzględnionych reguł ProGuard fragmentu, aby mieć pewność, że nieużywane klasy Fragment mogą być usuwane. (b/149665169)
  • Z fragmentu 1.2.3: naprawiono fałszywe trafienia w sprawdzaniu licencji UseRequireInsteadOfGet w przypadku użycia nazwy zmiennej lokalnej, która zastąpiła nazwę właściwości Kotlin. (b/149891163)
  • Z fragmentu 1.2.3: FragmentContainerView nie wysyła już żądania UnsupportedOperationException za użycie nieprawidłowego konstruktora w podglądzie układu. (b/149707833)

Znane problemy

  • BottomSheetDialogFragment nie wyświetla już prawidłowo swojego okna na ekranie. (b/151652127)

Wersja 1.3.0-alpha01

Marzec 4, 2020

androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01 i androidx.fragment:fragment-testing:1.3.0-alpha01 zostały udostępnione. Wersja 1.3.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

Zmiany interfejsu API

  • Metoda setRetainInstance() w przypadku fragmentów kodu została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do zachowywania stanu, który można powiązać z działaniami, fragmentami i wykresami nawigacji. Pozwala to deweloperom używać normalnego, niezachowanego fragmentu i zachowywania konkretnego stanu, który chce zachować oddzielnie. Pozwala to uniknąć wspólnego źródła wycieków, a jednocześnie zachować przydatne właściwości pojedynczego utworzenia i zniszczenia zachowanego stanu (czyli konstruktora ViewModel i otrzymanego przez niego wywołania zwrotnego onCleared()). (b/143911815)
  • Wraz z udostępnieniem ViewPager2 1.0.0 klasy FragmentPagerAdapter i FragmentStatePagerAdapter do interakcji z ViewPager zostały wycofane. Zapoznaj się z sekcją Migracja z ViewPager do ViewPager2. (b/145132715)

Poprawki błędów

  • Reguły ProGuard z fragmentów kodu poprawnie zachowują teraz tylko używane domyślne klasy konstruktorów Fragment, a nie wszystkie używane instancje Fragment. Poprawia to regresję wprowadzoną we fragmencie 1.2.1. (b/149665169
  • Reguły Lint require___() dodane we fragmencie 1.2.2 nie są już fałszywie dodatnie w przypadku zmiennych lokalnych o tej samej nazwie co powielane nazwy właściwości Kotlin (np. view). (b/149891163)
  • FragmentContainerView nie zgłasza już UnsupportedOperationException podczas korzystania z podglądu układu w Android Studio. (b/149707833)
  • Naprawiono błąd polegający na tym, że zachowane fragmenty, które zostały dodane po zapisaniu stanu, nie były stale odtwarzane i niszczone po każdej zmianie konfiguracji. (b/145832397)

Wersja 1.2.5

Wersja 1.2.5

10 czerwca 2020 r.

androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5 i androidx.fragment:fragment-testing:1.2.5 zostały udostępnione. Wersja 1.2.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Element getViewLifecycleOwner() fragmentu jest teraz zatrzymany przed wywołaniem funkcji onSaveInstanceState(), co odzwierciedla zachowanie cyklu życia danego fragmentu. Zostało to wcześniej opublikowane we Fragmentie 1.3.0-alpha04. (B/154645875)
  • Wywołanie setMenuVisibility(false) we fragmencie powoduje teraz prawidłową zmianę widoczności menu dostarczanych przez jego fragmenty podrzędne. Zostało to wcześniej opublikowane we Fragmentie 1.3.0-alpha04. (b/153593580)

Wersja 1.2.4

Wersja 1.2.4

Kwiecień 1, 2020

androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4 i androidx.fragment:fragment-testing:1.2.4 zostały udostępnione. Wersja 1.2.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Zaktualizowano reguły ProGuard dotyczące fragmentów, aby umożliwić zaciemnianie przechowywanych fragmentów. (b/151605338)
  • Wyłączono regułę Lint FragmentLiveDataObserve w klasach DialogFragment, ponieważ ich cykl życia i cykl życia wyświetlania są zawsze zsynchronizowane, dzięki czemu można bezpiecznie używać this lub viewLifecycleOwner przy wywoływaniu observe. (B/151765086)

Wersja 1.2.3

Wersja 1.2.3

18 marca 2020 r.

androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3 i androidx.fragment:fragment-testing:1.2.3 zostały udostępnione. Wersja 1.2.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd w funkcji DialogFragment, który powodował błąd StackOverflowError podczas wywoływania funkcji getLayoutInflater() w aplikacji onCreateDialog(). (b/117894767, Aosp/1258665)
  • Ograniczyliśmy zakres uwzględnionych reguł ProGuard fragmentu, aby umożliwić usuwanie nieużywanych klas fragmentów kodu. (b/149665169)
  • Naprawiono błędy fałszywie pozytywne w kontroli licencji UseRequireInsteadOfGet w przypadku użycia nazwy zmiennej lokalnej, która zastąpiła nazwę właściwości Kotlin. (b/149891163)
  • FragmentContainerView nie wysyła już żądania UnsupportedOperationException za użycie nieprawidłowego konstruktora w podglądzie układu. (b/149707833)

Wersja 1.2.2

Wersja 1.2.2

19 lutego 2020 r.

androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 i androidx.fragment:fragment-testing:1.2.2 zostały udostępnione. Wersja 1.2.2 zawiera te zatwierdzenia.

Kontrola nowych licencji

  • Lint zaleca użycie interfejsu viewLifecycleOwner jako LifecycleOwner do nawiązywania połączeń z interfejsem OnBackPressedDispatcher w usługach onCreateView(), onViewCreated() i onActivityCreated(). (b/142117657)
  • Dodaliśmy nowy sprawdzanie licencji, które potwierdza, że podczas korzystania z artefaktu fragment-testing używasz właściwego debugImplementation. (B/141500106)
  • W przypadku fragmentów kodu sugerujemy teraz użycie powiązanych metod require___() w celu uzyskania bardziej opisowych komunikatów o błędach zamiast checkNotNull(get___()), requireNonNull(get___()) lub get___()!! w przypadku wszystkich interfejsów API fragmentów, które zawierają odpowiedniki get i require. (Aosp/1202883).

Poprawki błędów

  • Naprawiono pliki z fragmentami ProGuard, aby uniknąć ostrzeżeń R8 (b/148963981).
  • Poprawiliśmy obecny mechanizm sprawdzania linta z sugerowaniem użycia metody viewLifecycleOwner, gdy używasz zasady observe do obsługi również wersji metody rozszerzenia livedata-ktx systemu observe. (b/148996309)
  • Poprawiono formatowanie wielu testów Lint (aosp/1157012).

Treści publikowane przez użytkowników zewnętrznych

  • Dziękujemy Zac Sweers za przesłanie require___() testów Lint w imieniu Slack. (Aosp/1202883).

Wersja 1.2.1

Wersja 1.2.1

5 lutego 2020 r.

androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 i androidx.fragment:fragment-testing:1.2.1 zostały udostępnione. Wersja 1.2.1 zawiera te zatwierdzenia.

Poprawki błędów.

  • Fragmenty dodane za pomocą metod add i replace, które przyjmują instancję Class (lub wersje zmodyfikowane przez Kotlin), mają teraz domyślny konstruktor zachowywany przez ProGuard. (b/148181315)
  • Reguły FragmentStatePagerAdapter i FragmentPagerAdapter nie wychwytują już wyjątków zgłoszonych przez metodę FragmentManager podczas uruchamiania funkcji finishUpdate(). (Aosp/1208711)
  • Rozwiązaliśmy problem, który powodował, że usługa FragmentManager.findFragment() nie działała z fragmentami dodanymi za pomocą tagu <fragment>. (b/147784323)
  • Fragmenty, które zostały poszerzone za pomocą tagu <fragment>, zawsze otrzymują wywołanie onInflate() przed onCreate(), gdy są w układzie. (Aosp/1215856).
  • Wywołanie toString() w wystąpieniu FragmentManager nie powoduje już wywołania NullPointerException, jeśli aktywność została już zniszczona. (b/148189412)

Zmiany zależności

Wersja 1.2.0

Wersja 1.2.0

Styczeń 22, 2020

androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0 i androidx.fragment:fragment-testing:1.2.0 zostały udostępnione. Wersja 1.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.1.0

  • FragmentContainerView: FragmentContainerView to zdecydowanie zalecany kontener dla dynamicznie dodawanych fragmentów kodu. Zastępuje on użycie elementów FrameLayout lub innych układów. Obsługuje również te same elementy class, android:name i opcjonalny android:tag co tag <fragment>, ale do dodania tego początkowego fragmentu używa normalnego ciągu FragmentTransaction zamiast niestandardowej ścieżki kodu używanej przez <fragment>.
  • Czas onDestroyView(): fragmenty czekają teraz na zakończenie animacji wyjść, przejścia platformy wyjściowej i przejścia AndroidaX (w przypadku przejścia 1.3.0) przed wywołaniem funkcji onDestroyView().
  • add() i replace() oparte na klasach: w FragmentTransaction dodano nowe przeciążenia wartości add() i replace(), które przyjmują Class<? extends Fragment> i opcjonalny Bundle argumentów. Te metody używają FragmentFactory do utworzenia wystąpienia fragmentu do dodania. Rozszerzenia Kotlin, które korzystają ze zmienionych typów (np.fragmentTransaction.replace<YourFragment>(R.id.container)), zostały też dodane do fragment-ktx.
  • Integracja z zapisanym modelem widoku cyklu życia: SavedStateViewModelFactory jest teraz domyślną fabryką używaną w przypadku korzystania z konstruktora by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z fragmentem kodu.
  • Nowe testy Linta: dodaliśmy nowy proces sprawdzania Lint, który zapewnia, że do obserwacji LiveData w usługach onCreateView(), onViewCreated() i onActivityCreated() używasz getViewLifecycleOwner().
  • Wycofanie getFragmentManager(): metody getFragmentManager() i requireFragmentManager() dotyczące fragmentu zostały wycofane i zastąpione pojedynczą metodą getParentFragmentManager(), która zwraca wartość niepustą FragmentManager, do której został dodany fragment (możesz użyć isAdded(), aby określić, czy można je wywołać).
  • Wycofanie FragmentManager.enableDebugLogging(): statyczna metoda FragmentManager.enableDebugLogging została wycofana. FragmentManager respektuje teraz Log.isLoggable() dla tagu FragmentManager, co umożliwia włączenie logowania DEBUG lub VERBOSE bez ponownego kompilowania aplikacji.

Znane problemy

  • Fragmenty, do których odwołuje się tylko atrybut class lub android:name w tabeli FragmentContainerView, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania do każdej klasy fragmentu. (b/142601969)
  • Gdy dodajesz element NavHostFragment za pomocą parametru class lub android:name w pliku XML z parametrem FragmentContainerView, nie możesz używać findNavController() w onCreate() aktywności. (B/142847973)

Wersja 1.2.0-rc05

Styczeń 8, 2020

androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05 i androidx.fragment:fragment-testing:1.2.0-rc05 zostały udostępnione. Wersja 1.2.0-rc05 zawiera te zatwierdzenia.

Poprawki błędów.

  • Naprawiono regresję we fragmencie 1.2.0-rc04 w przypadku użycia tagu <fragment>, przez co funkcja onViewCreated() była nieprawidłowo wywoływana podczas zniszczenia aktywności. (B/146290333)
  • Fragmenty dodane z tagiem <fragment> są teraz prawidłowo usuwane z innych ustawień, nawet jeśli występują tylko czasami w układzie (tzn. tylko w układzie poziomym). W rezultacie fragmenty są teraz prawidłowo przenoszone do CREATED nawet wtedy, gdy nie ma ich w Twoim układzie, zamiast ich instancji, ale nigdy nie przechodzą przez żadne metody cyklu życia. (b/145769287)

Wersja 1.2.0-rc04

18 grudnia 2019 r.

androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04 i androidx.fragment:fragment-testing:1.2.0-rc04 zostały udostępnione. Wersja 1.2.0-rc04 zawiera te zatwierdzenia.

Poprawki błędów.

  • Dostosowaliśmy animacje dla elementów TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE i TRANSIT_FRAGMENT_FADE, aby uniknąć problemów z obrazem. (b/145468417)

Wersja 1.2.0-rc03

4 grudnia 2019

androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03 i androidx.fragment:fragment-testing:1.2.0-rc03 zostały udostępnione. Wersja 1.2.0-rc03 zawiera te zatwierdzenia.

Poprawki błędów.

  • Poprawiliśmy niezamierzoną zmianę działania, w wyniku której usunięte fragmenty kodu nadal były zwracane przez funkcje findFragmentById() / findFragmentByTag() podczas uruchamiania animacji/przejść zdarzeń wyjściowych. (b/143982969, Aosp/1167585)
  • Fragmenty podrzędne są teraz prawidłowo zatrzymywane przed elementami nadrzędnymi, gdy powiązana aktywność wywołuje onSaveInstanceState(). (B/144380645)
  • Naprawiono błąd polegający na tym, że wyświetlenia były błędnie oznaczane jako INVISIBLE po wyświetleniu ukrytego fragmentu. (b/70793925)
  • Przejścia elementów udostępnionych fragmentów obejmują teraz wyświetlenia, które zostały obrócone, przeskalowane itp. (b/142835261)

Aktualizacje dokumentacji

  • Doprecyzowaliśmy dokumentację dotyczącą wycofywania aplikacji setUserVisibleHint(). (B/143897055)
  • Poprawiono dokumentację dotyczącą setFragmentFactory() i getFragmentFactory(), aby lepiej wskazać, że ustawienie FragmentFactory będzie miało również wpływ na podrzędne elementy FragmentManager. (Aosp/1170095).

Zmiany zależności

  • Fragmenty kodu zależą teraz od Cykl życia 2.2.0-rc03, SavedState modelu cyklu życia 1.0.0-rc03 i aktywności 1.1.0-rc03.

Wersja 1.2.0-rc02

7 listopada 2019 r.

androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02 i androidx.fragment:fragment-testing:1.2.0-rc02 zostały udostępnione. Wersja 1.2.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów.

  • W przypadku Kotlin narzędzie LintFix używane do używania getViewLifecycleOwner() do obserwacji LiveData z onCreateView(), onViewCreated() lub onActivityCreated() (zaprezentowane w fragmentu 1.2.0-rc01) używa teraz składni dostępu do właściwości Kotlin viewLifecycleOwner zamiast getViewLifecycleOwner(). (Aosp/1143821)

Wersja 1.2.0-rc01

23 października 2019 r.

androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01 i androidx.fragment:fragment-testing:1.2.0-rc01 zostały udostępnione. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Oprócz atrybutu android:name FragmentContainerView obsługuje teraz atrybut class, co odzwierciedla działanie tagu <fragment>. (b/142722242)
  • Dodano nowy sprawdzanie licencji, które zapewnia, że używasz getViewLifecycleOwner() do obserwowania zdarzeń LiveData z usług onCreateView(), onViewCreated() i onActivityCreated(). (b/137122478)

Poprawki błędów.

  • Wywołania zwrotne onDismiss i onCancel funkcji DialogFragment gwarantują teraz, że przekaz do nich DialogInterface nie ma wartości null, a pole getDialog() zwraca wartość inną niż null po ich wykonaniu. (B/141974033)
  • FragmentContainerView dodaje teraz fragment zdefiniowany przez class lub android:name w ramach inflacji. Dzięki temu findFragmentById() i findFragmentByTag() będą działać od razu po tym zdarzeniu. (b/142520327)
  • Naprawiono IllegalStateException w FragmentContainerView z powodu zapisywania stanu. (B/142580713)
  • Naprawiono błąd UnsupportedOperationException w elemencie FragmentContainerView, gdy klasa FragmentContainerView ma zaciemniony kod. (B/142657034)

Znane problemy

  • Fragmenty, do których odwołuje się tylko atrybut class lub android:name w tabeli FragmentContainerView, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania do każdej klasy fragmentu. Do czasu rozwiązania tego problemu poprzez aapt2 wyłączyliśmy regułę Lint sugerującą przejście do: FragmentContainerView. (b/142601969)

Wersja 1.2.0-beta02

11 października 2019 r.

androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02 i androidx.fragment:fragment-testing:1.2.0-beta02 zostały udostępnione. Wersja 1.2.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów.

  • Naprawiono błąd, który powodował, że fragment onInflate() nie otrzymywał prawidłowych atrybutów z FragmentContainerView, takich jak NavHostFragment. (b/142421837)

Wersja 1.2.0-beta01

9 października 2019 r.

androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01 i androidx.fragment:fragment-testing:1.2.0-beta01 zostały udostępnione. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • W FragmentContainerView można dodawać początkowy fragment z obsługą atrybutów XML android:name i opcjonalnych android:tag. W przeciwieństwie do tagu <fragment> FragmentContainerView używa normalnego tagu FragmentTransaction znajdującego się poza infrastrukturą, aby dodać początkowy fragment. Umożliwia to dalsze operacje FragmentTransaction w elemencie FragmentContainerView i umożliwia korzystanie z powiązania widoku dla układu. (b/139830628, b/141177981)
  • Fragmenty zawierają teraz ostrzeżenie o Lnt i zawierają szybką poprawkę, która pozwala zastąpić <fragment> elementem FragmentContainerView. (B/139830056)

Poprawki błędów.

  • Naprawiono błąd ClassCastException w przypadku użycia funkcji androidx.transition. (B/140680619)
  • Jeśli używasz przejścia 1.3.0-beta01, fragmenty czekają teraz na zakończenie przejść androidx.transition (oprócz przejść między elementami platformy i animacji, które zostały naprawione odpowiednio w fragmentach 1.2.0-alpha03 i fragmentie 1.2.0-alpha02) przed wysłaniem onDestroyView(). (Aosp/1119841)
  • Jeśli używasz przejścia 1.3.0-beta01, fragmenty kodu prawidłowo zamykają teraz przejścia typu androidx.transition przed rozpoczęciem nowych przejść / animacji w tym samym kontenerze. (Aosp/1119841)
  • Rozwiązaliśmy problem z interfejsem API w wersji 17 i starszych w przypadku używania przejść androidx.transition w widoku głównym fragmentu kodu FragmentContainerView. (B/140361893)
  • Artefakt fragment-testing korzysta teraz z testu AndroidX 1.2.0, naprawiamy niezgodność z najnowszą wersją Espresso 3.2.0. (B/139100149)
  • Usunięto użycie Log.w w usłudze FragmentManager. (Aosp/1126468).

Znane problemy

  • onInflate() fragmentu nie otrzymuje prawidłowych atrybutów z FragmentContainerView, przypadki awarii, takie jak NavHostFragment. (b/142421837)

Wersja 1.2.0-alfa04

18 września 2019 r.

androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04 i androidx.fragment:fragment-testing:1.2.0-alpha04 zostały udostępnione. Wersja 1.2.0-alfa04 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Metody getFragmentManager() i requireFragmentManager() w tabeli Fragment zostały wycofane i zastąpione pojedynczą metodą getParentFragmentManager(), która zwraca wartość FragmentManager inną niż zero, do której został dodany fragment (możesz użyć isAdded(), aby określić, czy można je bezpiecznie wywołać). (b/140574496)
  • Metoda statyczna FragmentManager.enableDebugLogging została wycofana. FragmentManager respektuje teraz Log.isLoggable() dla tagu FragmentManager, co umożliwia włączenie logowania DEBUG lub VERBOSE bez ponownego kompilowania aplikacji (aosp/1116591).

Poprawki błędów.

  • Fragmenty są teraz prawidłowo niszczone podczas uruchamiania animacji wyjścia dla innych fragmentów. (b/140574199)
  • Naprawiono błąd, który powodował, że fragmenty kodu wywoływały Activity.findViewById(), gdy wcześniej nie były. (Aosp/1116431).

Wersja 1.2.0-alfa03

5 września 2019 r.

androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 i androidx.fragment:fragment-testing:1.2.0-alpha03 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

Poprawki błędów.

  • FragmentContainerView teraz prawidłowo odwraca kolejność rysowania podczas wysuwania fragmentów z tylnego stosu. (b/139104187)
  • Naprawiono błąd, który powodował, że w przypadku jednoczesnego wyskakującego fragmentu i dodawania nowego fragmentu była uruchamiana nieprawidłowa animacja. (b/111659726)
  • Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, które zostały naprawione we Fragmentie 1.2.0-alpha02) przed wysłaniem wiadomości onDestroyView(). (b/138741697)

Wersja 1.2.0-alfa02

7 sierpnia 2019 r.

Wersje androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 i androidx.fragment:fragment-testing:11.2.0-alpha02 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • SavedStateViewModelFactory jest teraz domyślną fabryką używaną w przypadku używania by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z Fragment. (b/135716331)
  • Domyślne animacje używane podczas korzystania z funkcji TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE i TRANSIT_FRAGMENT_FADE z parametrem setTransition na urządzeniu FragmentTransaction zostały zaktualizowane, tak aby odpowiadały animowanym aktywnościom na urządzeniach z Androidem 10. (Aosp/1012812, Aosp/1014730)

Zmiany interfejsu API

  • Wprowadza FragmentContainerView jako zdecydowanie zalecany kontener dla dynamicznie dodawanych fragmentów kodu. Zastępuje on użycie konstrukcji FrameLayout itp., ponieważ rozwiązuje problemy z układem kolejności animacji w animacji i wstawienia okien wysyłanych do fragmentów kodu. (b/37036000, Aosp/985243, b/136494650)
  • Dodano statyczną metodę FragmentManager.findFragment(View) do pobierania zawierającego fragment kodu z widoku powiększonego przez fragment. Rozszerzenie Kotlin jest również dostępne w języku fragment-ktx. (Aosp/1090757)
  • W systemie FragmentTransaction dodano nowe przeciążenia funkcji add() i replace(), które przyjmują argumenty Class<? extends Fragment> i opcjonalnie Bundle. Te metody używają FragmentFactory do utworzenia wystąpienia fragmentu do dodania. Rozszerzenie Kotlin, które korzysta ze zmienionych typów (np.fragmentTransaction.replace<YourFragment>(R.id.container)), zostało też dodane do fragment-ktx. (b/126124987)
  • Adnotacje (@MainThread) zostały dodane do Fragment wywołań zwrotnych cyklu życia. (b/127272564)
  • Interfejsy API powiązane z tytułem menu nawigacyjnego w systemach FragmentTransaction i FragmentManager.BackStackEntry zostały wycofane. (b/138252944)
  • Metoda setTransitionStyle w systemie FragmentTransaction została wycofana. (Aosp/1011537).
  • Wiele metod w funkcji FragmentManager nie jest już typu abstract. Sama instancja FragmentManager pozostaje abstract i nie powinna być utworzona bezpośrednio ani rozszerzona. Nadal pobieraj tylko istniejącą instancję z instancji getSupportFragmentManager(), getChildFragmentManager() itp.

Poprawki błędów.

  • Od Fragmentu 1.1.0-rc04: fragmenty kodu prawidłowo anulują odroczone przejścia dla fragmentów z fragmentami z fragmentami z krzyżykiem. (b/138251858)
  • Z fragmentu 1.1.0-rc03: naprawiliśmy problem, który powodował, że wywołanie funkcji postponeEnterTransition() z większym czasem oczekiwania nie anuluje wcześniejszych limitów czasu. (b/137797118)
  • Z fragmentu 1.1.0-rc02: naprawiono błąd, który występował w FragmentPagerAdapter i FragmentStatePagerAdapter podczas usuwania bieżącego elementu. (B/137209870)
  • Fragmenty czekają teraz na zakończenie animacji przed wysłaniem polecenia onDestroyView(). (B/136110528)
  • Animacje fragmentów podrzędnych z fragmentów podrzędnych i ich elementów potomnych są teraz prawidłowo obsługiwane podczas animowania nadrzędnego fragmentu. (B/116675313)
  • Naprawiono błąd NullPointerException występujący podczas korzystania z przejść udostępnionych elementów oraz łączenia operacji wyskakujących i dodawania. (B/120507394)
  • Dodano obejście zabezpieczeń IllegalStateException w przypadku korzystania z FragmentPagerAdapter i FragmentStatePagerAdapter w testach Robolectric. (b/137201343)

Wersja 1.2.0-alpha01

2 lipca 2019 r.

androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 i androidx.fragment:fragment-testing:1.2.0-alpha01 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • FragmentManager wywołuje teraz requestApplyInsets() po dołączeniu widoku fragmentu i bezpośrednio przed wywołaniem onViewCreated(). Dzięki temu Twój widok zawsze ma prawidłowe wstawki. (b/135945162)

Poprawki błędów.

  • Naprawiono błąd NullPointerException, który występował podczas wyświetlania parametru FragmentTransaction, który używał setPrimaryNavigationFragment() przed replace(). (b/134673465)

Wersja 1.1.0

Wersja 1.1.0

5 września 2019 r.

androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 i androidx.fragment:fragment-testing:1.1.0 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany wprowadzone od wersji 1.0.0

  • testowanie fragmentów: artefakt fragment-testing udostępnia klasę FragmentScenario do izolowanego testowania fragmentu. Więcej informacji znajdziesz w artykule Testowanie fragmentów aplikacji.
  • FragmentFactory: możesz teraz ustawić FragmentFactory w FragmentManager, aby zarządzać tworzeniem instancji z fragmentami. Nie ma już rygorystycznego wymogu używania konstruktora bez argumentu.
  • Przedstawiciele usługi Kotlin dla obiektów ViewModels: artefakt fragment-ktx zawiera teraz 2 delegacje właściwości Kotlin: by viewModels() w celu uzyskania dostępu do modeli widoków powiązanych z poszczególnymi fragmentami i by activityViewModels() na potrzeby dostępu do modeli ViewModel w zakresie działania.
  • Maksymalny cykl życia: możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując setMaxLifecycle() w FragmentTransaction. Zastępuje ona wycofywaną zasadę setUserVisibleHint(). FragmentPagerAdapter i FragmentStatePagerAdapter mają nowy konstruktor, który umożliwia przełączenie się na nowe zachowanie.
  • Konstruktor FragmentActivity LayoutId: podklasy obiektu FragmentActivity mogą teraz opcjonalnie wywoływać konstruktor w elemencie FragmentActivity, który przyjmuje identyfikator R.layout, co wskazuje układ, który należy ustawić jako widok treści zamiast wywoływać setContentView() w elemencie onCreate(). Nie zmienia to wymogu, że podklasa musi mieć konstruktor bez argumentu.
  • Konstruktor z fragmentem identyfikatora Układu: podklasy obiektu Fragment mogą teraz opcjonalnie wywoływać konstruktor w obiekcie Fragment, który przyjmuje identyfikator R.layout, co wskazuje układ, którego należy użyć dla tego fragmentu jako alternatywy dla zastąpienia onCreateView(). Układ powiększony można skonfigurować w onViewCreated().
  • Opóźnij z określonym limitem czasu: dodano nowe przeciążenie postponeEnterTransition(), które zajmuje więcej czasu.

Wersja 1.1.0-rc04

7 sierpnia 2019 r.

Wersje androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 i androidx.fragment:fragment-testing:1.1.0-rc04 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Fragmenty kodu z fragmentami z fragmentami z krzyżykiem prawidłowo anulować przełożone przejścia zostały w nich wycięte. (b/138251858)

Wersja 1.1.0-rc03

19 lipca 2019 r.

Wersje androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 i androidx.fragment:fragment-testing:1.1.0-rc03 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Rozwiązaliśmy problem, który powodował, że wywołanie funkcji postponeEnterTransition() z większym limitem czasu oczekiwania nie powodowało anulowania poprzednich limitów czasu oczekiwania. (b/137797118)

Wersja 1.1.0-rc02

17 lipca 2019 r.

androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 i androidx.fragment-testing:fragment:1.1.0-rc02 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Naprawiono błąd związany z usuwaniem bieżącego elementu w FragmentPagerAdapter i FragmentStatePagerAdapter. (B/137209870)

Wersja 1.1.0-rc01

2 lipca 2019 r.

androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01 i androidx.fragment:fragment-testing:1.1.0-rc01 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Fragmenty kodu teraz prawidłowo aktualizują swoją widoczność podczas wykonywania operacji show() lub hide() podczas przejścia. (b/133385058)
  • Naprawiono błąd NullPointerException, który występował podczas wyświetlania parametru FragmentTransaction, który używał setPrimaryNavigationFragment() przed replace(). (b/134673465)

Wersja 1.1.0-beta01

5 czerwca 2019 r.

androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01 i androidx.fragment:fragment-testing:1.1.0-beta01 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Wywołania zwrotne androidx.lifecycle.Lifecycle (w szczególności związane z STARTED, RESUMED, PAUSED, STOPPED i DESTROYED) dla zagnieżdżonych fragmentów są teraz prawidłowo zagnieżdżone. (b/133497591)
  • Instancje (OnBackPressedCallback) zarejestrowane w elemencie onCreate() fragmentu kodu mają teraz prawidłowe pierwszeństwo przed podrzędnym tagiem FragmentManager. (b/133175997)
  • Fragmenty podrzędne nie są już animowane, gdy zastępowany jest ich fragment nadrzędny. (B/121017790)
  • Animacje i przejścia z fragmentami kodu są teraz ignorowane podczas korzystania z funkcji animateLayoutChanges="true". Naprawiamy problem polegający na tym, że fragmenty nie zostały prawidłowo zniszczone. (B/116257087)

Wersja 1.1.0-alpha09

16 maja 2019 r.

androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09 i androidx.fragment:fragment-testing:1.1.0-alpha09 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

  • Fragmenty otrzymują teraz wywołanie zwrotne do nowej metody onPrimaryNavigationFragmentChanged(boolean) w przypadku zmiany głównego fragmentu nawigacji. aosp/960857

Poprawki błędów.

  • Pozycje w menu, które są powiększone przez fragment podrzędny, są teraz prawidłowo usuwane po usunięciu fragmentu nadrzędnego. b/131581013

Wersja 1.1.0-alpha08

7 maja 2019 r.

androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 i androidx.fragment:fragment-testing:1.1.0-alpha08 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ta wersja jest niezgodna z preferencjami w wersjach od 1.1.0-alfa01 do 1.1.0-alfa. Jeśli używasz tej wersji fragmentów kodu, uaktualnij je do wersji 1.1.0-alfa05.

Nowe funkcje

  • Dodano nowe przeciążenie obiektu postponeEnterTransition(), które wymaga czasu oczekiwania, po którym fragment będzie automatycznie wywoływał startPostponedEnterTransition() b/120803208

Zmiany interfejsu API

  • Niezbędna zmiana: wycofaliśmy wcześniej wycofaną metodę instantiate FragmentFactory, która wymagała użycia Bundle. aosp/953856
  • Niezbędna zmiana: stałe RESUME_ONLY_CURRENT_FRAGMENT i USE_SET_USER_VISIBLE_HINT w elementach FragmentPagerAdapter i FragmentStatePagerAdapter zostały zmienione na odpowiednio BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT i BEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Poprawki błędów.

  • Fragmenty, których cykl życia został ograniczony przez setMaxLifecycle(), nie są już wznawiane przed osiągnięciem ostatecznego stanu. b/131557151
  • Gdy używasz funkcji setMaxLifecycle(Lifecycle.State.CREATED), widok fragmentów kodu zostanie zniszczony. aosp/954180

Wersja 1.1.0-alpha07

25 kwietnia 2019 r.

androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07 i androidx.fragment:fragment-testing:1.1.0-alpha07 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Teraz możesz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję setMaxLifecycle() w FragmentTransaction. Zastępuje ona wycofywaną zasadę setUserVisibleHint(). FragmentPagerAdapter i FragmentStatePagerAdapter mają nowy konstruktor, który umożliwia przełączenie się na nowe zachowanie. (B/129780800)

Zmiany interfejsu API

  • Funkcja moveToState(STARTED) w systemie FragmentScenario można teraz wywoływać tylko na urządzeniach z interfejsem API w wersji 24 lub nowszej. (B/129880016)

Zmiany w działaniu

  • W efekcie (b/129907905) fragmenty w stosie tylnym nie będą otrzymywać wywołania zwrotnego do onCreateView() po odtworzeniu aktywności hostującej. Funkcja onCreateView() będzie teraz wywoływana tylko wtedy, gdy fragment będzie widoczny (tj. tylny stos zostanie wysunięty).

Poprawki błędów.

  • Naprawiono błąd związany z używaniem tagu <fragment> w pliku XML i konstruktora contentLayoutId FragmentActivity lub AppCompatActivity. (B/129907905)
  • Naprawiono błąd polegający na tym, że po zmianie konfiguracji fragmenty z tylnego stosu nie były przenoszone do co najmniej CREATED, co powodowało nieprawidłowe usuwanie modeli ViewModel i fragmentów przechowywanych w elementach podrzędnych. (b/129593351)
  • Naprawiliśmy awarię w restoreSaveState powodowaną desynchronizacją zachowanych fragmentów po zapisaniu stanu instancji. (b/130433793) (Aosp/947824)
  • Rozwiązaliśmy problemy, które powodowały, że funkcja OnBackPressedCallback dodana z cyklem życia fragmentów nie była wywoływana, jeśli obiekt FragmentManager miał stos wsteczny. Więcej informacji znajdziesz na stronie androidx.activity 1.0.0-alpha07. (Aosp/948209)
  • Fragmenty nie wymuszają już używania atrybutu LAYER_TYPE_HARDWARE w przypadku animacji. Jeśli potrzebujesz animacji w warstwie sprzętowej, ustaw ją jako część animacji. (b/129486478)

Wersja 1.1.0-alpha06

3 kwietnia 2019 r.

androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06 i androidx.fragment:fragment-testing:1.1.0-alpha06 zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Wyjątki zgłoszone przez funkcję FragmentManager zawierają teraz nazwę fragmentu w wiadomości. (B/67759402)

Zmiany interfejsu API

  • Fragment i FragmentActivity zawierają teraz drugi konstruktor, który wymaga @LayoutRes int, co zastępuje poprzednie zachowanie polegające na dodaniu adnotacji do klasy przy użyciu metody @ContentView. Ta metoda działa zarówno w modułach aplikacji, jak i biblioteki. (b/128352521)
  • Element onActivityResult() FragmentActivity jest teraz prawidłowo oznaczony jako @CallSuper. (b/127971684)
  • Metoda instantiate w FragmentFactory, która przyjmuje argument „Pakiet”, została wycofana. Aplikacje powinny używać nowego przeciążenia instantiate, które nie zajmuje pakietu. (B/128836103)
  • Metody usługi FragmentScenario są teraz prawidłowo oznaczone za pomocą adnotacji @StyleRes. (Aosp/924193)
  • Usługa FragmentTabHost została wycofana. (b/127971835)
  • Pole getThemedContext() FragmentActivity zostało usunięte. (Aosp/934078)

Poprawki błędów.

  • Naprawiono regresję w zakresie 1.1.0-alfa05, która powodowała miganie przychodzącego fragmentu na ekranie. (b/129405432)
  • Rozwiązaliśmy problem, który powodował, że główny fragment nawigacji był tracony po wykonaniu serii operacji popBackStack+replace+popBackStack. (b/124332597)
  • Rozwiązaliśmy problem z używaniem konstruktorów @ContentView w aktywności podczas przywracania stanu fragmentu. (B/127313094)
  • Poprawiliśmy logikę setTargetFragment() podczas zastępowania istniejącego fragmentu docelowego fragmentem, który nie jest jeszcze podłączony do FragmentManager. (Aosp/932156)

Wersja 1.1.0-alpha05

13 marca 2019 r.

androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05 i androidx.fragment:fragment-testing:1.1.0-alpha05 zostały udostępnione. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Wyszukiwania adnotacji (@ContentView) są teraz przechowywane w pamięci podręcznej (b/123709449)

Zmiany w działaniu

  • Wywołanie remove(), hide(), show(), detach() i setPrimaryNavigationFragment() z fragmentem dołączonym do innego elementu FragmentManager powoduje teraz wysłanie IllegalStateException zamiast błędu (aosp/904301)

Poprawki błędów.

  • Pole onNewIntent dla domeny FragmentActivity jest teraz prawidłowo oznaczone symbolem @CallSuper (b/124120586)
  • Rozwiązaliśmy problem, który powodował, że funkcja onDismiss() użytkownika DialogFragment mogła być wywoływana 2 razy przy użyciu funkcji getDialog().dismiss() lub getDialog().cancel() (b/126563750)

Wersja 1.1.0-alfa04

7 lutego 2019 r.

androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 i androidx.fragment:fragment-testing 1.1.0-alpha04 zostały udostępnione.

Nowe funkcje

  • Dodano obsługę adnotacji klasy @ContentView, która umożliwia wskazanie pliku XML układu, który należy wyświetlić jako alternatywę dla zastąpienia onCreateView(). Zalecamy wyświetlenie powiązanych prac w tym języku: onViewCreated(). (Aosp/837619).
  • fragment-testing korzysta teraz ze stabilnej wersji androidx.test:core-ktx 1.1.0 (b/121209673)
  • Możesz teraz używać openActionBarOverflowOrOptionsMenu z zasadą FragmentScenario, aby testować menu opcji hostowanych fragmentów (b/121126668)

Zmiany interfejsu API

  • Dodano metodę requireArguments(), która zwraca @NonNull Bundle lub zwraca IllegalStateException (b/121196360).
  • Dodaliśmy uwagę, że zasad getLifecycle(), getViewLifecycleOwner() i getViewLifecycleOwnerLiveData() nie należy zastępować i zostaną one sfinalizowane w przyszłej wersji. Jeśli zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (Aosp/880714)
  • Dodaliśmy uwagę, że zasady getViewModelStore() nie powinny być zastępowane i w przyszłej wersji zostaną zmienione na wersję ostateczną. Jeśli zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (Aosp/880713)
  • Naprawiono problem ze zgodnością plików binarnych z poprzednimi wersjami fragmentów kodu. (Aosp/887877) (Aosp/889834)

Poprawki błędów.

  • Fragmenty docelowe są prawidłowo czyszczone podczas przekazywania null do setTargetFragment(). (Aosp/849969)
  • Rozwiązaliśmy problem, który powodował, że docelowe fragmenty kodu były czasami niedostępne w onDestroy() lub później. (b/122312935)
  • Funkcja onOdrzuć() w DialogFragment jest teraz wywoływana przed onDestroy(). (Aosp/874133) (Aosp/890734)

Wersja 1.1.0-alfa03

17 grudnia 2018 r.

Nowe funkcje

  • Fragment implementuje teraz BundleSavedStateRegistryOwner i zależy od nowo opublikowanej biblioteki SavedState [aosp/824380]
  • Delegat właściwości by activityViewModels Kotlin został dodany w celu pobierania modeli widoków danych powiązanych z aktywnością [b/119050253]
  • Delegat właściwości by viewModels Kotlin został rozszerzony, aby przyjąć opcjonalną metodę lambda do pobierania identyfikatora ViewModelStoreOwner. Umożliwia to przekazywanie fragmentu nadrzędnego lub innego niestandardowego elementu ViewModelStoreOwner za pomocą kodu takiego jak val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

Zmiany interfejsu API

  • FragmentScenario pozwala teraz określić motyw, na przykład Theme.AppCompat [b/119054431]. To jest przełomowa zmiana.
  • Dodano metodę requireView(), która zwraca @NonNull View lub zwraca błąd IllegalStateException [b/120241368]
  • Dodano metodę requireParentFragment(), która zwraca @NonNull Fragment lub zwraca błąd IllegalStateException [b/112103783]

Poprawki błędów.

  • Usunięto błąd IllegalStateException: niepowodzenie zapisu stanu b/120814739
  • Fragmenty przywracane ze stanu zapisanej instancji zawsze będą otrzymywać niepustą wartość Bundle [b/119794496]
  • Usunięte fragmenty nie są już ponownie używane z obiektem Lifecycle po ponownym dodaniu [b/118880674]

Wersja 1.1.0-alfa02

3 grudnia 2018 r.

Nowe funkcje

  • Rozszerzenia Kotlin w narzędziu FragmentInvoice umożliwiają teraz użycie funkcji lambda na potrzeby konstruowania fragmentu jako alternatywy dla przekazywania w instancji FragmentFactory. (Aosp/812913).

Poprawki błędów.

  • Naprawiono wyjątek IllegalStateException, gdy używano zagnieżdżonych fragmentów w stosie tylnym (b/119256498).
  • Naprawiono awarię występującą podczas korzystania z FragmentScenario.recreate() z urządzeniem FragmentFactory (aosp/820540)
  • Rozwiązaliśmy problem, który powodował, że docelowe fragmenty kodu były niedostępne po jego usunięciu (aosp/807634)

Wersja 1.1.0-alpha01

5 listopada 2018 r.

To jest pierwsza wersja artefaktu fragment-testing i FragmentScenario, która została opracowana w oparciu o interfejsy API androidx.test:core. Więcej informacji znajdziesz w dokumentacji dotyczącej testowania fragmentów.

Nowe funkcje

  • Nowa klasa Fragmentmożliwy do testowania odizolowanych fragmentów kodu.
  • Możesz teraz ustawić FragmentFactory w dowolnym FragmentManager, aby kontrolować sposób tworzenia nowych instancji z fragmentami z fragmentami z krzyżykiem.
  • Dodano nowego przedstawiciela właściwości Kotlin by viewModels() do pobierania obiektów ViewModels z fragmentu.
  • Oczekujące zdarzenia wejściowe (np. kliknięcia) są teraz anulowane we fragmencie onStop() fragmentu.

Zmiany interfejsu API

  • Znacznie rozszerzyliśmy adnotacje o wartości null w interfejsie Fragment API.

Poprawki błędów.

  • Rozwiąż problem, który powodował, że operacje na fragmentach kodu kończyły się niepowodzeniem z poziomu LiveData (b/77944637)

Znane problemy

  • Po usunięciu fragmentu z FragmentManagera nie można uzyskać dostępu do docelowych fragmentów.
  • Funkcja fragment-testing zależy od funkcji androidx.test:core:1.0.0-beta01 zamiast poprawnej wartości androidx.test:core:1.0.0.