Fragment

Podziel aplikację na kilka niezależnych ekranów hostowanych w ramach aktywności.
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
12 lutego 2025 r. 1.8.6 - - -

Deklarowanie zależności

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

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

Odlotowe

dependencies {
    def fragment_version = "1.8.3"

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

Kotlin

dependencies {
    val fragment_version = "1.8.3"

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

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

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz oddać głos w sprawie istniejącego problemu, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.8

Wersja 1.8.6

12 lutego 2025 r.

androidx.fragment:fragment-*:1.8.6 został zwolniony. Wersja 1.8.6 zawiera te komisy.

Poprawki błędów

  • Zastąpienie FragmentContainerView setOnApplyWindowInsetsListener przyjmuje teraz listenera null, zgodnie z możliwościami platformy. (I575f0, b/282790626)

Wersja 1.8.5

30 października 2024 r.

androidx.fragment:fragment-*:1.8.5 został zwolniony. Wersja 1.8.5 zawiera te komitowane zmiany.

Poprawki błędów

  • Naprawiono błąd, który powodował, że IllegalStateException był wywoływany przez saveBackStack tylko po anulowaniu lub przerwaniu gestu przewidywania wstecz. (I3387d, b/342419080)

Wersja 1.8.4

2 października 2024 r.

androidx.fragment:fragment-*:1.8.4 został zwolniony. Wersja 1.8.4 zawiera te komity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował awarię Fragmentów podczas szybkiego naciśnięcia przycisku systemowego Wstecz lub szybkiego wykonania gestu Wstecz, gdy używane są przejścia Androidx. (Ibc038, b/364804225)
  • Rozwiązaliśmy problem z fragmentami, w których przypadku przerwanie przewidywanego gestu wstecz powodowało przejście menedżera fragmentów w niezdefiniowany stan, a nawet wyświetlenie niewłaściwego fragmentu. (If82e2, b/338624457)
  • Rozwiązaliśmy błąd UninitializedPropertyAccessException w AndroidFragment podczas dynamicznej wymiany klasy używanej przez instancję AndroidFragment. (I12dea)

Wersja 1.8.3

4 września 2024 r.

androidx.fragment:fragment-*:1.8.3 został zwolniony. Wersja 1.8.3 zawiera te komisy.

Poprawki błędów

  • FragmentManager teraz podczas obsługi gestów przewidującego cofnięcia prawidłowo uwzględnia oczekujące operacje. Dzięki temu przywracanie systemu nie powoduje już błędu IndexOutOfBoundsException. (I9ba32, b/342316801)
  • AndroidFragment nie ulega już awarii, jeśli zostanie dodany do kompozycji, gdy stan zawierającej go aktywności lub fragmentu jest już zapisany. (I985e9, b/356643968)

Wersja 1.8.2

24 lipca 2024 r.

androidx.fragment:fragment-*:1.8.2 został zwolniony. Wersja 1.8.2 zawiera te komitowane zmiany.

Poprawki błędów

  • AndroidFragment teraz prawidłowo obsługuje przypadki, gdy nadrzędny fragment jest umieszczany na stosie Fragment back, co pozwala uniknąć problemów z błędem „Nie znaleziono widoku o identyfikatorze” podczas powrotu do tego fragmentu. (I94608)
  • Fragmenty dodane za pomocą metody FragmentTransaction.add, która zajmuje ViewGroup, teraz czekają onContainerAvailable, zanim przejdą do onStart(). Ma to wpływ na użytkowników tego interfejsu API, np. AndroidFragment, który teraz czeka, aż AndroidFragment ponownie wprowadzi kompozycję, zanim przekaże ją do onStart(). (I94608)

Wersja 1.8.1

26 czerwca 2024 r.

androidx.fragment:fragment-*:1.8.1 został zwolniony. Wersja 1.8.1 zawiera te komity.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że fragmenty bez kontenera były natychmiast DESTROYED po rozpoczęciu przewidywanego gestu wstecz. Teraz są one w stanie CREATED, dopóki gest się nie zakończy. (If6b83, b/345244539)

Wersja 1.8.0

12 czerwca 2024 r.

androidx.fragment:fragment-*:1.8.0 został zwolniony. Wersja 1.8.0 zawiera te komitowane zmiany.

Ważne zmiany od wersji 1.7.0

  • Element fragment-compose zawiera teraz element AndroidFragment Composable, który umożliwia dodawanie fragmentów do hierarchii tworzenia za pomocą nazwy klasy fragmentu. Zapisuje i przywraca stan fragmentu automatycznie. Należy go używać zamiast wcześniej zalecanego podejścia polegającego na napełnianiu Fragmentu za pomocą funkcji AndroidViewBinding.
  • Współczynnik onBackStackChangeCancelled w interfejsie OnBackStackChangedListener jest teraz wywoływany w ramach wykonywania operacji w FragmentManager, co powoduje, że jest ono wykonywane w bliższym czasie po wywołaniu onBackStackChangeCommitted.FragmentManager

Wersja 1.8.0-rc01

29 maja 2024 r.

androidx.fragment:fragment-*:1.8.0-rc01 został zwolniony. Wersja 1.8.0-rc01 zawiera te komisy.

Poprawki błędów

  • Wywołanie zwrotne onBackStackChangeCancelled w interfejsie FragmentManagers OnBackStackChangedListener jest teraz wykonywane w ramach operacji w FragmentManager, co powoduje, że jest ono bardziej zsynchronizowane z czasem wykonania wywołania zwrotnego onBackStackChangeCommitted. (I5ebfb, b/332916112)

Wersja 1.8.0-beta01

14 maja 2024 r.

androidx.fragment:fragment-*:1.8.0-beta01 został zwolniony. Wersja 1.8.0-beta01 zawiera te komity.

Poprawki błędów

  • Fragmentu 1.7.1: przewidywane cofnięcie będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają albo animatora, albo przewijalną animację przejścia Androidx. Rozwiązaliśmy problem, który powodował, że anulowanie częściowo przeszukiwalnej transakcji powodowało czarny ekran. (I43037, b/339169168)

Wersja 1.8.0-alpha02

17 kwietnia 2024 r.

androidx.fragment:fragment-*:1.8.0-alpha02 został zwolniony. Wersja 1.8.0-alpha02 zawiera te komity.

Poprawki błędów

  • Z Fragmentu 1.7.0-rc02: dodano logi, aby wskazać, dlaczego ustawienie sharedElement bez żadnych innych przejść nie będzie działać. (Iec48e)
  • Fragmentu 1.7.0-rc02: naprawiliśmy błąd, który powodował awarię, gdy do transakcji, w której wszystkie inne przejścia były możliwe do przewinięcia, dodawano element współdzielony, który nie był możliwy do przewinięcia. Transakcja zostanie teraz prawidłowo uznana za nieprzeskakującą. (I18ccd)

Wersja 1.8.0-alpha01

3 kwietnia 2024 r.

androidx.fragment:fragment-*:1.8.0-alpha01 został zwolniony. Wersja 1.8.0-alpha01 zawiera te komity.

Nowe funkcje

  • Nowa funkcja AndroidFragment Composable umożliwia dodawanie fragmentów do hierarchii tworzenia za pomocą nazwy klasy fragmentu. Zapisuje i przywraca stan fragmentu automatycznie. Można go użyć jako bezpośredniej zamiany dla AndroidViewBinding Composable.(b/312895363, Icf841)

Zmiany w dokumentacji

  • Zaktualizowaliśmy dokumentację interfejsów API OnBackStackChangedListener, aby wskazać, kiedy i jak ich używać. (I0bfd9)

Aktualizacja zależności

Wersja 1.7

Wersja 1.7.1

14 maja 2024 r.

androidx.fragment:fragment-*:1.7.1 został zwolniony. Wersja 1.7.1 zawiera te komity.

Poprawki błędów

  • Funkcja przewidywania wstecznego będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają albo Animator, albo Seekable Androidx Transition. Rozwiązano problem, który powodował, że anulowanie częściowo możliwych do odsłuchania transakcji powodowało pusty ekran. (I43037, b/339169168)

Wersja 1.7.0

1 maja 2024 r.

androidx.fragment:fragment-*:1.7.0 został zwolniony. Wersja 1.7.0 zawiera te komisy.

Obsługa predykcyjnego gestu wstecz

  • Fragmenty obsługują teraz przewidywane powroty w aplikacji, gdy używasz Animator lub AndroidX Transition 1.5.0. Dzięki temu użytkownicy mogą użyć gestu wstecz, aby zobaczyć poprzedni fragment, wyszukując animację lub przejście, zanim zdecydują się na przeprowadzenie transakcji przez wykonanie gestu lub anulowanie.
System przejściowy Zasób XML Obsługuje przewidywane przejście wstecz
Animation R.anim Nie
Animator R.animator Tak
Platforma Transition R.transition Nie
AndroidX TransitionTransition 1.4.1 lub nowszą wersją R.transition Nie
AndroidX TransitionTransition 1.5.0 R.transition Tak

Jeśli po włączeniu gestu przewidującego cofnięcie zauważysz jakiekolwiek problemy z obsługą tej funkcji w Fragments, zgłoś problem w Fragments, dołączając przykładowy projekt, w którym można odtworzyć ten problem. Możesz wyłączyć przewidywane cofnięcie, używając FragmentManager.enabledPredictiveBack(false)onCreate() swojej Aktywności.

FragmentManager.OnBackStackChangedListener() udostępnia teraz odpowiednio wartości onBackStackChangeProgressed()onBackStackChangeCancelled(), aby otrzymywać prognozowany postęp wsteczny i zdarzenia anulowane.

Fragment Compose Artifact

Utworzono nowy artefakt fragment-compose, który obsługuje aplikacje przechodzące z architektury opartej na fragmentach na architekturę opartą całkowicie na Compose.

Pierwszą funkcją dostępną w tym nowym artefakcie jest metoda rozszerzenia content w komponencie Fragment, która ułatwia korzystanie z komponentu Compose w interfejsie poszczególnych fragmentów. Tworzy ona dla Ciebie komponent ComposeView i ustawia prawidłowe 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.

androidx.fragment:fragment-*:1.7.0-rc02 został zwolniony. Wersja 1.7.0-rc02 zawiera te komity.

Poprawki błędów

  • Dodano logi, aby wskazać, dlaczego ustawienie sharedElement bez żadnych innych przejść nie będzie działać. (Iec48e)
  • Rozwiązaliśmy błąd, który powodował awarię, gdy do transakcji, w której wszystkie inne przejścia były możliwe do przewinięcia, dodawano element współdzielony, który nie pozwalał na przewijanie. Transakcja zostanie teraz prawidłowo uznana za nieprzeskakującą. (I18ccd)

Wersja 1.7.0-rc01

3 kwietnia 2024 r.

androidx.fragment:fragment-*:1.7.0-rc01 został zwolniony. Wersja 1.7.0-rc01 zawiera te komity.

Aktualizacja zależności

Wersja 1.7.0-beta01

20 marca 2024 r.

androidx.fragment:fragment-*:1.7.0-beta01 został zwolniony. Wersja 1.7.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Metoda FragmentHostCallback jest teraz napisana w języku Kotlin, aby typ ogólny hosta był nieokreślony w takiej samej sytuacji jak typ zwracany przez metodę onGetHost(). (I40af5)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że po zatwierdzeniu gestu przewidywania cofnięcia na fragmencie, który nie znajduje się w kontenerze, fragment ten nigdy nie był usuwany. Fragment zostanie teraz natychmiast przeniesiony do stanu końcowego. (Ida0d9)
  • Rozwiązaliśmy problem w Fragmentach, który powodował, że przerwanie przejść za pomocą gestów przewidywania cofnięcia powodowało zniszczenie widoku wejściowego i pozostawiało pusty ekran. (Id3f22, b/319531491)

Wersja 1.7.0-alpha10

7 lutego 2024 r.

androidx.fragment:fragment-*:1.7.0-alpha10 został zwolniony. Wersja 1.7.0-alpha10 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy znany problem występujący w poprzedniej wersji Fragment, w której korzystanie z obsługi funkcji przewidywania wstecz Fragmenta dla Animator lub AndroidX Transition powodowało, że Fragmenty wywoływały błąd NullPointerExceptionhandleOnBackProgressed, jeśli nigdy nie dodano FragmentManager.OnBackStackChangedListener za pomocą addOnBackStackChangedListener. (I7c835)

Wersja 1.7.0-alpha09

24 stycznia 2024 r.

androidx.fragment:fragment-*:1.7.0-alpha09 został zwolniony. Wersja 1.7.0-alpha09 zawiera te commity.

Fragment Compose Artifact

Utworzono nowy artefakt fragment-compose, który obsługuje aplikacje przechodzące z architektury opartej na fragmentach na architekturę opartą całkowicie na Compose.

Pierwszą funkcją dostępną w tym nowym artefakcie jest metoda rozszerzenia content w komponencie Fragment, która ułatwia korzystanie z komponentu Compose w interfejsie poszczególnych fragmentów. Tworzy ona dla Ciebie komponent ComposeView i ustawia prawidłowe 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 odpowiednio wartości onBackStackChangeProgressed()onBackStackChangeCancelled(), aby otrzymywać prognozowany postęp wsteczny i zdarzenia anulowane. (214b87)

Znany problem

  • Jeśli używasz obsługi przewidywanego przywracania Fragmentów w Animator lub AndroidX Transition, Fragmenty będą wywoływać błąd NullPointerExceptionhandleOnBackProgressed, jeśli nigdy nie dodano FragmentManager.OnBackStackChangedListener za pomocą addOnBackStackChangedListener. Ręczne dodanie słuchacza rozwiąże problem z zawieszaniem. Naprawimy to w kolejne wydanie Fragmentów.

Wersja 1.7.0-alpha08

10 stycznia 2024 r.

androidx.fragment:fragment-*:1.7.0-alpha08 został zwolniony. Wersja 1.7.0-alpha08 zawiera te commity.

Czyszczenie danych

Wersja 1.7.0-alpha07

29 listopada 2023 r.

androidx.fragment:fragment-*:1.7.0-alpha07 został zwolniony. Wersja 1.7.0-alpha07 zawiera te commity.

Poprawki błędów

  • Usunęliśmy błąd NullPointerException spowodowany ustawieniem przejścia elementu współdzielonego i nieustawieniem przejścia wejścia/wyjścia. (I8472b)
  • Fragmentu 1.6.2: gdy fragment FragmentContainerView zostanie wczytany, jego stany, takie jak FragmentManager, Host i id, są teraz dostępne w zgłoszeniu onInflate. (I1e44c, b/307427423)
  • Fragmentu 1.6.2: gdy używasz elementu clearBackStack, aby usunąć zestaw fragmentów, wszystkie zagnieżdżone elementy ViewModel zostaną wyczyszczone, gdy zostaną wyczyszczone elementy ViewModels nadrzędnego elementu. (I6d83c, b/296173018)

Wersja 1.7.0-alpha06

4 października 2023 roku

androidx.fragment:fragment-*:1.7.0-alpha06 został zwolniony. Wersja 1.7.0-alpha06 zawiera te commity.

Aktualizacja zależności

  • Fragmenty zostały zaktualizowane, aby zależały od nowego interfejsu API animateToStart dodanego w ramach przechodu 1.5.0-alpha04.

Wersja 1.7.0-alpha05

20 września 2023 r.

androidx.fragment:fragment-*:1.7.0-alpha05 został zwolniony. Wersja 1.7.0-alpha05 zawiera te commity.

Nowe funkcje

  • Fragmenty obsługują teraz funkcję przewidywanego cofnięcia, gdy używasz biblioteki Androidx Transitions. Dzięki temu możesz użyć gestu wstecz, aby przejść do poprzedniego fragmentu za pomocą niestandardowego przejścia Androidx, zanim zdecydujesz się potwierdzić lub anulować transakcję za pomocą gestu zakończenia. Aby włączyć tę funkcję, musisz zainstalować wersję Transition 1.5.0-alpha03. (Ib49b4, b/285175724)

Znane problemy

  • Obecnie występuje problem, który polega na tym, że po anulowaniu gestu wstecz z przejściem następne uruchomienie tego gestu powoduje wyświetlenie pustego ekranu. Przyczyną może być problem z biblioteką Transition. (b/300157785). Jeśli zauważysz ten problem, zgłoś go w Fragment, dołączając przykładowy projekt, w którym można go odtworzyć. Możesz wyłączyć przewidywane cofnięcie, używając FragmentManager.enabledPredictiveBack(false)onCreate() swojej Aktywności.

Wersja 1.7.0-alpha04

6 września 2023 r.

androidx.fragment:fragment-*:1.7.0-alpha04 został zwolniony. Wersja 1.7.0-alpha04 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który występował podczas anulowania przewidywanego gestu wstecz, gdy fragmenty nie przechodziły do prawidłowego stanu cyklu życia. (I7cffe, b/297379023)
  • Usunięto regresję polegającą na tym, że animacje mogły być uruchamiane razem z przejściami. (I59f36)
  • Rozwiązaliśmy problem z użyciem funkcji Wstecz przewidująca z fragmentami, w którym próba dwukrotnego szybkiego przejścia wstecz w drugim od końca fragmencie stosu wywołała awarię. (Ifa1a4)

Wersja 1.7.0-alpha03

23 sierpnia 2023 r.

androidx.fragment:fragment-*:1.7.0-alpha03 został zwolniony. Wersja 1.7.0-alpha03 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z fragmentami, który występował podczas korzystania z funkcji przewidywanego cofnięcia. W jego wyniku pierwszy fragment w steku fragmentów menedżera fragmentów był pomijany, a aktywność kończyła się po naciśnięciu przycisku Wstecz w ramach systemu przy użyciu 3 przycisków lub gestu przewidywanego cofnięcia. (I0664b, b/295231788)

Wersja 1.7.0-alpha02

9 sierpnia 2023 r.

androidx.fragment:fragment-*:1.7.0-alpha02 został zwolniony. Wersja 1.7.0-alpha02 zawiera te commity.

Poprawki błędów

  • Jeśli używasz fragmentów z przewidywalnymi gestami wstecz z interfejsu API 34, a Twoje urządzenie korzysta z systemu przejść, który nie obsługuje przewijania (Animations, Transitions) lub nie obsługuje w ogóle żadnych przejść, fragmenty będą teraz czekać, aż gest zostanie zakończony, zanim wykonają działanie wstecz. (I8100c)

Wersja 1.7.0-alpha01

7 czerwca 2023 r.

androidx.fragment:fragment-*:1.7.0-alpha01 został zwolniony. Ta wersja jest opracowywana w gałęzi wewnętrznej.

Nowe funkcje

  • Fragmenty obsługują teraz przewidywane powracanie do aplikacji przy użyciu Animator. Dzięki temu możesz użyć gestu wstecz, aby wyświetlić poprzedni fragment z niestandardowym animatorem, zanim zdecydujesz się na przeprowadzenie transakcji za pomocą gestu potwierdzenia lub anulowania. Możesz też wyłączyć to nowe zachowanie, używając eksperymentalnej funkcji enablePredictiveBack() i przekazując parametr false.

Wersja 1.6

Wersja 1.6.2

1 listopada 2023 roku

androidx.fragment:fragment-*:1.6.2 został zwolniony. Wersja 1.6.2 zawiera te commity.

Poprawki błędów

  • Gdy fragment FragmentContainerView zostanie wczytany, jego stany, takie jak FragmentManager, Host i id, są teraz dostępne w wywołaniu zwrotnym onInflate. (I1e44c, b/307427423)
  • Gdy używasz polecenia clearBackStack, aby usunąć zestaw fragmentów, wszystkie zagnieżdżone fragmenty ViewModel zostaną wyczyszczone, gdy zostaną wyczyszczone wartości ViewModels nadrzędnego fragmentu. (I6d83c, b/296173018)

Wersja 1.6.1

26 lipca 2023 r.

androidx.fragment:fragment-*:1.6.1 został zwolniony. Wersja 1.6.1 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że zapisany stan z czasu zatrzymania aktywności, ale nie jej zniszczenia, był nieprawidłowo przechowywany w pamięci podręcznej nawet po przywróceniu instancji fragmentu do stanu RESUMED. Spowoduje to ponowne użycie stanu zapisanego w pamięci podręcznej, jeśli instancja fragmentu znajdowała się na stosie a interfejs API multiple back stacks był używany do zapisywania i przywracania tego fragmentu. (I71288, b/246289075)

Aktualizacja zależności

  • Fragment jest teraz zależny od Activity 1.7.2. Rozwiązaliśmy w ten sposób problem, który uniemożliwiał użytkownikom Kotlina rozszerzanie klasy ComponentDialog bez wyraźnej zależności od klasy Activity. (b/287509323)

Wersja 1.6.0

7 czerwca 2023 r.

androidx.fragment:fragment-*:1.6.0 został zwolniony. Wersja 1.6.0 zawiera te commity.

Ważne zmiany od wersji 1.5.0

  • Zapisane stany Fragment zostały podzielone na stan biblioteki prywatnej (klasy niestandardowe Parcelable) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany w Bundle, co pozwala określić dokładne źródło stanu fragmentu.
  • Interfejs FragmentManager.OnBackStackChangedListener został rozszerzony o 2 dodatkowe funkcje zwracające wartości onBackStackChangeStartedonBackStackChangeCommitted, które są wywoływane w przypadku każdego Fragment odpowiednio przed dodaniem lub usunięciem z fragmentu stosu zwrotnego oraz zaraz po zatwierdzeniu transakcji.
  • FragmentStrictMode dodano nowy element WrongNestedHierarchyViolation, który wykrywa, kiedy podrzędny fragment jest zagnieżdżony w hierarchii widoku nadrzędnego, ale nie jest dodany do childFragmentManager nadrzędnego.
  • Interfejsy API FragmentFragmentManager, które przyjmują argument Intent lub IntentSender, są teraz odpowiednio oznaczone za pomocą @NonNull, aby zapobiec przekazywaniu wartości null, ponieważ spowodowałaby ona natychmiastowe zamykanie się odpowiednich interfejsów API platformy Android, do których wywołują te metody.
  • Usługa DialogFragment udostępnia teraz dostęp do usługi ComponentDialog za pomocą interfejsu API requireComponentDialog().
  • Fragment zależy teraz od cyklu życia2.6.1.
  • Fragment zależy teraz od SavedState 1.2.1.
  • Fragment teraz zależy od ProfileInstaller 1.3.0.
  • Element fragment-testing-manifest oddziela wpisy w pliku manifestu od pozostałych komponentów 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 spowodowanych różnicami w wersjach między fragment-testingandroidx.test.

Wersja 1.6.0-rc01

10 maja 2023 r.

androidx.fragment:fragment-*:1.6.0-rc01 został zwolniony. Wersja 1.6.0-rc01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że ActivityResult były wysyłane z nieprawidłowym kodem żądania, gdy kolejne startActivityForResult były wysyłane po sobie. (If0b9d, b/249519359)
  • Rozwiązaliśmy problem, który powodował wywoływanie funkcji zwrotnych onBackStackChangeListener w przypadku transakcji, które nie zmieniały ścieżki wstecznej, jeśli były pomieszane z transakcjami, które ją zmieniały (I0eb5c, b/279306628).

Wersja 1.6.0-beta01

19 kwietnia 2023 r.

androidx.fragment:fragment-*:1.6.0-beta01 został zwolniony. Wersja 1.6.0-beta01 zawiera te commity.

Poprawki błędów

  • Użycie postponeEnterTransition z czasem oczekiwania, a następnie zastąpienie opóźnionego fragmentu nie powoduje już wycieku opóźnionego fragmentu. (I2ec7d, b/276375110)
  • Nowe wywołania zwrotne onBackStackChangeStartedonBackStackChangeCommitted 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.

androidx.fragment:fragment-*:1.6.0-alpha09 został zwolniony. Wersja 1.6.0-alpha09 zawiera te commity.

Zmiany w interfejsie API

  • Usługa DialogFragment udostępnia teraz dostęp do usługi ComponentDialog za pomocą interfejsu API requireComponentDialog(). (I022e3, b/234274777)
  • Interfejsy API fragment commitNow(), executePendingTransactions()popBackStackImmediate() zostały opatrzone adnotacją @MainThread, co oznacza, że będą teraz generować błędy kompilacji, gdy nie zostaną wywołane z głównego wątku, zamiast czekać na błąd w czasie wykonywania. (Ic9665, b/236538905)

Poprawki błędów

  • Usunęliśmy błąd w funkcji FragmentManager, który powodował awarię podczas zapisywania i przywracania w tym samym kadrze. (Ib36af, b/246519668)
  • Funkcje OnBackStackChangedListener onBackStackChangeStartedonBackStackChangeCommitted są teraz wykonywane tylko wtedy, gdy zmieni się FragmentManager stos wsteczny. (I66055, b/274788957)

Wersja 1.6.0-alpha08

22 marca 2023 r.

androidx.fragment:fragment-*:1.6.0-alpha08 został zwolniony. Wersja 1.6.0-alpha08 zawiera te commity.

Zmiany w zachowaniu

  • Czas wywołania funkcji OnBackStackChangedListener.onBackStackChangeCommited został dostosowany, aby działał przed wykonaniem operacji fragmentu. Dzięki temu funkcja wywołania zwrotnego nigdy nie otrzyma fragmentu, który został odłączony. (I66a76, b/273568280)

Poprawki błędów

  • Z Fragmentu 1.5.6: rozwiązaliśmy problem, który powodował, że wywołanie clearFragmentResultListener w ramach setFragmentResultListener nie działało, jeśli Lifecycle było już STARTED i jego wynik był już dostępny. (If7458)

Aktualizacje zależności

Wersja 1.6.0-alpha07

8 marca 2023 r.

androidx.fragment:fragment-*:1.6.0-alpha07 został zwolniony. Wersja 1.6.0-alpha07 zawiera te commity.

Poprawki błędów

  • Fragmentu 1.5.6: rozwiązaliśmy problem, który powodował, że usunięcie dowolnego fragmentu, niezależnie od tego, czy zawierał dodane elementy menu, powodowało unieważnienie menu aktywności. (50f098, b/244336571)

Wersja 1.6.0-alpha06

22 lutego 2023 roku

androidx.fragment:fragment-*:1.6.0-alpha06 został zwolniony. Wersja 1.6.0-alpha06 zawiera te commity.

Zmiany w zachowaniu

  • Nowy wywołanie zwrotne onBackStackChangedStarted w obiekcie FragmentManager onBackStackChangedListener będzie teraz wykonywane, zanim fragmenty zaczną przechodzić do docelowych stanów. (I34726)

Wersja 1.6.0-alpha05

8 lutego 2023 r.

androidx.fragment:fragment-*:1.6.0-alpha05 został zwolniony. Wersja 1.6.0-alpha05 zawiera te commity.

Nowe funkcje

  • Interfejs FragmentManager.OnBackStackChagnedListener oferuje teraz 2 dodatkowe wywołania zwrotne, onBackStackChangeStartedonBackStackChangeCommitted, które umożliwiają uzyskanie dodatkowych informacji i kontrolę w przypadku zmian w strukturze FragmentManager. (Ib7ce5, b/238686802)

Zmiany w interfejsie API

  • Interfejsy API FragmentFragmentManager, które przyjmują argument Intent lub IntentSender, są teraz odpowiednio oznaczone za pomocą adnotacji @NonNull, aby zapobiec przekazywaniu wartości null, ponieważ spowodowałaby ona natychmiastowe zamykanie się odpowiednich interfejsów API platformy Android, do których te metody się odwołują. (I06fd4)

Wersja 1.6.0-alpha04

7 grudnia 2022 r.

androidx.fragment:fragment-*:1.6.0-alpha04 został zwolniony. Wersja 1.6.0-alpha04 zawiera te commity.

Nowe funkcje

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

Zmiany w zachowaniu

  • Fragmenty są teraz przywracane do stanu SavedStateRegistry przed stanem onAttach(), co zapewnia ich dostępność we wszystkich metodach cyklu życia w górę. (I1e2b1)

Zmiany w interfejsie API

  • Element fragment-testing-manifest oddziela wpisy w pliku manifestu od pozostałych komponentów 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")

Zapobiega to konfliktom spowodowanym przez różnice w wersjach między fragment-testingandroidx.test (I8e534, b/128612536).

Poprawki błędów

  • Zmiana w Fragment 1.5.5: fragmenty nie będą już nieprawidłowo zapisywać stanu ViewModel jako części zapisanego stanu rejestru widoku. (I10d2b, b/253546214)

Wersja 1.6.0-alpha03

5 października 2022 r.

Funkcje androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03androidx.fragment:fragment-testing:1.6.0-alpha03 są dostępne. Wersja 1.6.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Zajęcia rozszerzające DialogFragment będą teraz wymagać wywołania super w swoich zastępstwach onDismiss(). (I14798, b/238928865)

Poprawki błędów

  • Naprawiono regresję spowodowaną przez integrację nowych interfejsów wywołania zwrotnego dostawcy (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider), aby zapewnić, że fragmenty zawsze będą otrzymywać odpowiednie wywołania zwrotne. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)

Wersja 1.6.0-alpha02

24 sierpnia 2022 r.

Funkcje androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02androidx.fragment:fragment-testing:1.6.0-alpha02 są dostępne. Wersja 1.6.0-alpha02 zawiera te commity.

Poprawki błędów

  • Fragment 1.5.2: rozwiązano problem, który powodował, że jednoczesne wykonanie transakcji popBackStack()replace() mogło powodować nieprawidłowe wykonanie Animation/Animator przez fragmenty wychodzące (Ib1c07, b/214835303)

Wersja 1.6.0-alpha01

27 lipca 2022 roku

Funkcje androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01androidx.fragment:fragment-testing:1.6.0-alpha01 są dostępne. Wersja 1.6.0-alpha01 zawiera te commity.

Zmiany w zachowaniu

  • Zapisane stany Fragment zostały podzielone na stan biblioteki prywatnej (klasy niestandardowe Parcelable) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany w Bundle, co pozwala określić dokładne źródło stanu fragmentu. (b/207158202)

Poprawki błędów

  • Fragmentu 1.5.1: naprawiono regresję w DialogFragmentCallbacksDetector, w której korzystanie z wersji lint dołączonej do AGP 7.4 powodowało jej zamykanie. (b/237567009)

Aktualizacja zależności

Wersja 1.5

Wersja 1.5.7

19 kwietnia 2023 r.

Funkcje androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7androidx.fragment:fragment-testing:1.5.7 są dostępne. Wersja 1.5.7 zawiera te zatwierdzenia.

Poprawki błędów

  • Użycie postponeEnterTransition z czasem oczekiwania, a następnie zastąpienie opóźnionego fragmentu nie powoduje już wycieku opóźnionego fragmentu. (I2ec7d, b/276375110)

Wersja 1.5.6

22 marca 2023 r.

Funkcje androidx.fragment:fragment:1.5.6, androidx.fragment:fragment-ktx:1.5.6androidx.fragment:fragment-testing:1.5.6 są dostępne. Wersja 1.5.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że usunięcie dowolnego fragmentu, niezależnie od tego, czy zawierał dodane pozycje menu, powodowało unieważnienie menu aktywności. (50f098, b/244336571)
  • Rozwiązaliśmy problem, który powodował, że wywołanie funkcji clearFragmentResultListener w ramach funkcji setFragmentResultListener nie działało, jeśli funkcja Lifecycle była już STARTED i jego wynik był już dostępny. (If7458)

Wersja 1.5.5

7 grudnia 2022 r.

Funkcje androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5androidx.fragment:fragment-testing:1.5.5 są dostępne. Wersja 1.5.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragmenty nie będą już nieprawidłowo zapisywać stanu ViewModel jako części zapisanego stanu rejestru widoku. (I10d2b, b/253546214)

Wersja 1.5.4

24 października 2022 r.

Funkcje androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4androidx.fragment:fragment-testing:1.5.4 są dostępne. Wersja 1.5.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunięto błąd, który powodował, że korzystanie z niestandardowego FragmentController z hostem, który nie implementuje interfejsu wywołania zwrotnego dostawcy (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider), i wywołanie jego przestarzałej funkcji dispatch nie powodowało wysyłania do fragmentów potomnych. (I9b380)

Wersja 1.5.3

21 września 2022 r.

Funkcje androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3androidx.fragment:fragment-testing:1.5.3 są dostępne. Wersja 1.5.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunięto błąd, który powodował, że fragmenty w grupie wywołań wywoływały funkcje zwrotne onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory()onConfigurationChanged(). (I34581, I8dfe6, b/242570955)
  • Zagnieżdżone fragmenty podrzędne nie będą już otrzymywać wielu wywołań onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() ani onConfigurationChanged(). (I690b3, Id0096, If9d6b, I2cba2)

Wersja 1.5.2

10 sierpnia 2022 r.

Funkcje androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2androidx.fragment:fragment-testing:1.5.2 są dostępne. Wersja 1.5.2 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 1.5.1

27 lipca 2022 roku

Funkcje androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1androidx.fragment:fragment-testing:1.5.1 są dostępne. Wersja 1.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązanie regresji w DialogFragmentCallbacksDetector, w której korzystanie z wersji lint dołączonej do AGP 7.4 powodowało jej awarię. (b/237567009)

Aktualizacja zależności

Wersja 1.5.0

29 czerwca 2022 r.

Funkcje androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0androidx.fragment:fragment-testing:1.5.0 są dostępne. Wersja 1.5.0 zawiera te commity.

Ważne zmiany od wersji 1.4.0

  • Integracja z CreationExtrasFragment może teraz udostępniać bezstanową ViewModelProvider.Factory za pomocą CreationExtras z Lifecycle 2.5.0.
  • Integracja okna dialogowego komponentu – DialogFragment używa teraz ComponentDialog za pomocą aktywności 1.5.0 jako domyślnego okna dialogowego zwracanego przez onCreateDialog().
  • Refaktoryzacja zapisanego stanu instancji – fragmenty zaczęły zmieniać sposób zapisywania stanu instancji. Dzięki temu można wyraźnie określić stan zapisany w fragmentach i jego źródło. Obecne zmiany obejmują:
    • FragmentManager zapisuje teraz stan zapisanej instancji w Bundle, a nie bezpośrednio w niestandardowym Parcelable.
    • Wyniki określone za pomocą Fragment Result APIs, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od wewnętrznego stanu usługi FragmentManager.
    • Stan powiązany z każdym poszczególnym fragmentem jest teraz zapisywany osobno od wewnętrznego stanu FragmentManager, co pozwala na powiązanie ilości zapisanego stanu powiązanego z poszczególnym fragmentem z identyfikatorami unikalnymi obecnymi w dziennikowaniu debugowania Fragment.

Inne zmiany

  • FragmentStrictMode umożliwia teraz prywatnym fragmentom kodu zewnętrznego omijanie określonych kar za naruszenie zasad dzięki użyciu allowViolation() z nazwą klasy.
  • Interfejsy Fragment API służące do wyświetlania menu ActionBar w ramach aktywności zostały wycofane. Interfejsy API MenuHostMenuProvider dodane w Activity 1.4.0 stanowią testowalny interfejs API o zdefiniowanym cyklu życia, którego fragmenty powinny używać.

Wersja 1.5.0-rc01

11 maja 2022 roku

Funkcje androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01androidx.fragment:fragment-testing:1.5.0-rc01 są dostępne. Wersja 1.5.0-rc01 zawiera te zatwierdzenia.

Refaktoryzacja stanu zapisanej instancji

  • Stan powiązany z poszczególnymi fragmentami jest teraz zapisywany osobno od wewnętrznego stanu FragmentManager, co pozwala na powiązanie ilości zapisanego stanu powiązanego z poszczególnym fragmentem z identyfikatorami unikalnymi obecnymi w dziennikowaniu debugowania fragmentu. (a153e0, b/207158202)

Wersja 1.5.0-beta01

20 kwietnia 2022 r.

Funkcje androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01androidx.fragment:fragment-testing:1.5.0-beta01 są dostępne. Wersja 1.5.0-beta01 zawiera te commity.

Zmiany w interfejsie API

  • DialogFragment dodała nową metodę dismissNow, która używa argumentu commitNow w celu zapewnienia zgodności z funkcją showNow. Pamiętaj, że nie spowoduje to natychmiastowego zamknięcia Dialog, tylko zsynchronizuje stan FragmentManager. (I15c36, b/72644830)

Refaktoryzacja stanu zapisanej instancji

  • FragmentManager zapisuje teraz stan zapisanej instancji w Bundle, a nie bezpośrednio w niestandardowym Parcelable. Jest to pierwszy krok w kierunku zapewnienia większej przejrzystości w zakresie tego, co jest faktycznie zapisywane przez Fragmenty. (I93807, b/207158202)
  • Wyniki zdefiniowane za pomocą interfejsów Fragment Result API, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od wewnętrznego stanu FragmentManager. Dzięki temu będziesz mieć większą kontrolę nad tym, jakie wyniki są zapisywane w ramach zapisanego stanu instancji. (I6ea12, b/207158202)

Wersja 1.5.0-alpha05

6 kwietnia 2022 roku

Funkcje androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05androidx.fragment:fragment-testing:1.5.0-alpha05 są dostępne. Wersja 1.5.0-alpha05 zawiera te commity.

Zmiany w interfejsie API

  • Parametr setHasOptionsMenu() w konfiguracji Fragment został wycofany. Aby zarządzać menu i ich elementami, należy używać nowych interfejsów API menu zgodnie z opisem w notatkach do wersji Fragmenta1.5.0-alpha04. (I7b4b4, b/226438239)

Wersja 1.5.0-alpha04

23 marca 2022 r.

Funkcje androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04androidx.fragment:fragment-testing:1.5.0-alpha04 są dostępne. Wersja 1.5.0-alpha04 zawiera te commity.

Zmiany w interfejsie API

  • Interfejsy API fragmentu, które umożliwiają wyświetlanie menu w aktywności ActionBar, zostały wycofane, ponieważ ściśle łączą fragment z aktywizacją i nie można ich testować osobno. Interfejsy API MenuHostMenuProvider dodane w Activity 1.4.0-alpha01 stanowią testowalny interfejs API o odpowiednich właściwościach cyklu życia, którego fragmenty powinny używać. (I50a59, I20758)

Poprawki błędów

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

Wersja 1.5.0-alpha03

23 lutego 2022 r.

Funkcje androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03androidx.fragment:fragment-testing:1.5.0-alpha03 są dostępne. Wersja 1.5.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Możesz teraz przekazywać wartość CreationExtras do funkcji by viewModels()by activityViewModels(). (Ibefe7, b/217601110)

Zmiany w zachowaniu

Wersja 1.5.0-alpha02

9 lutego 2022 r.

Funkcje androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02androidx.fragment:fragment-testing:1.5.0-alpha02 są dostępne. Wersja 1.5.0-alpha02 zawiera te commity.

Nowe funkcje

  • FragmentStrictMode umożliwia teraz prywatnym fragmentom kodu zewnętrznego omijanie określonych kar za naruszenie zasad za pomocą allowViolation() z nazwą klasy. (I8f678)

Wersja 1.5.0-alpha01

26 stycznia 2022 r.

Funkcje androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01androidx.fragment:fragment-testing:1.5.0-alpha01 są dostępne. Wersja 1.5.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Fragment 1.4.1: FragmentContainerView nie generuje już wyjątku dotyczącego nieprawidłowego stanu, gdy identyfikatory widoku wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • Fragment 1.4.1: jeśli używasz niestandardowej funkcji lambda ownerProducer z funkcją by viewModels() o opóźnionym działaniu, będzie ona teraz używać funkcji defaultViewModelProviderFactory tego właściciela, jeśli nie zostanie podana niestandardowa funkcja ViewModelProvider.Factory, zamiast zawsze używać fabryki fragmentu. (I56170, b/214106513)
  • Naprawiono błąd powodujący awarię podczas pierwszego dostępu do ViewModel z poziomu wywołania zwrotnego registerForActivityResult() z poziomu Fragment. (Iea2b3)

Wersja 1.4

Wersja 1.4.1

26 stycznia 2022 r.

Funkcje androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1androidx.fragment:fragment-testing:1.4.1 są dostępne. Wersja 1.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja FragmentContainerView nie powoduje już wyjątku nieprawidłowego stanu, gdy identyfikatory widoku wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • Jeśli używasz niestandardowej funkcji ownerProducer lambda z funkcją by viewModels() opóźnionego uruchamiania, będzie ona teraz używać funkcji defaultViewModelProviderFactory tego właściciela, jeśli nie zostanie podana niestandardowa funkcja ViewModelProvider.Factory, zamiast zawsze używać fabryki fragmentu. (I56170, b/214106513)

Wersja 1.4.0

17 listopada 2021 r.

Funkcje androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0androidx.fragment:fragment-testing:1.4.0 są dostępne. Wersja 1.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.3.0

  • Interfejsy API FragmentStrictMode zapewniają sprawdzanie w czasie wykonywania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy aplikacja, nie wywołują przestarzałych fragmentów interfejsu API. Gdy wykryjesz naruszenie, możesz wydrukować komunikat z dziennika, wywołać własny niestandardowy odbiornik lub spowodować awarię aplikacji. FragmentStrictMode.Policy, który kontroluje, jakie kontrole są włączone i jakie „sankcje” są wywoływane, można ustawić w FragmentManager za pomocą nowej metody setStrictModePolicy(). Ta zasada dotyczy FragmentManager i w drodze dojścia do wszystkich podrzędnych menedżerów fragmentów, które nie mają własnych zasad. Zobacz Tryb ścisły w przypadku fragmentów.
  • Obiekt FragmentContainerView udostępnia teraz metodę getFragment(), która zwraca fragment ostatnio dodany do kontenera. Ta funkcja korzysta z tej samej logiki co findFragmentById() z identyfikatorem FragmentContainerView, ale umożliwia łańcuchowe wywoływanie.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario implementuje teraz Closeable, co pozwala używać go z metodą use w Kotlinie lub z try-with-resources.

  • Dodano FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}możliwość określenia, czy w przejściu Fragmentów ma być włączona standardowa animacja przejścia z aktywności pochodząca z motywu.

  • Eksperymentalny interfejs API usługi FragmentManager.enableNewStateManager(boolean) został usunięty, a nowy menedżer stanu jest teraz jedyną dostępną opcją.

Wiele ścieżek wstecznych

FragmentManager zarządza stosem odtwarzania, który składa się z transakcji fragmentów, które używają addToBackStack(). Umożliwia to odtworzenie tych transakcji i powrót do poprzedniego stanu za pomocą mechanizmów zapisu stanu za pomocą fragmentów, aby umożliwić fragmentom przywrócenie odpowiedniego stanu.

Ta wersja rozszerza te mechanizmy o 3 nowe interfejsy API FragmentManager: saveBackStack(String name), restoreBackStack(String name)clearBackStack(String name). Te interfejsy API używają tego samego name co addToBackStack(), aby zapisać stan FragmentTransaction i stan każdego fragmentu dodanego w tych transakcjach. Pozwalają też później przywrócić te transakcje i ich fragmenty wraz z ich stanem. Dzięki temu możesz skutecznie „przełączać się” między wieloma stosami odwołania, zapisując bieżący stos odwołania i przywracając zapisany stos odwołania.

saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczny i powoduje odwrócenie wszystkich transakcji fragmentów z powrotem do tej konkretnej nazwy (pop) oraz usunięcie wszystkich dodanych fragmentów, ale różni się od niego w kilku ważnych aspektach:

  • saveBackStack() jest zawsze uwzględniana.
  • W przeciwieństwie do funkcji popBackStack(), która powoduje wczytanie wszystkich transakcji z poprzedniego zbioru, jeśli nie znajdzie się w nim określonej nazwy lub jeśli podana zostanie wartość null, funkcja saveBackStack() nie robi nic, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą funkcji addToBackStack() z tą samą, niepustą nazwą.
  • Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest przechowywany, wywoływana jest funkcja onSaveInstanceState() każdego fragmentu, a stan jest przywracany, a wszystkie wystąpienia ViewModel powiązane z tymi fragmentami są zatrzymywane (i nie jest wywoływana funkcja onCleared()).

Transakcje fragmentów, które można stosować z użyciem funkcji saveBackStack(), muszą spełniać określone kryteria:

  • Każda transakcja fragmentu musi używać wartości setReorderingAllowed(true), aby zapewnić możliwość przywracania transakcji jako pojedynczej operacji atomowej.
  • Zapisane transakcje muszą być niezależne (czyli nie mogą się odwoływać do fragmentów spoza tego zbioru transakcji), aby można je było przywrócić w dowolnym momencie, niezależnie od tego, jakie zmiany zostały wprowadzone w międzyczasie w zbiorze transakcji.
  • Żaden zapisany fragment nie może być zachowanym fragmentem ani zawierać takiego fragmentu w swoim zbiorze elementów podrzędnych, aby FragmentManager nie zwracał żadnych odwołań do zapisanych fragmentów po zapisaniu stosu wstecz.

Podobnie jak funkcje saveBackStack(), restoreBackStack()clearBackStack(), które przywracają odpowiednio wcześniej zapisany stos lub go oczyszczają, obie te funkcje nie robią nic, jeśli nie wywołano wcześniej funkcji saveBackStack() o tej samej nazwie.

Więcej informacji znajdziesz w artykule Wiele ścieżek wstecznych: szczegółowe informacje.

Wersja 1.4.0-rc01

3 listopada 2021 r.

androidx.fragment:fragment:1.4.0-rc01 została wydana bez zmian w stosunku do wersji Fragment 1.4.0-beta01. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.

Wersja 1.4.0-beta01

27 października 2021 roku

Funkcje androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01androidx.fragment:fragment-testing:1.4.0-beta01 są dostępne. Wersja 1.4.0-beta01 zawiera te commity.

Poprawki błędów

  • Fragmenty nadrzędne będą teraz wysyłać onHiddenChanged() do całej hierarchii, zanim uruchomią własne wywołania zwrotne. (Iedc20, b/77504618)
  • Klawiatura będzie się teraz automatycznie zamykać, gdy przechodzisz z fragmentu z otwartą klawiaturą do fragmentu z widokiem recyclera. (I8b842, b/196852211)
  • Usługa DialogFragment używa teraz elementu setReorderingAllowed(true) do wszystkich transakcji, które tworzy po wywołaniu funkcji show(), showNow() lub dismiss(). (Ie2c14)
  • Niezwykle długie ostrzeżenie lintera DetachAndAttachFragmentInSameFragmentTransaction zostało skrócone do DetachAndAttachSameFragment. (e9eca3)

Wersja 1.4.0-alpha10

29 września 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10androidx.fragment:fragment-testing:1.4.0-alpha10 są dostępne. Wersja 1.4.0-alpha10 zawiera te commity.

Lint

  • Dodano ostrzeżenie DetachAndAttachFragmentInSameFragmentTransaction w lint, które ostrzega o wywoływaniu funkcji detach()attach() w tej samej Fragment w tej samej FragmentTransaction. Te uzupełniające się operacje wzajemnie się wykluczają, gdy są wykonywane w tej samej transakcji, więc aby coś zrobić, należy je rozdzielić na osobne transakcje. (aosp/1832956, b/200867930)
  • Dodano błąd lint FragmentAddMenuProvider, aby poprawić użycie FragmentLifecycle w FragmentViewLifecycle podczas korzystania z interfejsu addMenuProviderMenuHost. (aosp/1830457, b/200326272)

Aktualizacje dokumentacji

  • Komunikat o wycofaniu interfejsów API, które są teraz obsługiwane przez interfejsy Activity API (startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions i onRequestPermissionsResult), został rozszerzony o więcej szczegółów. (cce80f)
  • Komunikat o wycofaniu funkcji onActivityCreated() w przypadku zarówno Fragment, jak i DialogFragment został rozszerzony o więcej szczegółów. (224db4)

Wersja 1.4.0-alpha09

15 września 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09androidx.fragment:fragment-testing:1.4.0-alpha09 są dostępne. Wersja 1.4.0-alpha09 zawiera te commity.

Nowe funkcje

  • Możesz teraz wywołać clearBackStack(name), aby wykasować stan zapisany wcześniej za pomocą saveBackStack(name). (I70cd7)

Zmiany w interfejsie API

  • Klasa FragmentContainerView została przepisana w języku Kotlin, aby zapewnić prawidłowe uwzględnianie przez funkcję getFragment możliwości braku wartości. (If694a, b/189629145)
  • FragmentStrictMode jest teraz napisany w Kotlinie (I11767, b/199183506)

Poprawki błędów

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

Wersja 1.4.0-alpha08

1 września 2021 roku

Funkcje androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08androidx.fragment:fragment-testing:1.4.0-alpha08 są dostępne. Wersja 1.4.0-alpha08 zawiera te commity.

Poprawki błędów

  • Ulepszyliśmy sprawdzanie Lint w UseRequireInsteadOfGet, aby lepiej obsługiwać zbędne nawiasy. (I2d865)
  • Ulepszyliśmy sprawdzanie Lint UseGetLayoutInflater, aby uwzględnić dodatkowe przypadki szczególne. (Ie5423)

Wersja 1.4.0-alpha07

18 sierpnia 2021 r.

Usługi androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 i androidx.fragment:fragment-testing:1.4.0-alpha07 są publikowane bez istotnych zmian. Wersja 1.4.0-alpha07 zawiera te komisy.

Wersja 1.4.0-alpha06

4 sierpnia 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06androidx.fragment:fragment-testing:1.4.0-alpha06 są dostępne. Wersja 1.4.0-alpha06 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z wieloma stosami przy szybkim przełączaniu się między nimi. Podczas przywracania IllegalStateException pojawiał się IllegalStateException lub druga kopia fragmentu.FragmentTransaction (I9039f)
  • Rozwiązaliśmy problem polegający na tym, że FragmentManager zachowywało kopię stanu zapisanego wcześniej za pomocą saveBackStack() nawet po przywróceniu tego stanu. (Ied212)
  • Metoda dismissAllowingStateLoss() klasy DialogFragment nie ulega już awarii, gdy wywołasz ją po zapisaniu stanu podczas dodawania fragmentu dialogu za pomocą metody show(FragmentTransaction, String). (I84422)

Wersja 1.4.0-alpha05

21 lipca 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05androidx.fragment:fragment-testing:1.4.0-alpha05 są dostępne. Wersja 1.4.0-alpha05 zawiera te commity.

Poprawki błędów

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

Aktualizacja zależności

Wersja 1.4.0-alpha04

30 czerwca 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04androidx.fragment:fragment-testing:1.4.0-alpha04 są dostępne. Wersja 1.4.0-alpha04 zawiera te commity.

Zmiany w interfejsie API

  • FragmentManager używa teraz SavedStateRegistry, aby zapisywać stan. Metody saveAllState()restoreSavedState() zostały też wycofane w funkcji FragmentController. Jeśli używasz FragmentController do hostowania fragmentów poza FragmentActivity, musisz zaimplementować FragmentHostCallbacks w SavedStateRegistryOwner. (Iba68e, b/188734238)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował niepowodzenie wywołania funkcji saveBackStack() w ramach obsługi wielu podzbiorów, gdy było wykonywane jednocześnie z wykonywaniem funkcji FragmentTransaction, która używała funkcji replace(). (I73137)
  • Naprawiono błąd NullPointerException, który występował po ręcznym przywróceniu zapisanego zbioru danych z wieloma transakcjami podczas korzystania z interfejsu API restoreBackStack() do obsługi wielu zbiorów danych. Rozwiązaliśmy też problem polegający na tym, że w przypadku niektórych transakcji nie był sprawdzany parametr setReorderingAllowed(true). (I8c593)
  • Rozwiązaliśmy problem polegający na tym, że FragmentManager nieprawidłowo przywracała wcześniej zapisany stan fragmentów nawet po ich usunięciu z FragmentManager, co powodowało, że zapisany stan stale się powiększał. (I1fb8e)

Wersja 1.4.0-alpha03

16 czerwca 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03androidx.fragment:fragment-testing:1.4.0-alpha03 są dostępne. Wersja 1.4.0-alpha03 zawiera te commity.

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)
    • Plik FragmentTagUsageViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera kontener nadrzędny, do którego miał zostać dodany fragment. (Ic33a7)
    • WrongFragmentContainerViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera informacje o kontenerze, do którego dodano fragment. (Ib55f8)
    • Klasy przypadków użycia w usłudze TargetFragmentUsageViolationzawierają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie oraz inne informacje. (Icc6ac)
    • Klasy rozszerzające RetainInstanceUsageViolation mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment kodu powodujący naruszenie. (I6bd55)
    • FragmentReuseViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera poprzedni identyfikator fragmentu. (I28ce2)
    • SetUserVisibleHintViolation ma teraz bardziej szczegółowy komunikat o błędzie, który zawiera informacje o tym, jaką wartość miał widoczny dla użytkownika podpowiedź. (Ib2d5f)

Zmiany w zachowaniu

  • Przywrócono ograniczenie wywoływania funkcji fitsSystemWindows w funkcji FragmentContainerView – aplikacja nie będzie się już zawieszać. (6b8ddd, b/190622202)

Poprawki błędów

  • Z Fragmentu 1.3.5: rozwiązano regresję w przejściach elementów współdzielonych wprowadzoną w Fragment 1.3.4 przez aosp/1679887. Fragmenty poprawnie obsługują teraz grupy przejść (ustawione bezpośrednio za pomocą elementu transitionGroup="true" lub pośrednio za pomocą elementu transitionName lub background), a elementy współdzielone nie będą już wywoływać błędu IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)
  • FragmentManager nie będzie się już zawieszać, gdy spróbujesz ukryć fragment do usunięcia. (I573dd, b/183634730)
  • Sprawdzanie poprawności kodu OnCreateDialogIncorrectCallback nie będzie się już zawieszać podczas sprawdzania zmiennej najwyższego poziomu. (0a9efa, b/189967522)

Wersja 1.4.0-alpha02

2 czerwca 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02androidx.fragment:fragment-testing:1.4.0-alpha02 są dostępne. Wersja 1.4.0-alpha02 zawiera te commity.

Nowe funkcje

  • Jeśli rejestrowanie jest włączone za pomocą FragmentManager, FragmentStrictMode będzie zawsze rejestrować naruszenia niezależnie od używanej obecnie zasady dotyczącej trybu ścisłego. (I02df6, b/187872638)
  • FragmentStrictMode obsługuje teraz wykluczanie poszczególnych zajęć Fragment z trybu rygorystycznego Violation, co pozwala na pominięcie kar. (Ib4e5d, b/184786736)

  • Klasa FragmentStrictMode Violation została rozszerzona o informacje strukturalne na podstawie każdego naruszenia. Dzięki temu możesz sprawdzić, co dokładnie spowodowało naruszenie, oraz fragment kodu, który je spowodował (If5118, b/187871150). Każdy element Violation zawiera:

    • Plik WrongFragmentContainerViolation zawiera teraz ViewGroup, który próbował dodać plik Fragment. (I83c75, b/187871150)
    • TargetFragmentUsageViolation została rozwinięta do SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolationGetTargetFragmentRequestCodeUsageViolation, a fragment docelowy i kod żądania znajdują się w pliku SetTargetFragmentUsageViolation. (I741b4, b/187871150)
    • Argument SetUserVisibleHintViolation zawiera teraz wartość logiczną przekazaną do argumentu setUserVisibleHint(). (I00585, b/187871150)
    • Element FragmentTagUsageViolation zawiera teraz ViewGroup, do którego tag <fragment> próbował wczytać fragment.(I5dbbc, b/187871150)
    • FragmentReuseViolation zawiera teraz unikalny identyfikator poprzedniej instancji elementu Fragment, który spowodował naruszenie. (I0544d, b/187871150)
    • Klasa RetainInstanceUsageViolation jest teraz abstrakcyjna i ma 2 podklasy: SetRetainInstanceUsageViolation i GetRetainInstanceUsageViolation, które reprezentują 2 przypadki typu naruszenia. (Ic81e5, b/187871150)

Zmiany w zachowaniu

  • Funkcja FragmentContainerView zwraca teraz wyjątek, gdy próbujesz zmienić atrybut fitsSystemWindow programowo lub za pomocą kodu XML. Wstawki powinny być obsługiwane przez widok każdego pojedynczego fragmentu. (Ie6651, b/187304502)

Wersja 1.4.0-alpha01

18 maja 2021 r.

Funkcje androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01androidx.fragment:fragment-testing:1.4.0-alpha01 są dostępne. Wersja 1.4.0-alpha01 zawiera te commity.

Nowe funkcje

  • Obiekt FragmentContainerView udostępnia teraz metodę getFragment(), która zwraca fragment ostatnio dodany do kontenera. Ta funkcja korzysta z tej samej logiki co findFragmentById() z identyfikatorem FragmentContainerView, ale umożliwia łańcuchowe wywoływanie. (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • Dodano FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}możliwość określenia, czy w przejściu Fragmentów ma być włączona standardowa animacja przejścia z aktywności pochodząca z motywu. (I46652)

Wiele ścieżek wstecznych

FragmentManager zarządza stosem odtwarzania, który składa się z transakcji fragmentów, które używają addToBackStack(). Umożliwia to odtworzenie tych transakcji i powrót do poprzedniego stanu za pomocą mechanizmów zapisywania stanu za pomocą fragmentów, aby umożliwić fragmentom przywrócenie odpowiedniego stanu.

W tej wersji udostępniamy 2 nowe interfejsy API FragmentManager: saveBackStack(String name)restoreBackStack(String name). Te interfejsy API używają tego samego name co addToBackStack(), aby zapisać stan FragmentTransaction i stan każdego fragmentu dodanego w ramach tych transakcji. Pozwalają też później przywrócić te transakcje i ich fragmenty wraz z ich stanem. Dzięki temu możesz skutecznie „przełączać się” między wieloma stosami odwołania, zapisując bieżący stos odwołania i przywracając zapisany stos odwołania.

saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczny i powoduje odwrócenie wszystkich transakcji fragmentów z powrotem do tej konkretnej nazwy (pop) oraz usunięcie wszystkich dodanych fragmentów, ale różni się od niego w kilku ważnych aspektach:

  • saveBackStack() jest zawsze uwzględniana.
  • W przeciwieństwie do funkcji popBackStack(), która powoduje wczytanie wszystkich transakcji z poprzedniego zbioru, jeśli nie znajdzie się w nim określonej nazwy lub jeśli podana zostanie wartość null, funkcja saveBackStack() nie robi nic, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą funkcji addToBackStack() z tą samą, niepustą nazwą.
  • Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest przechowywany, wywoływana jest funkcja onSaveInstanceState() każdego fragmentu, a stan jest przywracany, a wszystkie wystąpienia ViewModel powiązane z tymi fragmentami są zatrzymywane (i nie jest wywoływana funkcja onCleared()).

Transakcje fragmentów, które można stosować z użyciem funkcji saveBackStack(), muszą spełniać określone kryteria:

  • Każda transakcja fragmentu musi używać wartości setReorderingAllowed(true), aby można było przywrócić transakcje jako pojedynczą operację atomową.
  • Zapisane transakcje muszą być niezależne (czyli nie mogą się odwoływać do fragmentów spoza tego zbioru transakcji), aby można je było przywrócić w dowolnym momencie, niezależnie od tego, jakie zmiany zostały wprowadzone w międzyczasie w zbiorze transakcji.
  • Żaden zapisany fragment nie może być zachowanym fragmentem ani zawierać takiego fragmentu w swoim zbiorze elementów podrzędnych, aby FragmentManager nie zwracał żadnych odwołań do zapisanych fragmentów po zapisaniu stosu wstecz.

Podobnie jak w przypadku polecenia saveBackStack() polecenie restoreBackStack() nie powoduje żadnej reakcji, jeśli nie było wcześniej wywoływane z tym samym parametrem.saveBackStack() (b/80029773)

Fragment StrictMode

Interfejsy API FragmentStrictMode zapewniają sprawdzanie w czasie wykonywania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy Twoja aplikacja, nie wywołują przestarzałych fragmentów interfejsu API. Gdy wykryjesz naruszenie, możesz wydrukować komunikat z dziennika, wywołać własny niestandardowy odbiornik lub spowodować awarię aplikacji. FragmentStrictMode.Policy, który kontroluje, jakie kontrole są włączone i jakie „sankcje” są wywoływane, można ustawić w FragmentManager za pomocą nowej metody setStrictModePolicy(). Ta zasada dotyczy FragmentManager i w drodze transitivej wszystkich podrzędnych menedżerów fragmentów, które nie mają własnych zasad. (#123, #131, #150, b/143774122)

  • detectFragmentReuse() wykrywa, czy do FragmentManager ponownie dodano Fragment, który został wcześniej usunięty. Po zniszczeniu i usunięciu wystąpienia FragmentFragmentManager nie należy wchodzić z nim w interakcję ani przechowywać odwołania do niego. (#142, b/153738653)
  • detectFragmentTagUsage() wykryje, kiedy używasz tagu <fragment> w pliku XML układu. Podczas napełniania fragmentów w ramach układu zawsze używaj FragmentContainerView. (#141, b/153738235)
  • detectWrongFragmentContainer() wykrywa, kiedy dodasz do kontenera fragment, który nie jest FragmentContainerView. W swoim układzie zawsze używaj elementu FragmentContainerView jako kontenera fragmentów. (#146, b/181137036)
  • detectRetainInstanceUsage() wykryje, kiedy używasz wycofanych interfejsów API setRetainInstance() lub getRetainInstance(). (#140, b/153737954)
  • detectSetUserVisibleHint() wykryje, kiedy używasz wycofanego interfejsu API setUserVisibleHint(). (#136, b/153738974)
  • detectTargetFragmentUsage() wykryje, gdy używasz wycofanych interfejsów API setTargetFragment(), getTargetFragment() lub getTargetRequestCode(). (#139, b/153737745)

Zmiany w interfejsie API

Nowe kontrole Lint

  • UseGetLayoutInflatersprawdzanie Lint teraz ostrzega, gdy używasz LayoutInflater.from(Context) w ramach DialogFragment – zawsze używaj metody getLayoutInflater() fragmentu dialogu, aby uzyskać odpowiednią wartość dla LayoutInflater. (#156, b/170781346)
  • Lincz DialogFragmentCallbacksDetector ostrzega teraz, gdy wywołujesz metodę setOnCancelListener lub setOnDismissListener w metodie onCreateDialog() obiektu DialogFragment – te słuchacze należą do samego obiektu DialogFragment i aby otrzymywać te wywołania zwrotne, musisz zastąpić metody onCancel()onDismiss(). (#171, b/181780047, b/187524311)

Poprawki błędów

  • Od wersji Fragment 1.3.4: rozwiązano problem regresji wprowadzony w wersji Fragment 1.3.3 podczas używania interfejsu ViewTreeViewModelStoreOwner.get() API z ViewModelProvider lub metody Jetpack Compose viewModel() w Fragment. Te przypadki użycia teraz prawidłowo używają wartości ViewModelProvider.Factory podanej przez Twój fragment, jeśli zastępuje on wartość getDefaultViewModelProviderFactory() (jak to robią adnotowane fragmenty @AndroidEntryPoint przy użyciu Hilt). Jeśli nie zastąpisz tej metody, jako domyślna metoda fabryczna zostanie utworzona metoda SavedStateViewModelFactory, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Fragmentu 1.3.4: gdy używasz interfejsu API 29, w przypadku FragmentContainerView nie będzie już wysyłać wstawek przez nieokreślony czas. Rozwiązano w ten sposób problemy z instancjami BottomNavigationBarFloatingActionButton. (I1bb78, b/186012452)
  • Od Androida 1.3.4: teraz możesz pobrać obiekt Parcelable z paczki wyników fragmentu po zakończeniu działania procesu. (I65932, b/187443158)
  • Fragmentu 1.3.4: podczas przejścia elementu współdzielonego w ViewGroup, jeśli w ViewGroup parametr transitionGroup ma wartość fałsz, przejście zostanie teraz wykonane prawidłowo. (I99675)

Darowizna zewnętrzna

Wersja 1.3

Wersja 1.3.6

21 lipca 2021 r.

Funkcje androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6androidx.fragment:fragment-testing:1.3.6 są dostępne. Wersja 1.3.6 zawiera te commity.

Poprawki błędów

  • Fragment 1.4.0-alpha03: FragmentManager nie będzie się już zawieszać, gdy spróbujesz ukryć fragment do usunięcia. (I573dd, b/183634730)
  • Widok fragmentu jest teraz prawidłowo ustawiony na GONE, gdy używasz hide(), a widok wyższy ma ustawioną wartość transitionGroup=”true”. (aosp/1766655, b/193603427)
  • FragmentActivity zawsze odblokowuje zapisany stan jako pierwszą operację w zastąpionych przez niego wywołaniach cyklu życia. (I6db7a)

Aktualizacja zależności

Wersja 1.3.5

16 czerwca 2021 r.

Funkcje androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5androidx.fragment:fragment-testing:1.3.5 są dostępne. Wersja 1.3.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono regresję w przypadku przejść elementów współdzielonych wprowadzonych w Fragment 1.3.4 przez aosp/1679887. Fragmenty poprawnie obsługują teraz grupy przejść (ustawione bezpośrednio za pomocą elementu transitionGroup="true" lub pośrednio za pomocą elementu transitionName lub background), a elementy współdzielone nie będą już wywoływać błędu IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)

Wersja 1.3.4

18 maja 2021 r.

Funkcje androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4androidx.fragment:fragment-testing:1.3.4 są dostępne. Wersja 1.3.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono regresję wprowadzoną w Fragment 1.3.3 podczas używania interfejsu API ViewTreeViewModelStoreOwner.get()ViewModelProvider lub metody Jetpack Compose viewModel() wewnątrz Fragmentu przy użyciu Hilt. W tych przypadkach ViewModelProvider.Factory jest teraz prawidłowo używane w fragmentach, jeśli zastępuje ono getDefaultViewModelProviderFactory() (jak w przypadku adnotowanych fragmentów z @AndroidEntryPoint). Jeśli nie zastąpisz tej metody, jako domyślna metoda fabryczna zostanie utworzona metoda SavedStateViewModelFactory, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Gdy używasz FragmentContainerView w interfejsie API 29, wstawki nie będą już wysyłane w nieskończoność. Rozwiązano w ten sposób problemy z instancjami BottomNavigationBarFloatingActionButton. (I1bb78, b/186012452)
  • Teraz możesz pobrać obiekt Parcelable z paczki wyników fragmentu po zakończeniu działania procesu. (I65932, b/187443158)
  • Podczas przejścia z elementu udostępnionego do ViewGroup, jeśli w ViewGroup ustawisz wartość transitionGroup na „fałsz”, przejście będzie teraz prawidłowe. (I99675)

Wersja 1.3.3

21 kwietnia 2021 r.

Funkcje androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3androidx.fragment:fragment-testing:1.3.3 są dostępne. Wersja 1.3.3 zawiera te zatwierdzenia.

Nowe funkcje

  • Funkcja SavedStateViewModelFactory działa teraz, gdy jest używana z wartością SavedStateRegistryOwner zwracaną przez funkcję ViewTreeSavedStateRegistryOwner.get() w ramach widoku fragmentu. (I21acf, b/181577191)

Poprawki błędów

  • Naprawiono regresję wprowadzoną w Fragment 1.3.2, która powodowała, że animacje popEnter nie były uruchamiane podczas wyjmowania FragmentTransaction, które zawierało operację setPrimaryNavFragment, taką jak te używane przez NavHostFragment. (I38c87, b/183877426)
  • FragmentContainerView zapewnia teraz, że każdy Fragment otrzymuje nowy zestaw WindowInsets, dzięki czemu każdy fragment może niezależnie korzystać z wstawek. (I63f68, b/172153900)
  • DialogFragment obsługuje teraz prawidłowo przypadki, w których do kontenera o tym samym identyfikatorze co kontener w klasie niestandardowej Dialog dodawany jest fragment podrzędny. Dzięki temu rozwiązano problemy z hierarchią widoku podczas ponownego używania identyfikatorów używanych wewnętrznie przez takie dialogi jak BottomSheetDialog. (Ie6279, b/180021387)
  • FragmentManager.dump() teraz prawidłowo wciska pierwszy fragment na liście aktywnych fragmentów. (If5c33, b/183705451)

Poprawki błędów w Menedżerze stanu

  • Nowy menedżer stanu fragmentu obsługuje teraz prawidłowo przejścia z wyjściem z użyciem operacji ukrywania. (I9e4de, b/184830265)

Wersja 1.3.2

24 marca 2021 r.

Funkcje androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2androidx.fragment:fragment-testing:1.3.2 są dostępne. Wersja 1.3.2 zawiera te zatwierdzenia.

Poprawki błędów w Menedżerze stanu

  • Gdy obie operacje (popBackStack()commit()) są wykonywane jednocześnie, ostatnia z nich będzie teraz określać kierunek wszystkich animacji, a nie tylko animacji otwierania i zamykania. (I7072e, b/181142246)
  • Podczas przejścia w elementie współdzielonym nazwa przejścia nie będzie już usuwana z widoków w hierarchii elementu współdzielonego. (I4d4a6, b/179934757)

Aktualizacje zależności

  • Fragment zależy teraz od Activity 1.2.2, co rozwiązuje problem z sprawdzaniem lint InvalidFragmentVersionForActivityResult w Activity przy użyciu Fragment 1.3.1 lub nowszej wersji.
  • Fragment jest teraz zależny od Lifecycle 2.3.1.

Wersja 1.3.1

10 marca 2021 r.

Funkcje androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1androidx.fragment:fragment-testing:1.3.1 są dostępne. Wersja 1.3.1 zawiera te zatwierdzenia.

Nowe funkcje

  • Dialogi w DialogFragment mogą teraz uzyskać dostęp do właścicieli ViewTree za pomocą DecorView, co umożliwia korzystanie z DialogFragment w ramach ComposeView. (Ib9290, b/180691023)

Poprawki błędów

  • Fragmenty wczytane do aktywności RESUMED za pomocą FragmentContainerView są teraz prawidłowo wyświetlane po zmianie konfiguracji. (Ie14c8, b/180538371)
  • Usunięto dodatkowy element } na końcu fragmentu toString() (I54705, b/177761088)
  • Przesłonięte metody w FragmentActivity dziedziczą teraz prawidłowo metodę podstawową javaDoc (I736ce, b/139548782).
  • Dokumentacja funkcji setFragmentResultsetFragmentResultListener została zaktualizowana, aby odzwierciedlić fakt, że nie akceptują one już typów nullable (I990ba, b/178348386).

Poprawki błędów w Menedżerze stanu

  • Naprawiono wyciek pamięci w fragmentach spowodowany przez mFocusedView (Ib4e9e, b/179925887)
  • Fragmenty wywołują teraz poprawnie funkcję onCreateOptionsMenu podczas wyświetlania lub ukrywania transakcji (I8bce8, b/180255554).
  • Fragmenty podrzędne z przechodzeniem, które zaczyna się przed ich rozmieszczeniem, będą teraz prawidłowo docierać do RESUMED (Ic11e6, b/180825150)
  • Fragmenty napompowane 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.

Funkcje androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0androidx.fragment:fragment-testing:1.3.0 są dostępne. Wersja 1.3.0 zawiera te zatwierdzenia.

Najważniejsze zmiany od wersji 1.2.0

  • Nowy menedżer stanu: znaczące przepisanie kodu wewnętrznegoFragmentManager rozwiązało wiele problemów związanych z wysyłaniem zdarzeń cyklu życia, animacji i przejść oraz sposobem obsługi opóźnionych fragmentów.
  • Integracja z interfejsem API Activity Result: dodano obsługę interfejsu ActivityResultRegistry API wprowadzonego w Akcji 1.2.0, aby obsługiwać przepływy startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() bez zastępowania metod w Twoim fragmencie oraz aby udostępnić uchwyty do testowania tych przepływów. Zapoznaj się z aktualnymi informacjami na temat wyników aktywności.

    • W tej wersji rozwiązaliśmy kilka problemów związanych z nieprawidłowymi kodami żądań i wysyłaniem próśb o przyznanie uprawnień, które uniemożliwiały działanie interfejsu Activity Result API w poprzednich wersjach FragmentActivity. Aby korzystać z interfejsów API ActivityResult w komponencie FragmentActivity lub AppCompatActivity, musisz uaktualnić Fragment do wersji 1.3.0.
  • Interfejs API wyników fragmentu: dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w FragmentManager. Funkcja ta działa w przypadku fragmentów hierarchii (rodzica/dziecka), fragmentów DialogFragments i fragmentów w Nawigacji. Zapewnia, że wyniki są wysyłane tylko do Twojego Fragmentu, gdy jest on co najmniej w stanie STARTED. Interfejsy API docelowego fragmentu zostały wycofane na rzecz nowych interfejsów API. Zobacz Pobieranie wyników za pomocą interfejsu Fragment Result API.

  • FragmentOnAttachListener: wywołanie zwrotne onAttachFragment() w metodach FragmentActivityFragment zostało wycofane. Dodano nową metodę FragmentOnAttachListener, która zapewnia bardziej elastyczną alternatywę, umożliwiającą delegowanie onAttachFragment() do oddzielnych, testowalnych obiektów nasłuchujących, a także obsługę dodawania obiektu nasłuchującego do obiektów FragmentManager innych niż bezpośrednio podrzędne.

  • Ulepszenia FragmentScenario: klasa FragmentScenario z elementu fragment-testing została przepisana w języku Kotlin i otrzymała kilka ulepszeń:

    • FragmentScenario używa teraz interfejsu setMaxLifecycle() do implementowania interfejsu moveToState(), co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od podstawowej aktywności.
    • FragmentScenario obsługuje teraz ustawianie początkowego Lifecycle.State, aby umożliwić potwierdzenie stanu fragmentu przed przejściem do każdego Lifecycle.State po raz pierwszy.
    • Teraz istnieje alternatywa dla interfejsu API FragmentScenario w komponencie onFragment w postaci metody rozszerzenia withFragment w języku Kotlin, która umożliwia zwracanie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku.
  • ViewTree Wsparcie: Fragment obsługuje teraz interfejsy API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View)ViewTreeSavedStateRegistryOwner dodane w Lifecycle 2.3.0SavedState 1.1.0, dzięki czemu zwraca fragment jako ViewModelStoreOwner oraz SavedStateRegistryOwnerLifecycleOwner powiązane z cyklem życia widoku fragmentu, gdy używasz ViewFragment.

  • Zmiany animacji TRANSIT_: domyślne efekty fragmentu, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE i TRANSIT_FRAGMENT_FADE, używają teraz Animator zamiast Animation. Zasoby użyte do tworzenia tych animacji są teraz prywatne.

  • Wycofanie setRetainInstance(): metoda setRetainInstance() w fragmentach została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do przechowywania stanu, który może być powiązany z aktywnościami, fragmentami i grafami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, niezachowywanego fragmentu i utrzymywać w oddzieleniu stan, który ma być zachowywany, unikając przy tym częstego źródła wycieków i zachowując przydatne właściwości pojedynczego tworzenia i usuwania zachowywanego stanu (czyli konstruktora ViewModel i otrzymywanego przez niego wywołania onCleared()).

  • Wycofanie adaptera ViewPager 1: wraz z wydaniem ViewPager 2 1.0.0 klasy FragmentPagerAdapterFragmentStatePagerAdapter służące do interakcji z ViewPager zostały wycofane. Zobacz Migracja z ViewPager do ViewPager2.

Wersja 1.3.0-rc02

27 stycznia 2021 r.

Funkcje androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02androidx.fragment:fragment-testing:1.3.0-rc02 są dostępne. Wersja 1.3.0-rc02 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że po zmianie konfiguracji element nadrzędny DialogFragment pojawiał się nad elementem podrzędnym DialogFragment. Teraz elementy podrzędne dialogu zawsze wyświetlają się nad elementem nadrzędnym. (I30806, b/177439520)
  • Rozwiązaliśmy problem polegający na tym, że wykonanie operacji hide na elemencie Animation powodowało miganie ukrywanego fragmentu na końcu animacji. (I57e22, b/175417675)
  • Fragmenty z przejściami dodanymi przed dołączeniem hierarchii widoku są teraz prawidłowo wyświetlane w RESUMED. (I1fc1d, b/177154873)

Poprawki błędów w Menedżerze stanu

  • Widok fragmentu Lifecycle poprawnie obsługuje teraz przypadki, gdy widok fragmentu jest usuwany, zanim Lifecycle dotrze do CREATED, co zapobiega wyjątkom z komunikatem „no event down from INITIALIZED” (eda2bd, b/176138645).
  • Fragmenty, które używają Animator, są teraz wyświetlane w prawidłowej kolejności podczas korzystania z FragmentContainerView. (Id9aa3, b/176089197)

Wersja 1.3.0-rc01

16 grudnia 2020 roku

Funkcje androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01androidx.fragment:fragment-testing:1.3.0-rc01 są dostępne. Wersja 1.3.0-rc01 zawiera te commity.

Poprawki błędów

  • Funkcja onPrepareOptionsMenu() działa teraz według tej samej logiki co funkcja onCreateOptionsMenu() i nie jest już wywoływana, gdy fragment nadrzędny wywołuje funkcję setMenuVisibility(false). (Id7de8, b/173203654)

Poprawki błędów w Menedżerze stanu

  • Rozwiązaliśmy problem z wyciekami i artefaktami wizualnymi podczas dodawania fragmentu z Animation do FragmentContainerView, a następnie przerywania tego dodawania operacją pop. (I952d8)
  • Rozwiązaliśmy problem, który powodował, że widok fragmentu pozostawał w hierarchii widoków, jeśli został zastąpiony podczas wykonywania metod onCreate() lub onViewCreated(). (I8a7d5)
  • Po wznowieniu widoków rdzeniowych fragmentów przywrócony jest teraz prawidłowo ich fokus. (Ifc84b)
  • Połączenie operacji pop i replace w ramach tej samej transakcji fragmentu spowoduje wyświetlenie prawidłowych animacji (Ifd4e4, b/170328691)

Wersja 1.3.0-beta02

2 grudnia 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02androidx.fragment:fragment-testing:1.3.0-beta02 są dostępne. Wersja 1.3.0-beta02 zawiera te commity.

Nowe funkcje

  • FragmentScenario został w pełni przekonwertowany na Kotlina przy zachowaniu zgodności z źródłem i binarzami dzięki zastosowaniu interfejsów funkcjonalnych Kotlina 1.4 w przypadku FragmentAction. (I19d31)

Zmiany w zachowaniu

  • FragmentContainerViews, które nie napełniają fragmentu za pomocą atrybutu class ani android:name, można teraz używać poza elementem FragmentActivity. (Id4397, b/172266337)
  • Próba ustawienia maksymalnego cyklu życia fragmentu na DESTROYED spowoduje teraz wyjątek IllegalArgumentException (Ie7651, b/170765622)
  • Inicjowanie FragmentScenario z stanem DESTROYED spowoduje teraz wyjątek IllegalArgumentException (I73590, b/170765622)

Poprawki błędów w Menedżerze stanu

  • Rozwiązaliśmy problem, który powodował, że widok nie osiągał swojego ostatecznego stanu, jeśli przerwano przejście fragmentu, które używało opcji Animator lub jednej z opcji TRANSIT_FRAGMENT_. (I92426, b/169874632)
  • Rozwiązaliśmy problem, który uniemożliwiał prawidłowe usunięcie fragmentów z wychodzącym Animation. (I83d65)
  • Fragmenty wyjścia, w których efekty są odwrócone, 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 działała funkcja wyjścia Animator w funkcji hide(). (Id7ffe)
  • Fragmenty są teraz prawidłowo wyświetlane, gdy są odroczone, a następnie natychmiast uruchomione. (Ie713b, b/170022857)
  • Fragmenty, które usuwają fokus z widoku podczas animacji, nie będą już próbowały przywrócić fokusu na oddzielonym widoku, gdy osiągną stan RESUMED (I38c65, b/172925703)

Darowizna zewnętrzna

  • FragmentFactory teraz przechowuje w pamięci podręcznej klasy fragmentów oddzielnie dla różnych instancji ClassLoader. Dziękuję, Simon Schiller. (#87, b/113886460)

Wersja 1.3.0-beta01

1 października 2020 roku

Funkcje androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01androidx.fragment:fragment-testing:1.3.0-beta01 są dostępne. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • setMaxLifecycle() obsługuje teraz ustawienie stanu Lifecycle na INITIALIZING, o ile fragment nie został przeniesiony do CREATED. (b/159662173)

Zmiany w interfejsie API

Zmiany w zachowaniu

  • Pliki zasobów fragmentów zostały prawidłowo ustawione jako prywatne. (aosp/1425237)

Poprawki błędów

  • Fragmenty utworzone za pomocą tagu <fragment> będą teraz prawidłowo czekać, aż ich widoki zostaną dodane do kontenera, zanim przejdą do stanu STARTED (I02f4c)
  • Fragmenty, które są widoczne, a potem setMaxLifecycle() do CREATED, teraz prawidłowo uruchamiają efekty wyjścia. (b/165822335)
  • Usunięcie oderwanego fragmentu, który nie został dodany do stosu wstecz, nie powoduje już wycieku pamięci. Zdjęcie udostępnione przez Nicklasa Ansmana Giertza. (b/166489383)
  • Aktywne fragmenty będą teraz zawsze zawierać niepustą wartość FragmentManager, a fragmenty z wartością niepustą FragmentManager będą zawsze uważane za aktywne. (aosp/1422346)
  • Domyślne efekty fragmentu, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE, używają teraz wartości Animator zamiast Animation. (b/166155034)

Poprawki błędów w Menedżerze stanu

  • Fragmenty teraz prawidłowo przywracają stan skupienia widoku tuż przed rozpoczęciem animacji. (Icc256)
  • Fragmenty, które mają tylko przejście z elementem współdzielonym, mają teraz prawidłowo dokończone efekty specjalne, co oznacza, że przechodzą do swojego ostatecznego stanu (Iaebc7, b/166658128)
  • Widoki fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876)
  • Nowy menedżer stanu konsekwentnie usuwa widok fragmentu przed dodaniem widoku wejścia. (I41a6e)
  • Nowy menedżer stanu uwzględnia teraz jawne zmiany widoczności widoku fragmentu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu wejściowego na INVISIBLE, pozostanie on niewidoczny. (b/164481490)
  • Fragmenty mają teraz priorytet Animators nad Animations, co oznacza, że fragment zawierający oba elementy będzie wykonywać tylko Animator i ignorować Animation. (b/167579557)
  • Nowy menedżer stanów nie powoduje już migania fragmentów podczas korzystania z animacji wchodzenia. (b/163084315)

Znany problem

Jeśli podczas korzystania z nowego menedżera stanów naciśniesz Wstecz zamiast wrócić do poprzedniego fragmentu, stary fragment nie zostanie ponownie dodany, co spowoduje pusty ekran. (b/167259187, b/167092035, b/168442830)

Wersja 1.3.0-alpha08

19 sierpnia 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08androidx.fragment:fragment-testing:1.3.0-alpha08 są dostępne. Wersja 1.3.0-alpha08 zawiera te commity.

Menedżer nowych stanów

Ta wersja zawiera dużą refaktoryzację wewnętrznego zarządzania stanem FragmentManager, która wpływa na wysyłanie metod cyklu życia, animacji i przechodów oraz sposób obsługi opóźnionych transakcji. Ta opcja jest domyślnie włączona. Więcej informacji znajdziesz w tym poście na blogu Fragments: Rebuilding the Internals. (b/139536619, b/147749580)

  • Aby określić, czy FragmentManager ma używać nowego menedżera stanu, możesz użyć eksperymentalnego interfejsu API w FragmentManager.enableNewStateManager(boolean). (I7b6ee)

Te problemy zostały rozwiązane tylko w przypadku korzystania z nowego menedżera stanu:

  • Poprzedni fragment operacji replace jest teraz prawidłowo zatrzymywany przed rozpoczęciem nowego fragmentu. (b/161654580)
  • Fragmenty zapobiegają teraz występowaniu na tych samych fragmentach wielu konkurencyjnych animacji, co pozwala uniknąć sytuacji, w której animacja Animation zastąpi wszystkie efekty Transition lub w której w poszczególnych fragmentach będą działać animacje AnimatorTransition. (b/149569323)
  • Teraz zamiast tylko ostatniego fragmentu wejścia i pierwszego fragmentu wyjścia są wykonywane enterTransitionexitTranstion wszystkich fragmentów wejścia i wyjścia. (b/149344150)
  • Odroczone fragmenty nie są już blokowane w stanie CREATED, lecz przechodzą do stanu STARTED wraz z innymi fragmentami. (b/129035555)
  • Rozwiązaliśmy problem, który powodował, że FragmentManager wykonywał operacje w nieprawidłowej kolejności, gdy mieszano opóźnioną transakcję z ponownym uporządkowaniem z transakcją bez ponownego uporządkowania. (b/147297731)
  • Wyświetlanie wielu fragmentów jednocześnie nie spowoduje już tymczasowego wyświetlenia fragmentów pośrednich podczas opóźniania fragmentów. (b/37140383)
  • Funkcja FragmentManager zwraca teraz prawidłowe fragmenty podczas wywoływania funkcji findFragmentById() lub findFragmentByTag() w ramach wywołania zwrotnego onAttachFragment(). (b/153082833)
  • Fragmenty nie wywołują już funkcji onCreateView() w przypadku fragmentów, które są usuwane, gdy fragment, który je zastępuje, jest opóźniony. (b/143915710)
  • Komunikat o błędzie, który pojawia się podczas próby połączenia instancji frameworka Transition i AndroidX Transition, zawiera teraz fragment z nieprawidłowym przejściem. (b/155574969)

Zmiany w zachowaniu

  • Teraz możesz wywołać metodę launch() w elementach ActivityResultLauncher w ramach metody cyklu życia onCreate() fragmentu. (b/161464278)
  • Wywołanie funkcji registerForActivityResult() po funkcji onCreate() powoduje teraz wyjątek wskazujący, że jest to niedozwolone, zamiast milcząco nie przekazywać wyników po zmianie konfiguracji. (b/162255449)
  • FragmentActivity używa teraz interfejsu API OnContextAvailableListener wprowadzonego w Aktywność 1.2.0-alpha08, aby przywrócić stan FragmentManager. Wszystkie detektory dodane do podklas FragmentActivity będą działać po tym detektorze. (I513da)

Poprawki błędów

  • Wartości ActivityOptions przekazywane podczas korzystania z funkcji startIntentSenderForResult() są teraz uwzględniane. (b/162247961)

Znany problem

  • Jeśli używasz nowego menedżera stanu, bezpośrednie ustawienie widoczności widoku okna głównego fragmentu po onViewCreated() i przed onResume() spowoduje zastąpienie ustawionej przez Ciebie widoczności przez FragmentManager, który kontroluje widoczność widoku okna głównego. Aby zmienić widoczność fragmentu, zawsze używaj operacji hide() i show(). (b/164481490)

Wersja 1.3.0-alpha07

22 lipca 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07androidx.fragment:fragment-testing:1.3.0-alpha07 są dostępne. Wersja 1.3.0-alpha07 zawiera te commity.

Nowe funkcje

  • FragmentScenario obsługuje teraz ustawianie początkowego stanu cyklu życia: CREATED, STARTED lub RESUMED zamiast zawsze przenoszenia fragmentu do stanu RESUMED. (b/159662750)
  • Dodano alternatywę dla interfejsu API FragmentScenarioonFragment w postaci metody rozszerzenia withFragment w Kotlinie, która umożliwia zwrócenie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku. (b/158697631)

Zmiany w zachowaniu

  • FragmentScenario używa teraz interfejsu setMaxLifecycle() do implementowania interfejsu moveToState(), co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od podstawowej aktywności. (b/156527405)
  • Wartość SavedStateRegistryOwner zwracana przez funkcję ViewTreeSavedStateRegistryOwner jest teraz powiązana z cyklem życia widoku fragmentu. Dzięki temu stan jest zapisywany i przywracany w tym samym czasie co widok fragmentu. (b/158503763)

Poprawki błędów

  • Fragmenty czekają teraz na dołączenie widoku fragmentu, zanim wywołają funkcję ViewCompat.requestApplyInsets(), co zapobiega przypadkom odrzucenia żądania wstawki. (b/158095749)
  • Wywołanie funkcji clearFragmentResultListener prawidłowo czyści obserwator cyklu życia. (b/159274993)

Wersja 1.3.0-alpha06

10 czerwca 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06androidx.fragment:fragment-testing:1.3.0-alpha06 są dostępne. Wersja 1.3.0-alpha06 zawiera te commity.

Nowe funkcje

  • Wywołanie zwrotne onAttachFragment() w elementach FragmentActivityFragment zostało wycofane. Dodano nową metodę FragmentOnAttachListener, która zapewnia bardziej elastyczną alternatywę, umożliwiającą delegowanie metody onAttachFragment() do oddzielnych, testowalnych obiektów typu Listener, a także dodawanie obiektów typu Listener do obiektów FragmentManager innych niż bezpośrednio podrzędne. (I06d3d)

Poprawki błędów

  • Stan widoku fragmentów nadrzędnych jest teraz przywracany przed fragmentami podrzędnymi, co rozwiązuje problem z wizualnym układem po zmianie konfiguracji, gdy element DialogFragment wyświetla inny element DialogFragment jako element podrzędny. (b/157195715)
  • Rozwiązaliśmy problem, który powodował, że kontrola lint UseRequireInsteadOfGet nie obsługiwała prawidłowo połączonych zastosowań operatorów ?. i !!. (b/157677616)

Wersja 1.3.0-alpha05

20 maja 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05androidx.fragment:fragment-testing:1.3.0-alpha05 są dostępne. Wersja 1.3.0-alpha05 zawiera te commity.

Nowe funkcje

Zmiany w interfejsie API

  • Interfejsy API setFragmentResult()setFragmentResultListener() przyjmują teraz odpowiednio wartości niezerową BundleFragmentResultListener. Aby wyraźnie wyczyścić wcześniej ustawiony wynik lub listenera, użyj nowych metod clearFragmentResult()clearFragmentResultListener(). (b/155416778)
  • setFragmentResultListener()Rozszerzenia Kotlina, które przyjmują funkcję lambda, są teraz oznaczone jako inline. (b/155323404)

Zmiany w zachowaniu

  • Wycofane wcześniej parametry startActivityForResult(), startIntentSenderForResult()requestPermissions w interfejsie Fragment są teraz używane wewnętrznie w interfejsie ActivityResultRegistry, co usuwa ograniczenie korzystania z tych interfejsów API tylko do niższych bitów (poniżej 0xFFFF) w przypadku kodów żądań. (b/155518741)

Aktualizacje dokumentacji

  • Rozwinęliśmy dokumentację konstruktorów Fragment(@LayoutRes int)DialogFragment(@LayoutRes int), aby wyjaśnić, że należy je wywoływać z konstruktora bez argumentów podklasy, gdy używasz domyślnego FragmentFactory. (b/153042497)

Wersja 1.3.0-alpha04

29 kwietnia 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04androidx.fragment:fragment-testing:1.3.0-alpha04 są dostępne. Wersja 1.3.0-alpha04 zawiera te commity.

Nowe funkcje

  • Dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w FragmentManager. Funkcja ta działa w przypadku fragmentów hierarchii (rodzica/dziecka), fragmentów DialogFragments i fragmentów w Nawigacji. Zapewnia, że wyniki są wysyłane tylko do Twojego Fragmentu, gdy jest on co najmniej w stanie STARTED. (b/149787344)

Zmiany w interfejsie API

  • Interfejsy API docelowych fragmentów zostały wycofane. Aby przekazywać dane między fragmentami, należy zamiast tego używać nowych interfejsów API wyników fragmentów. (b/149787344)
  • Interfejsy API startActivityForResult()/onActivityResult()requestPermissions()/onRequestPermissionsResult() w Fragment zostały wycofane. Użyj interfejsów Activity Result API. (aosp/1290887)
  • Zmiany w wersji Activity 1.2.0-alpha04: nazwa metody prepareCall() została zmieniona na registerForActivityResult(). (aosp/1278717)

Poprawki błędów

  • Funkcja getViewLifecycleOwner() fragmentu jest teraz zatrzymana przed wywołaniem funkcji onSaveInstanceState(), co odzwierciedla zachowanie cyklu życia fragmentu. (b/154645875)
  • Wywołanie funkcji setMenuVisibility(false) w fragmentach teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. (b/153593580)
  • Rozwiązaliśmy problem z illegalStateException podczas dodawania fragmentu do hierarchii widoku DialogFragment za pomocą FragmentContainerView. (b/154366601)
  • Metoda getDefaultViewModelProviderFactory() w fragmentach nie ulega już awarii, gdy fragmenty są hostowane poza aktywnością. (b/153762914)

Wersja 1.3.0-alpha03

1 kwietnia 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03androidx.fragment:fragment-testing:1.3.0-alpha03 są dostępne. Wersja 1.3.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Metody prepareCallFragment to teraz final. (b/152439361)

Poprawki błędów

  • Rozwiązaliśmy regresję wprowadzoną w Fragment 1.3.0-alpha02 podczas używania BottomSheetDialogFragment. (b/151652127, aosp/1263328, aosp/1265163)
  • Usunięto błąd powodujący awarię po zmianie konfiguracji podczas używania funkcji prepareCall z fragmentu. (b/152137004)
  • Rozwiązaliśmy problem, który powodował, że podczas korzystania z elementu współdzielonego i przejść wyjściowych były ignorowane.setTargetFragment() (b/152023196)
  • Zmiana Fragment 1.2.4: zaktualizowano reguły Fragment ProGuard, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338)
  • Z Fragmentu 1.2.4: wyłączono regułę lint FragmentLiveDataObserve w klasach DialogFragment, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co pozwala bezpiecznie używać this lub viewLifecycleOwner podczas wywoływania observe. (b/151765086)

Zmiany w zależnościach

  • Fragmenty zależą od Activity 1.2.0-alpha03, w którym wprowadzono znaczące ulepszenia interfejsu Activity Result API wprowadzone w Activity 1.2.0-alpha02.

Wersja 1.3.0-alpha02

18 marca 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02androidx.fragment:fragment-testing:1.3.0-alpha02 są dostępne. Wersja 1.3.0-alpha02 zawiera te commity.

Nowe funkcje

  • Dodano obsługę interfejsu ActivityResultRegistry API wprowadzonego w aktywności 1.2.0-alpha02, aby obsługiwać przepływy startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() bez zastępowania metod w Twoim fragmencie, a także stworzyć uchwyty do testowania tych przepływów. Zapoznaj się z aktualną wersją artykułu Uzyskiwanie wyniku z aktywności. (b/125158199)

Zmiany w interfejsie API

  • DialogFragment udostępnia teraz konstruktor, który przyjmuje parametr @LayoutRes określający układ, który onCreateView() powinien napompować domyślnie. (b/150327080)
  • Metoda onActivityCreated() została wycofana. Kod dotyczący widoku fragmentu powinien być umieszczony w funkcji onViewCreated() (która jest wywoływana bezpośrednio przed funkcją onActivityCreated()), a inny kod inicjowania powinien znajdować się w funkcji onCreate(). Aby otrzymywać wywołania zwrotne, gdy onCreate() aktywności jest zakończona, należy zarejestrować LifeCycleObserverLifecycle aktywności w onAttach() i usunąć go po otrzymaniu wywołania zwrotnego onCreate(). (b/144309266)

Poprawki błędów

  • Fragmentu 1.2.3: naprawiliśmy błąd w DialogFragment, który powodował StackOverflowError podczas wywoływania getLayoutInflater() z poziomu onCreateDialog(). (b/117894767, aosp/1258664)
  • Fragment 1.2.3: zredukowano zakres dołączonych reguł ProGuarda w Fragment, aby można było usunąć nieużywane klasy Fragment. (b/149665169)
  • Zmiana w Fragment 1.2.3: naprawiono fałszywie pozytywne wyniki w sprawdzaniu Lint UseRequireInsteadOfGet, gdy używano nazwy zmiennej lokalnej, która zaciemniała nazwę właściwości Kotlin. (b/149891163)
  • Fragment 1.2.3: FragmentContainerView nie powoduje już błędu UnsupportedOperationException z powodu użycia nieprawidłowego konstruktora w podglądzie układu. (b/149707833)

Znane problemy

  • Aplikacja BottomSheetDialogFragment nie prawidłowo umieszcza okna dialogowego na ekranie. (b/151652127)

Wersja 1.3.0-alpha01

4 marca 2020 r.

Funkcje androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01androidx.fragment:fragment-testing:1.3.0-alpha01 są dostępne. Wersja 1.3.0-alpha01 zawiera te commity.

Nowe funkcje

Zmiany w interfejsie API

  • Metoda setRetainInstance() w Fragments została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do przechowywania stanu, który może być powiązany z aktywnościami, fragmentami i grafami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, niezachowywanego fragmentu i utrzymywać w oddzieleniu stan, który ma być przechowywany, unikając przy tym częstego źródła wycieków i zachowując przydatne właściwości pojedynczego tworzenia i usuwania stanu przechowywanego (czyli konstruktora ViewModel i otrzymywanego przez niego wywołania onCleared()). (b/143911815)
  • Wraz z wydaniem ViewPager2 1.0.0 klasy FragmentPagerAdapterFragmentStatePagerAdapter służące do interakcji z ViewPager zostały wycofane. Zobacz Migracja z ViewPager do ViewPager2. (b/145132715)

Poprawki błędów

  • Reguły Fragment ProGuarda poprawnie zachowują teraz tylko domyślne konstruktory klas Fragment, które są używane, a nie wszystkie instancje Fragment, co naprawia regresję wprowadzoną w Fragment 1.2.1. (b/149665169
  • Reguły Lint require___() dodane w Fragment 1.2.2 nie dają już fałszywie pozytywnego wyniku w przypadku zmiennych lokalnych, które mają tę samą nazwę co zaciemnione nazwy właściwości Kotlina (np. view). (b/149891163)
  • Podczas korzystania z podglądu układu w Android Studio funkcja FragmentContainerView nie powoduje już błędu UnsupportedOperationException. (b/149707833)
  • Rozwiązaliśmy problem polegający na tym, że zachowane fragmenty, które zostały dodane po zapisaniu stanu, nie były stale tworzone i usuwane po każdej zmianie konfiguracji. (b/145832397)

Wersja 1.2.5

Wersja 1.2.5

10 czerwca 2020 r.

Funkcje androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5androidx.fragment:fragment-testing:1.2.5 są dostępne. Wersja 1.2.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja getViewLifecycleOwner() fragmentu jest teraz zatrzymana przed wywołaniem funkcji onSaveInstanceState(), co odzwierciedla zachowanie cyklu życia fragmentu. Ten fragment został wcześniej opublikowany w Fragment 1.3.0-alpha04. (b/154645875)
  • Wywołanie funkcji setMenuVisibility(false) w fragmentach teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. Ten fragment został wcześniej opublikowany w Fragment 1.3.0-alpha04. (b/153593580)

Wersja 1.2.4

Wersja 1.2.4

1 kwietnia 2020 r.

Funkcje androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4androidx.fragment:fragment-testing:1.2.4 są dostępne. Wersja 1.2.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Zaktualizowano reguły Fragment ProGuard, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338)
  • Wyłączono regułę lint FragmentLiveDataObserve w klasach DialogFragment, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co pozwala bezpiecznie używać w funkcji observe albo this, albo viewLifecycleOwner. (b/151765086)

Wersja 1.2.3

Wersja 1.2.3

18 marca 2020 r.

Funkcje androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3androidx.fragment:fragment-testing:1.2.3 są dostępne. Wersja 1.2.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd w DialogFragment, który powodował StackOverflowError podczas wywoływania getLayoutInflater() z poziomu onCreateDialog(). (b/117894767, aosp/1258665)
  • Zmniejszono zakres reguł ProGuard uwzględnionych w Fragment, aby można było usuwać nieużywane klasy Fragment. (b/149665169)
  • Rozwiązano problem z fałszywie dodatnimi wynikami w sprawdzaniu Lint UseRequireInsteadOfGet, gdy używano nazwy zmiennej lokalnej, która zaciemnia nazwę właściwości Kotlin. (b/149891163)
  • Funkcja FragmentContainerView nie powoduje już błędu UnsupportedOperationException w przypadku użycia nieprawidłowego konstruktora w podglądzie układu. (b/149707833)

Wersja 1.2.2

Wersja 1.2.2

19 lutego 2020 r.

Funkcje androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2androidx.fragment:fragment-testing:1.2.2 są dostępne. Wersja 1.2.2 zawiera te zatwierdzenia.

Nowe kontrole Lint

  • Lint sugeruje użycie viewLifecycleOwner jako LifecycleOwner do wywołania OnBackPressedDispatcher w plikach onCreateView(), onViewCreated()onActivityCreated(). (b/142117657)
  • Dodano nową kontrolę Lint, która potwierdza, że używasz prawidłowej wersji debugImplementation, gdy używasz artefaktu fragment-testing. (b/141500106)
  • Fragmenty sugerują teraz używanie powiązanych metod require___(), aby wyświetlać bardziej opisowe komunikaty o błędach, zamiast metod checkNotNull(get___()), requireNonNull(get___()) lub get___()!! we wszystkich interfejsach Fragment API, które zawierają zarówno metody get, jak i require. (aosp/1202883)

Poprawki błędów

  • Poprawiono pliki ProGuard Fragment, aby uniknąć ostrzeżeń R8 (b/148963981)
  • Ulepszony został dotychczasowy test Lint, który sugeruje używanie viewLifecycleOwner podczas korzystania z observe, aby obsługiwać też wersję metody rozszerzenia livedata-ktxobserve. (b/148996309)
  • Naprawiono formatowanie wielu kontroli Lint (aosp/1157012)

Wkład zewnętrzny

  • Dziękujemy Zacowi Sweersowi za udostępnienie require___() kontroli składni w imieniu Slacka. (aosp/1202883)

Wersja 1.2.1

Wersja 1.2.1

5 lutego 2020 r.

Funkcje androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1androidx.fragment:fragment-testing:1.2.1 są dostępne. Wersja 1.2.1 zawiera te zatwierdzenia

Poprawki błędów

  • Fragmenty dodane za pomocą metod addreplace, które przyjmują instancję Class (lub zrefaktoryzowane wersje w Kotlinie), mają teraz konstruktor domyślny zachowany przez ProGuard. (b/148181315)
  • Metody FragmentStatePagerAdapterFragmentPagerAdapter nie przechwytują już wyjątków wyrzucanych przez metodę FragmentManager podczas wykonywania metody finishUpdate(). (aosp/1208711)
  • Rozwiązaliśmy problem polegający na tym, że funkcja FragmentManager.findFragment() nie działała w przypadku fragmentów dodanych za pomocą tagu <fragment>. (b/147784323)
  • Fragmenty utworzone za pomocą tagu <fragment> są teraz zawsze wywoływane w układzie przed wywołaniem onInflate().onCreate() (aosp/1215856)
  • Wywołanie metody toString() w instancji FragmentManager nie powoduje już błędu NullPointerException, gdy aktywność została już zniszczona. (b/148189412)

Zmiany w zależnościach

Wersja 1.2.0

Wersja 1.2.0

22 stycznia 2020 r.

Funkcje androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0androidx.fragment:fragment-testing:1.2.0 są dostępne. Wersja 1.2.0 zawiera te zatwierdzenia

Ważne zmiany od wersji 1.1.0

  • FragmentContainerView: element FragmentContainerView to zalecany kontener do dynamicznie dodawanych fragmentów, który zastępuje użycie elementu FrameLayout lub innych układów. Obsługuje też te same parametry class, android:name i opcjonalnie android:tag co tag <fragment>, ale do dodania tego początkowego fragmentu używa zwykłego tagu FragmentTransaction zamiast ścieżki niestandardowego kodu używanej przez tag <fragment>.
  • onDestroyView() czas: fragmenty czekają teraz na zakończenie animacji wyjścia, przejść w ramach frameworka i przejść AndroidX (w przypadku użycia Przejścia 1.3.0) przed wywołaniem onDestroyView().
  • Funkcje add()replace() oparte na klasie: dodano nowe przeciążenia funkcji add()replace() w funkcji FragmentTransaction, które przyjmują argument Class<? extends Fragment> i opcjonalnie Bundle. Te metody używają obiektu FragmentFactory do utworzenia wystąpienia Fragmentu, który ma zostać dodany. Do fragment-ktx zostały też dodane rozszerzenia Kotlina, które korzystają z typów kwalifikowanych (np.fragmentTransaction.replace<YourFragment>(R.id.container)).
  • Łączenie Lifecycle ViewModel z SavedState: SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z Fragmentem.
  • Nowe kontrole Lint: dodaliśmy nową kontrolę Lint, która sprawdza, czy podczas obserwowania LiveData z onCreateView(), onViewCreated() lub onActivityCreated() używasz getViewLifecycleOwner().
  • Wycofanie metody getFragmentManager(): metody getFragmentManager()requireFragmentManager() w klasie Fragment zostały wycofane i zastąpione jedną metodą getParentFragmentManager(), która zwraca niepustą wartość FragmentManager, do której dodano fragment (możesz użyć metody isAdded(), aby sprawdzić, czy można ją bezpiecznie wywołać).
  • FragmentManager.enableDebugLogging() wycofanie: statyczna metoda FragmentManager.enableDebugLogging została wycofana. FragmentManager uwzględnia teraz wartość Log.isLoggable() dla tagu FragmentManager, co umożliwia włączenie rejestrowania DEBUG lub VERBOSE bez konieczności ponownego kompilowania aplikacji.

Znane problemy

  • Fragmenty, do których odwołuje się tylko atrybut class lub android:name w elementach FragmentContainerView, nie są automatycznie przechowywane przez ProGuard, dlatego musisz ręcznie dodać regułę przechowywania dla każdej klasy fragmentów. (b/142601969)
  • Podczas dodawania NavHostFragment za pomocą class lub android:name w pliku XML z FragmentContainerView nie możesz używać findNavController()onCreate() aktywności. (b/142847973)

Wersja 1.2.0-rc05

8 stycznia 2020 r.

Funkcje androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05androidx.fragment:fragment-testing:1.2.0-rc05 są dostępne. Wersja 1.2.0-rc05 zawiera te zatwierdzenia:

Poprawki błędów

  • Rozwiązaliśmy problem z cofaniami w fragmentach kodu 1.2.0-rc04 podczas używania tagu <fragment>, który powodował nieprawidłowe wywołanie funkcji onViewCreated() podczas usuwania aktywności. (b/146290333)
  • Fragmenty dodane za pomocą tagu <fragment> mają teraz prawidłowo wyczyszczone ustawienia niestandardowe, nawet jeśli występują tylko czasami w układzie (np. tylko w układzie poziomym). W rezultacie te fragmenty są teraz prawidłowo przenoszone do CREATED nawet wtedy, gdy nie znajdują się w Twoim układzie, zamiast być tworzone, ale nigdy nie przechodzą przez żadne metody cyklu życia. (b/145769287)

Wersja 1.2.0-rc04

18 grudnia 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04androidx.fragment:fragment-testing:1.2.0-rc04 są dostępne. Wersja 1.2.0-rc04 zawiera te zatwierdzenia

Poprawki błędów

  • Aby uniknąć problemów wizualnych, dostosowaliśmy animacje w przypadku TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE. (b/145468417)

Wersja 1.2.0-rc03

4 grudnia 2019

Funkcje androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03androidx.fragment:fragment-testing:1.2.0-rc03 są dostępne. Wersja 1.2.0-rc03 zawiera te zatwierdzenia

Poprawki błędów

  • Usunięto niezamierzone zmiany zachowania, które powodowały, że usuwane fragmenty były nadal zwracane przez funkcję findFragmentById() / findFragmentByTag(), podczas gdy ich animacje wyjścia lub przejścia były odtwarzane. (b/143982969, aosp/1167585)
  • Fragmenty podrzędne są teraz prawidłowo zatrzymywane przed fragmentami nadrzędnymi, gdy zawierające je aktywności wywołują funkcję onSaveInstanceState(). (b/144380645)
  • Rozwiązaliśmy problem polegający na tym, że po wygenerowaniu ukrytego fragmentu widoki były nieprawidłowo oznaczane jako INVISIBLE. (b/70793925)
  • Przejścia elementów udostępnionych fragmentów obsługują teraz widoki, które zostały obrócone, przeskalowane itp. (b/142835261)

Aktualizacje dokumentacji

  • Doprecyzowano dokumentację dotyczącą wycofania setUserVisibleHint(). (b/143897055)
  • Ulepszona dokumentacja funkcji setFragmentFactory()getFragmentFactory(), aby lepiej wskazywać, że ustawienie FragmentFactory będzie miało wpływ również na podrzędne obiekty FragmentManager. (aosp/1170095)

Zmiany w zależnościach

  • Fragmenty zależą teraz od Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 i Activity 1.1.0-rc03.

Wersja 1.2.0-rc02

7 listopada 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02androidx.fragment:fragment-testing:1.2.0-rc02 są dostępne. Wersja 1.2.0-rc02 zawiera te zatwierdzenia:

Poprawki błędów

  • W Kotlinie poprawka LintFix dotycząca używania getViewLifecycleOwner() podczas obserwowania LiveDataonCreateView(), onViewCreated() lub onActivityCreated() (wprowadzona w Fragment 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.

Funkcje androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01androidx.fragment:fragment-testing:1.2.0-rc01 są dostępne. Wersja 1.2.0-rc01 zawiera te zatwierdzenia:

Nowe funkcje

  • Tag FragmentContainerView obsługuje teraz atrybut class oprócz atrybutu android:name, co odzwierciedla funkcjonalność tagu <fragment>. (b/142722242)
  • Dodano nową kontrolę lintowania, która sprawdza, czy podczas obserwowania LiveData z onCreateView(), onViewCreated() lub onActivityCreated() używasz getViewLifecycleOwner(). (b/137122478)

Poprawki błędów

  • W przypadku funkcji onDismissonCancel w obiekcie DialogFragment gwarantuje się, że przekazana im wartość DialogInterface jest różna od null, a funkcja getDialog() zwraca wartość nierówną null. (b/141974033)
  • Funkcja FragmentContainerView dodaje teraz fragment zdefiniowany przez funkcję class lub android:name w ramach napełniania, dzięki czemu funkcje findFragmentById()findFragmentByTag() działają natychmiast po jej wykonaniu. (b/142520327)
  • Naprawiono błąd IllegalStateException w pliku FragmentContainerView z powodu zapisa stanu. (b/142580713)
  • Usunęliśmy błąd UnsupportedOperationException w FragmentContainerView, gdy klasa FragmentContainerView jest zaciemniona. (b/142657034)

Znane problemy

  • Fragmenty, do których odwołuje się tylko atrybut class lub android:name w elementach FragmentContainerView, nie są automatycznie przechowywane przez ProGuard, dlatego musisz ręcznie dodać regułę przechowywania dla każdej klasy fragmentów. Wyłączyliśmy regułę lint, która sugeruje przejście na FragmentContainerView, dopóki nie zostanie ona naprawiona za pomocą aapt2. (b/142601969)

Wersja 1.2.0-beta02

11 października 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02androidx.fragment:fragment-testing:1.2.0-beta02 są dostępne. Wersja 1.2.0-beta02 zawiera te zatwierdzenia:

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że fragmenty onInflate() nie otrzymywały odpowiednich atrybutów z FragmentContainerView, co powodowało nieprawidłowe działanie funkcji takich jak NavHostFragment. (b/142421837)

Wersja 1.2.0-beta01

9 października 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01androidx.fragment:fragment-testing:1.2.0-beta01 są dostępne. Wersja 1.2.0-beta01 zawiera te zatwierdzenia:

Nowe funkcje

  • FragmentContainerView umożliwia dodawanie początkowego fragmentu z dodatkową obsługą atrybutów XML android:name i opcjonalnych atrybutów android:tag. W przeciwieństwie do tagu <fragment> tag FragmentContainerView używa normalnego tagu FragmentTransaction, aby dodać początkowy fragment, co umożliwia dalsze operacje FragmentTransaction na FragmentContainerView i użycie w tym celu mechanizmu View Binding. (b/139830628, b/141177981)
  • Fragmenty zawierają teraz ostrzeżenie Lint, które oferuje szybkie rozwiązanie polegające na zastąpieniu <fragment> wartością FragmentContainerView. (b/139830056)

Poprawki błędów

  • Usunęliśmy błąd ClassCastException występujący podczas używania androidx.transition. (b/140680619)
  • Gdy używasz Przejścia 1.3.0-beta01, fragmenty czekają teraz na zakończenie przejść androidx.transition (oprócz przejść i animacji frameworku, które zostały odpowiednio naprawione w Fragment 1.2.0-alpha03Fragment 1.2.0-alpha02), zanim przekażą dane onDestroyView(). (aosp/1119841)
  • Gdy używasz Przejścia 1.3.0-beta01, fragmenty będą teraz prawidłowo anulować androidx.transition przejścia przed rozpoczęciem nowych przejść lub animacji w tym samym kontenerze. (aosp/1119841)
  • Rozwiązaliśmy problem występujący w wersji interfejsu API 17 i starszych, gdy podczas korzystania z elementu FragmentContainerView w widoku okna głównego Fragmentu występują przejścia androidx.transition. (b/140361893)
  • Element fragment-testing zależy teraz od testu AndroidX 1.2.0, co rozwiązuje problem z niezgodnością z najnowszą wersją Espresso 3.2.0. (b/139100149)
  • Usunięto Log.w w FragmentManager. (aosp/1126468)

Znane problemy

  • Fragmenty onInflate() nie otrzymują prawidłowych atrybutów z elementu FragmentContainerView, co powoduje błędy w przypadkach takich jak NavHostFragment. (b/142421837)

Wersja 1.2.0-alpha04

18 września 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04androidx.fragment:fragment-testing:1.2.0-alpha04 są dostępne. Wersja 1.2.0-alpha04 zawiera te zatwierdzenia:

Zmiany w interfejsie API

  • Metody getFragmentManager()requireFragmentManager() klasy Fragment zostały wycofane i zastąpione jedną metodą getParentFragmentManager(), która zwraca niepustą wartość FragmentManager, do której dodano fragment (możesz użyć metody isAdded(), aby sprawdzić, czy można ją bezpiecznie wywołać). (b/140574496)
  • Statyczna metoda FragmentManager.enableDebugLogging została wycofana. FragmentManager uwzględnia teraz parametr Log.isLoggable() dla tagu FragmentManager, co umożliwia włączenie rejestrowania DEBUG lub VERBOSE bez ponownego kompilowania aplikacji. (aosp/1116591)

Poprawki błędów

  • Fragmenty są teraz prawidłowo usuwane podczas odtwarzania animacji wyjścia w innych fragmentach. (b/140574199)
  • Rozwiązaliśmy problem, który powodował, że fragmenty wywoływały funkcję Activity.findViewById(), gdy wcześniej tego nie robiły. (aosp/1116431)

Wersja 1.2.0-alpha03

5 września 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03androidx.fragment:fragment-testing:1.2.0-alpha03 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

Poprawki błędów

  • FragmentContainerView teraz prawidłowo odwraca kolejność rysowania podczas usuwania fragmentów ze stosu. (b/139104187)
  • Rozwiązaliśmy problem polegający na tym, że podczas dodawania nowego fragmentu i usuwania fragmentu jednocześnie uruchamiana była niewłaściwa animacja. (b/111659726)
  • Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, które zostały naprawione w Fragment 1.2.0-alpha02) przed wysłaniem onDestroyView(). (b/138741697)

Wersja 1.2.0-alpha02

7 sierpnia 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02androidx.fragment:fragment-testing:11.2.0-alpha02 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z funkcji by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z opcją Fragment. (b/135716331)
  • Domyślne animacje podczas korzystania z TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADEsetTransition na FragmentTransaction zostały zaktualizowane, aby pasowały do animacji używanych przez czynności na urządzeniach z Androidem 10. (aosp/1012812, aosp/1014730)

Zmiany w interfejsie API

  • Wprowadza element FragmentContainerView jako zalecany kontener dla dynamicznie dodawanych fragmentów, zastępując m.in. element FrameLayout, ponieważ rozwiązuje problemy z kolejnością animacji i przesyłanie wstawek okna do fragmentów. (b/37036000, aosp/985243, b/136494650)
  • Dodano stałą metodę FragmentManager.findFragment(View), która umożliwia pobieranie z widoku wypełnionego przez fragment fragmentu zawierającego. Rozszerzenie Kotlin jest też dostępne w języku fragment-ktx. (aosp/1090757)
  • Dodaliśmy nowe przeciążenia funkcji add()replace() w funkcji FragmentTransaction, które przyjmują argumenty Class<? extends Fragment> i opcjonalnie Bundle. Te metody używają obiektu FragmentFactory do utworzenia wystąpienia Fragmentu, który ma zostać dodany. Do fragment-ktx zostały też dodane rozszerzenia w Kotlinie, które korzystają z typów zmaterializowanych (np.fragmentTransaction.replace<YourFragment>(R.id.container)). (b/126124987)
  • Do wywołań zwrotnych cyklu życia Fragment dodano adnotacje @MainThread. (b/127272564)
  • Interfejsy API dotyczące tytułu nawigacji w FragmentTransactionFragmentManager.BackStackEntry zostały wycofane. (b/138252944)
  • Metoda setTransitionStyle w elementach FragmentTransaction została wycofana. (aosp/1011537)
  • Wiele metod w FragmentManager nie jest już abstract. Element FragmentManager pozostaje elementem abstract i nie powinien być bezpośrednio instancjonowany ani rozszerzany. Nadal należy pobierać tylko istniejące wystąpienie z elementu getSupportFragmentManager(), getChildFragmentManager() itp.

Poprawki błędów

  • Zmiany w Fragment 1.1.0-rc04: fragmenty są teraz prawidłowo anulowane w przypadku opóźnionych przejść w fragmentach. (b/138251858)
  • Z Fragmentu 1.1.0-rc03: rozwiązaliśmy problem polegający na tym, że wywołanie postponeEnterTransition() z czasem oczekiwania więcej niż raz nie anulowało poprzednich czasów oczekiwania. (b/137797118)
  • Fragmentu 1.1.0-rc02: rozwiązano problem awarii w funkcjach FragmentPagerAdapterFragmentStatePagerAdapter podczas usuwania bieżącego elementu. (b/137209870)
  • Fragmenty czekają teraz na zakończenie animacji, zanim przekażą onDestroyView(). (b/136110528)
  • Animacje fragmentów pochodzące z fragmentów podrzędnych i ich elementów potomnych są teraz prawidłowo obsługiwane podczas animacji fragmentu nadrzędnego. (b/116675313)
  • Rozwiązaliśmy błąd NullPointerException występujący podczas korzystania z przejść elementów współdzielonych i łączenia operacji pop i add. (b/120507394)
  • Dodano obejście problemu z testami IllegalStateException, gdy w testach Robolectric są używane żądania FragmentPagerAdapterFragmentStatePagerAdapter. (b/137201343)

Wersja 1.2.0-alpha01

2 lipca 2019 r.

Funkcje androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01androidx.fragment:fragment-testing:1.2.0-alpha01 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • FragmentManager wywołuje teraz funkcję requestApplyInsets() po dołączeniu widoku fragmentu i bezpośrednio przed wywołaniem funkcji onViewCreated(), aby zapewnić prawidłowe wstawienia w widoku. (b/135945162)

Poprawki błędów

  • Rozwiązano błąd NullPointerException występujący podczas wyjmowania FragmentTransaction, który używał setPrimaryNavigationFragment() przed replace(). (b/134673465)

Wersja 1.1.0

Wersja 1.1.0

5 września 2019 r.

Funkcje androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0androidx.fragment:fragment-testing:1.1.0 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany od wersji 1.0.0

  • fragment-testing: artefakt fragment-testing udostępnia klasę FragmentScenario do testowania fragmentu w izolacji. Więcej informacji znajdziesz w dokumentacji dotyczącej testowania fragmentów aplikacji.
  • FragmentFactory: teraz możesz ustawić FragmentFactoryFragmentManager, aby zarządzać tworzeniem instancji fragmentu, co eliminuje rygorystyczne wymaganie konstruktora bez argumentów.
  • Obsługa właściwości w Kotlinie dla ViewModels: artefakt fragment-ktx zawiera teraz 2 obsługi właściwości w Kotlinie: by viewModels() umożliwiającą dostęp do ViewModels powiązanych z poszczególnymi fragmentami oraz by activityViewModels() umożliwiającą dostęp do ViewModels ograniczonych do aktywności.
  • Maksymalny cykl życia: możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję setMaxLifecycle() w obiekcie FragmentTransaction. Zastępuje ona wycofany protokół setUserVisibleHint(). FragmentPagerAdapterFragmentStatePagerAdapter mają nowego konstruktora, który umożliwia przejście na nowe działanie.
  • Konstruktor FragmentActivity LayoutId: podklasy FragmentActivity mogą teraz opcjonalnie wywoływać konstruktor w FragmentActivity, który przyjmuje identyfikator R.layout, wskazując układ, który powinien zostać ustawiony jako widok treści, jako alternatywę dla wywołania setContentView()onCreate(). Nie zmienia to jednak wymagań dotyczących konstruktora bez argumentów w podklasie.
  • Konstruktor Fragment LayoutId: podklasy klasy Fragment mogą teraz opcjonalnie wywoływać konstruktor klasy Fragment, który przyjmuje identyfikator R.layout, wskazując układ, którego należy użyć w przypadku tego fragmentu, zamiast zastępować onCreateView(). Rozwinięty układ można skonfigurować w onViewCreated().
  • Opóźnienie z czasem oczekiwania: dodano nowe przeciążenie postponeEnterTransition(), które powoduje przerwę w obsługiwaniu zapytania.

Wersja 1.1.0-rc04

7 sierpnia 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04androidx.fragment:fragment-testing:1.1.0-rc04 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Fragmenty są teraz prawidłowo anulowane w przypadku opóźnionych przejść w przypadku fragmentów, które zostały wyświetlone. (b/138251858)

Wersja 1.1.0-rc03

19 lipca 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03androidx.fragment:fragment-testing:1.1.0-rc03 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że wywołanie funkcji postponeEnterTransition() z czasem oczekiwania więcej niż raz nie anulowało poprzednich czasów oczekiwania. (b/137797118)

Wersja 1.1.0-rc02

17 lipca 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02androidx.fragment-testing:fragment:1.1.0-rc02 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiliśmy błąd powodujący awarię w funkcjach FragmentPagerAdapterFragmentStatePagerAdapter podczas usuwania bieżącego elementu. (b/137209870)

Wersja 1.1.0-rc01

2 lipca 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01androidx.fragment:fragment-testing:1.1.0-rc01 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Fragmenty są teraz prawidłowo aktualizowane pod względem widoczności podczas wykonywania operacji show() lub hide() w trakcie trwania przejścia. (b/133385058)
  • Rozwiązano błąd NullPointerException występujący podczas wyjmowania FragmentTransaction, który używał setPrimaryNavigationFragment() przed replace(). (b/134673465)

Wersja 1.1.0-beta01

5 czerwca 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01androidx.fragment:fragment-testing:1.1.0-beta01 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • wywołania androidx.lifecycle.Lifecycle (szczególnie te związane z funkcjami STARTED, RESUMED, PAUSED, STOPPEDDESTROYED) w zagnieżdżonych fragmentach są teraz prawidłowo zagnieżdżone. (b/133497591)
  • instancje OnBackPressedCallback zarejestrowane w onCreate() fragmentu mają teraz prawidłowo pierwszeństwo przed podrzędnym FragmentManagerem. (b/133175997)
  • Fragmenty podrzędne nie są już animowane, gdy ich fragment nadrzędny jest zastępowany. (b/121017790)
  • Animacje i przejścia fragmentów są teraz ignorowane podczas korzystania z animateLayoutChanges="true". Rozwiązaliśmy problem polegający na tym, że fragmenty nie były prawidłowo usuwane. (b/116257087)

Wersja 1.1.0-alpha09

16 maja 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09androidx.fragment:fragment-testing:1.1.0-alpha09 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Gdy fragment nawigacji podstawowej ulegnie zmianie, fragmenty będą teraz otrzymywać wywołanie zwrotne do nowej metody onPrimaryNavigationFragmentChanged(boolean). aosp/960857

Poprawki błędów

  • Elementy menu utworzone przez element podrzędny są teraz prawidłowo usuwane, gdy usuniesz element nadrzędny. b/131581013

Wersja 1.1.0-alpha08

7 maja 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08androidx.fragment:fragment-testing:1.1.0-alpha08 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Ta wersja jest niezgodna z Preferences 1.1.0-alpha01 do 1.1.0-alpha04. Jeśli używasz tej wersji Fragments, zaktualizuj Preferencje do wersji 1.1.0-alpha05.

Nowe funkcje

  • Dodano nową przeciążenie funkcji postponeEnterTransition(), która po przekroczeniu limitu czasu automatycznie wywołuje funkcję startPostponedEnterTransition() b/120803208

Zmiany w interfejsie API

  • Zmiana wprowadzająca nowe zachowanie: wycofana wcześniej metoda FragmentFactory instantiate, która przyjmowała argument Bundle, została usunięta. aosp/953856
  • Zmiana powodująca przerwanie działania: stałe RESUME_ONLY_CURRENT_FRAGMENTUSE_SET_USER_VISIBLE_HINT w funkcjach FragmentPagerAdapterFragmentStatePagerAdapter zostały odpowiednio przemianowane na BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENTBEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Poprawki błędów

  • Fragmenty, których cykl życia został ograniczony za pomocą setMaxLifecycle(), nie są już wznawiane przed osiągnięciem ich ostatecznego stanu. b/131557151
  • Gdy używasz setMaxLifecycle(Lifecycle.State.CREATED), widok fragmentów zostanie prawidłowo usunięty. aosp/954180

Wersja 1.1.0-alpha07

25 kwietnia 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07androidx.fragment:fragment-testing:1.1.0-alpha07 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję setMaxLifecycle() w obiekcie FragmentTransaction. Zastępuje ona wycofany protokół setUserVisibleHint(). FragmentPagerAdapterFragmentStatePagerAdapter mają nowego konstruktora, który umożliwia przejście na nowe działanie. (b/129780800)

Zmiany w interfejsie API

  • Metoda moveToState(STARTED)FragmentScenario może być teraz wywoływana tylko na urządzeniach z poziomem interfejsu API 24 lub nowszym. (b/129880016)

Zmiany w zachowaniu

  • W efekcie (b/129907905) fragmenty na stosie nie będą otrzymywać wywołania do onCreateView(), gdy zostanie ponownie utworzona aktywność hosta. Funkcja onCreateView() będzie teraz wywoływana tylko wtedy, gdy fragment stanie się widoczny (czyli zostanie odrzucony element z poziomu stosu).

Poprawki błędów

  • Naprawiliśmy błąd związany z używaniem w XML tagu <fragment> i konstruktora contentLayoutId klasy FragmentActivity lub AppCompatActivity. (b/129907905)
  • Rozwiązaliśmy problem, który powodował, że fragmenty na stosie nie były przenoszone do co najmniej CREATED po zmianie konfiguracji, co powodowało, że nie można było prawidłowo usunąć widoków ViewModel i podrzędnych fragmentów. (b/129593351)
  • Rozwiązaliśmy problem z zawieszaniem się restoreSaveState spowodowany przez rozbieżność zachowanych fragmentów po zapisaniu stanu instancji. (b/130433793) (aosp/947824)
  • Rozwiązaliśmy problemy, które powodowały, że funkcja OnBackPressedCallback dodana za pomocą cyklu życia fragmentu nie była wywoływana, jeśli FragmentManager miała podwójną pamięć podręczną. Więcej informacji znajdziesz w androidx.activity 1.0.0-alpha07. (aosp/948209)
  • Fragmenty nie wymagają już LAYER_TYPE_HARDWARE w przypadku animacji. Jeśli potrzebujesz animacji warstwy sprzętowej, ustaw ją jako część animacji. (b/129486478)

Wersja 1.1.0-alpha06

3 kwietnia 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06androidx.fragment:fragment-testing:1.1.0-alpha06 są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Wyjątki zgłaszane przez FragmentManager zawierają teraz w komunikacie nazwę fragmentu. (b/67759402)

Zmiany w interfejsie API

  • FragmentFragmentActivity zawierają teraz drugi konstruktor, który przyjmuje parametr @LayoutRes int. Zastępuje on poprzednie zachowanie polegające na adnotowaniu klasy za pomocą @ContentView. To podejście działa zarówno w przypadku modułów aplikacji, jak i bibliotek. (b/128352521)
  • Metoda onActivityResult() klasy FragmentActivity jest teraz prawidłowo oznaczona jako @CallSuper. (b/127971684)
  • Metoda FragmentFactory instantiate, która przyjmuje argument Bundle, została wycofana. Aplikacje powinny używać nowego przeciążenia instantiate, które nie przyjmuje argumentu Bundle. (b/128836103)
  • Metody FragmentScenario są teraz odpowiednio oznaczone za pomocą @StyleRes. (aosp/924193)
  • Środowisko wykonawcze FragmentTabHost zostało wycofane. (b/127971835)
  • Metoda getThemedContext() klasy FragmentActivity została usunięta. (aosp/934078)

Poprawki błędów

  • Naprawiliśmy regresję w wersji 1.1.0-alpha05, która powodowała miganie na ekranie przychodzącego fragmentu. (b/129405432)
  • Rozwiązaliśmy problem polegający na tym, że główny fragment nawigacji był tracony po serii operacji popBackStack+replace+popBackStack. (b/124332597)
  • Rozwiązaliśmy problem z użyciem konstruktorów @ContentView w Twojej aktywności podczas przywracania stanu fragmentu. (b/127313094)
  • Poprawiliśmy logikę funkcji setTargetFragment(), gdy zastępuje ona istniejący docelowy fragment kodem Fragment, który nie jest jeszcze dołączony do FragmentManagera. (aosp/932156)

Wersja 1.1.0-alpha05

13 marca 2019 r.

Funkcje androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05androidx.fragment:fragment-testing:1.1.0-alpha05 są dostępne. 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 zachowaniu

  • Wywoływanie funkcji remove(), hide(), show(), detach()setPrimaryNavigationFragment() z Fragmentem dołączonym do innego FragmentManagera powoduje teraz wyjątek IllegalStateException, a nie milczące niepowodzenie (aosp/904301)

Poprawki błędów

  • Element onNewIntent w profilu FragmentActivity jest teraz prawidłowo oznaczony jako @CallSuper (b/124120586)
  • Rozwiązanie problemu polegającego na tym, że funkcja onDismiss()DialogFragment mogła zostać wywołana dwukrotnie podczas korzystania z funkcji getDialog().dismiss() lub getDialog().cancel() (b/126563750)

Wersja 1.1.0-alpha04

7 lutego 2019 r.

Funkcje androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04androidx.fragment:fragment-testing 1.1.0-alpha04 są dostępne.

Nowe funkcje

  • Dodaliśmy obsługę adnotacji klasy @ContentView, która umożliwia wskazanie, który plik XML układu należy napompować jako alternatywę dla zastąpienia onCreateView(). Zalecamy wyświetlanie powiązanych prac w onViewCreated(). (aosp/837619)
  • fragment-testing zależy teraz od stabilnej wersji androidx.test:core-ktx 1.1.0 (b/121209673).
  • Możesz teraz używać openActionBarOverflowOrOptionsMenu z FragmentScenario, aby testować menu opcji hostowanych w fragmentach (b/121126668).

Zmiany w interfejsie API

  • Dodano metodę requireArguments(), która zwraca @NonNull Bundle lub rzuca wyjątek IllegalStateException (b/121196360).
  • Dodano informację, że parametry getLifecycle(), getViewLifecycleOwner()getViewLifecycleOwnerLiveData() nie powinny być zastępowane i będą ostateczne w przyszłej wersji. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880714)
  • Dodano informację, że getViewModelStore() nie powinno być zastępowane i zostanie ostatecznie zastąpione w przyszłej wersji. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880713)
  • Wyeliminowano problem ze zgodnością binarną z poprzednimi wersjami Fragments. (aosp/887877) (aosp/889834)

Poprawki błędów

  • Fragmenty docelowe są prawidłowo usuwane, gdy przekazujesz null do setTargetFragment(). (aosp/849969)
  • Rozwiązaliśmy problem polegający na tym, że elementy docelowego Fragmentu niekiedy były niedostępne w ramach lub po onDestroy(). (b/122312935)
  • Metoda onDismiss() fragmentu DialogFragment jest teraz wywoływana przed onDestroy(). (aosp/874133) (aosp/890734)

Wersja 1.1.0-alpha03

17 grudnia 2018 r.

Nowe funkcje

  • Fragment implementuje teraz BundleSavedStateRegistryOwner i jest zależny od nowo wydanej biblioteki SavedState [aosp/824380]
  • Dodano obiekt delegowany by activityViewModels w usłudze Kotlin, aby pobierać modele ViewModel powiązane z zawierającą je aktywnością [b/119050253]
  • Delegat właściwości by viewModels w Kotlinie został rozszerzony o opcjonalną metodę lambda służącą do uzyskiwania wartości ViewModelStoreOwner. Dzięki temu możesz przekazywać fragment nadrzędny lub inną niestandardową wartość ViewModelStoreOwner za pomocą kodu takiego jak val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

Zmiany w interfejsie API

  • FragmentScenario pozwala teraz określić motyw, np. Theme.AppCompat [b/119054431]. To jest zmiana powodująca niezgodność.
  • Dodano metodę requireView(), która zwraca @NonNull View lub rzuca wyjątek IllegalStateException [b/120241368]
  • Dodano metodę requireParentFragment(), która zwraca @NonNull Fragment lub rzuca wyjątek IllegalStateException [b/112103783]

Poprawki błędów

  • Naprawiono błąd IllegalStateException: Failure saving state b/120814739
  • Fragmenty przywracane ze stanu zapisanej instancji będą teraz zawsze zawierać niezerową wartość Bundle [b/119794496]
  • Usuwane fragmenty nie używają ponownie obiektu Lifecycle, jeśli zostanie on ponownie dodany [b/118880674]

Wersja 1.1.0-alpha02

3 grudnia 2018 r.

Nowe funkcje

  • Rozszerzenia Kotlina dla FragmentScenario umożliwiają teraz używanie funkcji lambda do tworzenia fragmentów zamiast przekazywania instancji FragmentFactory. (aosp/812913)

Poprawki błędów

  • Usunięto błąd IllegalStateException podczas używania zagnieżdżonych fragmentów na stosie wstecz (b/119256498).
  • Usunięto awarię występującą podczas używania funkcji FragmentScenario.recreate() z funkcją FragmentFactory (aosp/820540).
  • Rozwiązaliśmy problem polegający na tym, że po usunięciu fragmentu nie można było uzyskać dostępu do docelowych fragmentów (aosp/807634).

Wersja 1.1.0-alpha01

5 listopada 2018 r.

To pierwsza wersja artefaktu fragment-testing i interfejsu FragmentScenario, który jest oparty na interfejsach androidx.test:core. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją dotyczącą testowania fragmentów.

Nowe funkcje

  • Nowa klasa FragmentScenario do testowania fragmentów w pojedynkę.
  • Możesz teraz ustawić FragmentFactory w dowolnym FragmentManager, aby kontrolować sposób tworzenia nowych instancji fragmentu.
  • Dodaliśmy nowy obiekt by viewModels(), który jest delegatem właściwości w Kotlinie i służy do pobierania widoków modelu z fragmentu.
  • Oczekujące zdarzenia wejściowe (np. kliknięcia) są teraz anulowane w elementach onStop() fragmentu.

Zmiany w interfejsie API

  • znacznie rozszerzyliśmy adnotacje dotyczące możliwości wystąpienia wartości null w interfejsie Fragment API.

Poprawki błędów

  • Rozwiązano problem, który powodował niepowodzenia operacji fragmentów w LiveData.(b/77944637)

Znane problemy

  • Po usunięciu fragmentu z FragmentManagera nie można uzyskać dostępu do elementów docelowych.
  • Wartość fragment-testing zależy od wartości androidx.test:core:1.0.0-beta01, a nie od prawidłowej wartości androidx.test:core:1.0.0.