Fragment

podzielić aplikację na kilka niezależnych ekranów hostowanych w ramach aktywności;
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca Wersja Beta Wydanie alfa
30 października 2024 r. 1.8.5 - - -

Deklarowanie zależności

Aby dodać zależność od fragmentu, musisz dodać do projektu repozytorium Google Maven. 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:

Groovy

dependencies {
    def fragment_version = "1.8.5"

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

Kotlin

dependencies {
    val fragment_version = "1.8.5"

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

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 nową bibliotekę, przejrzyj istniejące problemy w tej bibliotece. Możesz oddać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego zgłoszenia

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

Wersja 1.8

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 IllegalStateException wywoływany przez saveBackStack tylko po anulowaniu lub przerwaniu gestu przewidywania tekstu 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 zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że szybkie naciśnięcie systemowego przycisku Wstecz lub szybkie cofnięcie gestu powodowało awarię fragmentów kodu podczas korzystania z przejść 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. (DEA)

Wersja 1.8.3

4 września 2024 r.

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

Poprawki błędów

  • FragmentManager teraz podczas obsługi gestów wstecz przewidujących prawidłowo uwzględnia oczekujące operacje. Dzięki temu przywrócenie systemu nie będzie już powodować 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.

Usługa androidx.fragment:fragment-*:1.8.2 została zwolniona. Wersja 1.8.2 zawiera te komity.

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ą na 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 zatwierdzenia.

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.

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

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. Powinno to być bezpośrednie zastąpienie wcześniej zalecanego sposobu korzystania z funkcji AndroidViewBinding do rozszerzania fragmentu kodu.
  • 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 uruchamiane w ramach operacji wykonywania w FragmentManager, przybliżając je zgodnie z czasem wywołania zwrotnego onBackStackChangeCommitted. (I5ebfb, b/332916112)

Wersja 1.8.0-beta01

14 maja 2024 r.

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

Poprawki błędów

  • Od fragmentu 1.7.1: prognozowanie wstecz będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają przejście w postaci animacji lub przewijania Androidx. Rozwią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-alfa02 zawiera te zatwierdzenia.

Poprawki błędów

  • Z Fragmentu 1.7.0-rc02: dodano logi, które wskazują, 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. 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 zatwierdzenia.

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 przenoszenia Zasób XML Obsługuje predykcyjne plecy
Animation R.anim Nie
Animator R.animator Tak
Platforma Transition R.transition Nie
AndroidX Transition z przejściem na wersję 1.4.1 lub starszą R.transition Nie
AndroidX 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 funkcje onBackStackChangeProgressed() i onBackStackChangeCancelled() do otrzymywania odpowiednio zdarzeń związanych z przewidywanym postępem wstecznym i zdarzeń anulowanych.

Fragment Compose Artifact

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

Pierwszą funkcją dostępną w tym nowym 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.

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

Poprawki błędów

  • Dodano logi, aby wskazać, dlaczego ustawienie sharedElement bez żadnych innych przejść nie będzie działać. (Iec48e)
  • Naprawiono błąd polegający na tym, że w przypadku dodania niewyszukanego udostępnionego elementu do transakcji, w których można było przewinąć wszystkie pozostałe przejścia, dochodziło do awarii. 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 zatwierdzenia.

Aktualizacja zależności

Wersja 1.7.0-beta01

20 marca 2024 r.

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

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że po zatwierdzeniu gestu wstecz na fragmencie, który nie znajduje się w kontenerze, ten fragment nigdy nie był usuwany. Fragment zostanie natychmiast przeniesiony do stanu ostatecznego. (Ida0d9)
  • Naprawiono błąd we fragmentach „Fragmenty”, który powodował, że przerywanie przychodzących przejść gestem przewidywania skutkowało zniszczeniem widoku wejściowego i pozostawaniem pustego ekranu. (Id3f22, b/319531491)

Wersja 1.7.0-alpha10

7 lutego 2024 r.

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

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.

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

Fragment Compose Artifact

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

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

class ExampleFragment : Fragment() {

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

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

Nowe funkcje

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

Znany problem

  • Jeśli używasz obsługi przewidywanego przycisku Wstecz w Fragmentach w przypadku Animator lub przejścia w AndroidX, Fragmenty będą wywoływać błąd NullPointerExceptionhandleOnBackProgressed, jeśli za pomocą addOnBackStackChangedListener nie dodano FragmentManager.OnBackStackChangedListener. Ręczne dodanie listenera pozwoli uniknąć awarii. Poprawka dla tego problemu będzie dostępna w następnej wersji fragmentu kodu.

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

  • Naprawiono NullPointerException powodowany przez ustawienie przejścia dla udostępnianego elementu oraz brak możliwości ustawienia 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)
  • Z Fragment 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 nadrzędne ViewModels. (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 korzystać z wersji 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ć. Aby wyłączyć prognozowanie wsteczne, użyj funkcji FragmentManager.enabledPredictiveBack(false) w sekcji onCreate() aktywności.

Wersja 1.7.0-alpha04

6 września 2023 r.

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 szybkiego dwukrotnego przejścia wstecz w drugim od końca fragmencie stosu powodował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 podczas korzystania z funkcji przewidywania cofnięcia, który powodował pominięcie pierwszego fragmentu w steku fragmentów menedżera fragmentów i zakończenie aktywności po użyciu systemu cofnięcia za pomocą 3 przycisków lub gestu przewidywania 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 funkcją przewidywania gestów Wstecz z interfejsu API 34, a korzystasz z systemu przejścia, który nie obsługuje przewijania (Animations, Transitions) lub nie obsługuje żadnych przejść, przed wykonaniem działania cofania fragmenty czekają teraz na zakończenie gestu. (I8100c)

Wersja 1.7.0-alpha01

7 czerwca 2023 r.

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

Nowe funkcje

  • Fragmenty kodu obsługują teraz prognozowanie w aplikacji przy korzystaniu z funkcji Animator. Dzięki temu możesz użyć gestu 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 zgłoszeniu 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 zatwierdzenia.

Poprawki błędów

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

Aktualizacja zależności

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

Wersja 1.6.0

7 czerwca 2023 r.

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

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 wywołania zwrotne onBackStackChangeStarted i onBackStackChangeCommitted, które są wywoływane z każdym elementem Fragment tuż przed dodaniem ich do stosu fragmentów lub z nich bezpośrednio po zatwierdzeniu transakcji.
  • FragmentStrictMode dodało nową funkcję WrongNestedHierarchyViolation, która wykrywa, kiedy fragment podrzędny jest zagnieżdżony w hierarchii widoku nadrzędnego, ale nie został dodany do childFragmentManager nadrzędnego.
  • Interfejsy API Fragment i FragmentManager, które przyjmują Intent lub IntentSender, są teraz odpowiednio oznaczone adnotacjami @NonNull. Zapobiega to przekazywaniu wartości null jako wartości null, które zawsze powodowałyby natychmiastową awarię odpowiednich interfejsów API platformy Androida, do których wywoływały te metody.
  • 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 jest teraz zależny od elementu 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 rozbieżnością wersji między fragment-testingandroidx.test.

Wersja 1.6.0-rc01

10 maja 2023 r.

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

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że 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ł, że wywołania zwrotne onBackStackChangeListener były wysyłane w przypadku transakcji, które w rzeczywistości nie wpływały na tylny stos, jeśli były pomieszane z transakcjami, które takie działanie miały. (I0eb5c, b/279306628)

Wersja 1.6.0-beta01

19 kwietnia 2023 r.

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

Poprawki błędów

  • Użycie elementu postponeEnterTransition z określonym czasem oczekiwania, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku przełożonego 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-alfa09 zawiera te zatwierdzenia.

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 gdy nie są wywoływane z głównego wątku, będą generować błędy kompilacji zamiast czekać na niepowodzenie 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.

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

Zmiana działania

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

Poprawki błędów

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

Aktualizacje zależności

Wersja 1.6.0-alpha07

8 marca 2023 r.

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

Poprawki błędów

  • 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-alfa06 zawiera te zatwierdzenia.

Zmiany w zachowaniu

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

Wersja 1.6.0-alpha05

8 lutego 2023 r.

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

Nowe funkcje

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

Zmiany w interfejsie API

  • 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 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 dodało nową funkcję WrongNestedHierarchyViolation, która wykrywa, kiedy fragment podrzędny jest zagnieżdżony w hierarchii widoku nadrzędnego, ale nie został dodany do 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

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

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

  • Klasy rozszerzające DialogFragment będą teraz musiały wywoływać super w swoich zastąpieniach onDismiss(). (I14798, b/238928865)

Poprawki błędów

  • Naprawiono regresje spowodowane 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.

androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02 i androidx.fragment:fragment-testing:1.6.0-alpha02 zostały udostępnione. Wersja 1.6.0-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 fragmentów kodu Animation/Animator. (Ib1c07, b/214835303)

Wersja 1.6.0-alpha01

27 lipca 2022 roku

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

Zmiany w zachowaniu

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

Poprawki błędów

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

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

  • Naprawiono błąd, który powodował, że usunięcie fragmentu (niezależnie od tego, czy dodano pozycje w menu, czy nie) skutkowało unieważnieniem menu aktywności. (50f098, b/244336571)
  • Rozwiązaliśmy problem, który powodował, że wywołanie clearFragmentResultListener w ramach setFragmentResultListener nie działało, jeśli Lifecycle było 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 wysłania do fragmentów podrzędnych. (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

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

Wersja 1.5.2

10 sierpnia 2022 r.

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

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

Aktualizacja zależności

Wersja 1.5.0

29 czerwca 2022 r.

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

Ważne zmiany od wersji 1.4.0

  • Integracja z CreationExtrasFragment może teraz udostępniać bezstanową ViewModelProvider.Factory za pomocą CreationExtras w 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. Ma to pomóc w jasnym zidentyfikowaniu stanu zapisanego we fragmencie oraz jego źródła. 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 poszczególnymi fragmentami jest teraz zapisywany osobno od wewnętrznego stanu FragmentManager, co pozwala na powiązanie 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 za pomocą 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 odpowiednich właściwościach 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 stanu wewnętrznego 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 synchroniczne zaktualizowanie stanu FragmentManager. (I15c36, b/72644830)

Refaktoryzacja stanu zapisanej instancji

  • FragmentManager zapisuje teraz zapisany stan instancji w Bundle, a nie bezpośrednio w niestandardowym Parcelable. To pierwszy krok na drodze do uzyskania dodatkowego wglądu w to, co faktycznie jest zapisywane przez fragmenty. (I93807, b/207158202)
  • Wyniki 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 uzyskasz lepszy wgląd w wyniki, które są zapisywane w ramach stanu zapisanej instancji. (I6ea12, b/207158202)

Wersja 1.5.0-alpha05

6 kwietnia 2022 roku

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 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 innych firm omijanie określonych kar za naruszenie zasad dzięki użyciu allowViolation() z nazwą klasy. (I8f678)

Wersja 1.5.0-alpha01

26 stycznia 2022 r.

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-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Z fragmentu 1.4.1: FragmentContainerView nie zgłasza już niedozwolonego wyjątku stanu, gdy identyfikatory widoków wygenerowane na podstawie pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • 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)
  • Rozwiązaliśmy problem, który powodował awarię, która powodowała pierwszy raz dostęp do elementu ViewModel z wywołania zwrotnego registerForActivityResult() elementu Fragment. (Iea2b3)

Wersja 1.4

Wersja 1.4.1

26 stycznia 2022 r.

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 wyrzuca 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 lambda ownerProducer z funkcją opóźnioną by viewModels(), będzie ona teraz używać defaultViewModelProviderFactory z 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.

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

Ważne zmiany 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(). Te zasady mają zastosowanie do FragmentManager i 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 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 warstw podparcia

FragmentManager zarządza stosem odtwarzania, który składa się z transakcji fragmentów, które używają addToBackStack(). Dzięki temu możesz skomentować te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywania stanu z fragmentami, które umożliwiają odpowiednie przywracanie stanu fragmentów.

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 historii, zapisując bieżący stos i przywracając zapisany.

Funkcja saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczna i powoduje cofnięcie wszystkich transakcji dotyczących fragmentów z powrotem do tej konkretnej nazwy, a wszystkie dodane fragmenty do zniszczenia i usunięcia. Różnice występują pod kilkoma ważnymi względami:

  • saveBackStack() jest zawsze uwzględniane.
  • W przeciwieństwie do funkcji popBackStack(), która powoduje wypychanie wszystkich transakcji na stosie wstecznym, jeśli nie znaleziono określonej nazwy na stosie wstecznym lub jeśli podano pustą nazwę, funkcja saveBackStack() nie robi nic, jeśli wcześniej nie zaakceptowano transakcji 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 funkcją 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 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 warstw ścieżki wstecznej: 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

androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 i androidx.fragment:fragment-testing:1.4.0-beta01 zostały udostępnione. Wersja 1.4.0-beta01 zawiera te 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 o długości 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

  • Dodaliśmy ostrzeżenie dotyczące lintowania DetachAndAttachFragmentInSameFragmentTransaction w celu wykrycia wywoływania zarówno detach(), jak i attach() na tym samym Fragment w tej samej FragmentTransaction. Ponieważ te uzupełniające operacje wykonują się wzajemnie w ramach jednej transakcji, muszą zostać rozdzielone na osobne transakcje, aby można było wykonać określone działanie. (aosp/1832956, b/200867930)
  • Dodano błąd lint FragmentAddMenuProvider, aby poprawić użycie FragmentLifecycle w FragmentViewLifecycle podczas używania interfejsu addMenuProviderMenuHost. (aosp/1830457, b/200326272)

Aktualizacje dokumentacji

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

Wersja 1.4.0-alpha09

15 września 2021 r.

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

  • Teraz możesz wywołać funkcję clearBackStack(name), aby wykasować stan zapisany wcześniej za pomocą funkcji 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

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

Poprawki błędów

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

Wersja 1.4.0-alpha07

18 sierpnia 2021 r.

Wersje androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 i androidx.fragment:fragment-testing:1.4.0-alpha07 zostały udostępnione bez istotnych zmian. Wersja 1.4.0-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 warstwami przy szybkim przełączaniu się między nimi. Podczas przywracania IllegalStateException pojawiała się IllegalStateException lub druga kopia fragmentu.FragmentTransaction (I9039f)
  • Rozwiązaliśmy problem, który powodował, że usługa FragmentManager zachowywała kopię stanu zapisaną wcześniej przez saveBackStack() nawet po przywróceniu stanu. (Ied212)
  • Metoda dismissAllowingStateLoss() 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ą wartość transitionGroup=”true”. (aosp/1766655, b/193603427)
  • Fragmentu 1.3.6: FragmentActivity zawsze odblokowuje teraz 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.

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

Zmiany w interfejsie API

  • FragmentManager używa teraz modułu SavedStateRegistry dla zaawansowanych, aby zapisać swój stan. Metody saveAllState() i restoreSavedState() zostały również wycofane w metodzie FragmentController. Jeśli używasz FragmentController do hostowania fragmentów poza 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 uruchomieniem funkcji FragmentTransaction, która używała funkcji replace(). (I73137)
  • Naprawiono błąd NullPointerException, który występował po ręcznym przywracaniu zapisanego zbioru danych z wieloma transakcjami podczas korzystania z interfejsu API restoreBackStack() do obsługi wielu zbiorów danych z danymi. 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ł 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.

androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 i androidx.fragment:fragment-testing:1.4.0-alpha03 zostały udostępnione. Wersja 1.4.0-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)
    • FragmentTagUsageViolation zawiera teraz bardziej szczegółowy komunikat o błędzie kontenera nadrzędnego, do którego należałoby dodać fragment. (Ic33a7)
    • WrongFragmentContainerViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera kontener, do którego dodano fragment. (IB55f8).
    • Klasy przypadków użycia w TargetFragmentUsageViolation mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie oraz inne informacje. (Icc6ac)
    • Klasy rozszerzające klasę RetainInstanceUsageViolation zawierają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie. (I6bd55)
    • FragmentReuseViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera poprzedni identyfikator fragmentu. (I28ce2).
    • SetUserVisibleHintViolation zawiera teraz bardziej szczegółowy komunikat o błędzie zawierający wartość wskazówkę widoczną dla użytkownika. (Ib2d5f)

Zmiany w zachowaniu

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

Poprawki błędów

  • Z wersji Fragment 1.3.5: rozwiązano regresję w przypadku przejść elementów współdzielonych wprowadzoną w wersji Fragment 1.3.4 przez aosp/1679887. Fragmenty prawidłowo obsługują teraz grupy przejść (ustawione bezpośrednio przez transitionGroup="true" lub pośrednio za pomocą transitionName bądź background), a udostępnione elementy nie będą już zgłaszać elementów IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)
  • FragmentManager nie będzie się już zawieszać, gdy spróbujesz ukryć fragment do usunięcia. (I573dd, b/183634730)
  • Kontrola lintowania OnCreateDialogIncorrectCallback nie będzie już powodowała awarii podczas oceny zmiennej najwyższego poziomu. (0a9efa, b/189967522)

Wersja 1.4.0-alpha02

2 czerwca 2021 r.

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-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • Gdy FragmentStrictMode jest włączone, FragmentManager będzie zawsze rejestrować naruszenia niezależnie od tego, która zasada trybu ścisłego jest obecnie używana. (I02df6, b/187872638)
  • FragmentStrictMode umożliwia teraz wykluczenie określonych klas Fragment z trybu ścisłego Violation, co pozwala tej klasie na pominięcie kar. (Ib4e5d, b/184786736)

  • Klasa FragmentStrictMode Violation została rozszerzona o informacje strukturalne na podstawie każdego naruszenia. Pozwoli Ci to sprawdzić dokładnie, co spowodowało naruszenie zasad, wraz z fragmentem naruszającym zasady (If5118, b/187871150), każdy element Violation ma następujące elementy:

    • 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 komponencie SetTargetFragmentUsageViolation. (I741b4, b/187871150)
    • SetUserVisibleHintViolation zawiera teraz wartość logiczną przekazywaną do setUserVisibleHint(). (I00585, b/187871150)
    • FragmentTagUsageViolation zawiera teraz grupę widoków, w której tag <fragment> próbował rozszerzyć fragment.(I5dbbc, b/187871150)
    • FragmentReuseViolation zawiera teraz unikalny identyfikator poprzedniej instancji Fragment, która spowodowała naruszenie. (I0544d, b/187871150)
    • RetainInstanceUsageViolation jest teraz abstrakcyjny 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 aktywności pochodząca z motywu. (I46652)

Wiele wstecznych stosów

FragmentManager zarządza stosem odtwarzania, który składa się z transakcji fragmentów, które używają addToBackStack(). Dzięki temu możesz skomentować te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywania stanu z fragmentami, które umożliwiają odpowiednie przywracanie stanu fragmentów.

W tej wersji rozszerzamy te mechanizmy o 2 nowe interfejsy API FragmentManager: saveBackStack(String name) i restoreBackStack(String name). Te interfejsy API używają tego samego 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 historii, zapisując bieżący stos i przywracając zapisany.

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ędniane.
  • W przeciwieństwie do funkcji popBackStack(), która powoduje wypychanie wszystkich transakcji na stosie wstecznym, jeśli nie znaleziono określonej nazwy na stosie wstecznym lub jeśli podano pustą nazwę, funkcja saveBackStack() nie robi nic, jeśli wcześniej nie zaakceptowano transakcji 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 funkcją 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 saveBackStack(), restoreBackStack() nie robi nic, jeśli wcześniej nie było wywoływane saveBackStack() o tej samej nazwie. (B/80029773)

Fragment StrictMode

Interfejsy API FragmentStrictMode udostępniają testy środowiska wykonawczego, które pozwalają sprawdzić, czy aplikacja lub biblioteki, z których korzystasz, nie wywołują wycofanych interfejsów API z fragmentami. 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. (#123, #131, #150, b/143774122)

  • detectFragmentReuse() wykrywa, czy wcześniej usunięta instancja Fragment jest ponownie dodawana do FragmentManager. 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 do kontenera dodasz fragment, który nie jest FragmentContainerView. Zawsze używaj FragmentContainerView jako kontenera na fragmenty w układzie. (nr 146, b/181137036)
  • detectRetainInstanceUsage() wykryje, gdy 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() wykrywa, kiedy używasz wycofanych interfejsów API setTargetFragment(), getTargetFragment() lub getTargetRequestCode(). (#139, b/153737745)

Zmiany interfejsu API

Nowe kontrole Lint

  • Funkcja sprawdzania licencji UseGetLayoutInflater ostrzega teraz, gdy używasz elementu LayoutInflater.from(Context) w obiekcie DialogFragment. Aby uzyskać właściwą dla elementu LayoutInflater, należy zawsze używać metody getLayoutInflater() fragmentu okna dialogowego. (#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. W tych przypadkach Fragmenty używają teraz prawidłowo wartości ViewModelProvider.Factory, jeśli zastępuje ona wartość getDefaultViewModelProviderFactory() (jak w przypadku adnotowanych Fragmentów @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)
  • Z Fragmentu 1.3.4: jeśli używasz FragmentContainerView w interfejsie API 29, wstawienia nie będą już wysyłane w nieskończoność, co rozwiąże problemy z instancjami BottomNavigationBar i FloatingActionButton. (I1bb78, b/186012452)
  • 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)
  • Z fragmentu 1.3.4: przejście udostępnianego elementu w grupie ViewGroup, jeśli w ViewGroup ma wartość transitionGroup o wartości false (fałsz), zostanie ono prawidłowo przeniesione. (I99675)

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

Wersja 1.3

Wersja 1.3.6

21 lipca 2021 r.

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

Poprawki błędów

  • Od fragmentu 1.4.0-alpha03: element FragmentManager nie będzie już ulegać awarii, gdy spróbujesz ukryć usunięty fragment. (I573dd, b/183634730)
  • Widok fragmentu jest teraz 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

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

Wersja 1.3.4

18 maja 2021 r.

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() w Fragment przy użyciu Hilt. Te przypadki użycia teraz prawidłowo korzystają z ViewModelProvider.Factory podanego przez Twój fragment, jeśli zastępuje on getDefaultViewModelProviderFactory() (jak ma to miejsce w przypadku fragmentów z adnotacjami @AndroidEntryPoint). Jeśli nie zastąpisz tej metody, jako domyślna metoda fabryczna zostanie utworzona metoda SavedStateViewModelFactory, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Jeśli używasz interfejsu FragmentContainerView w interfejsie API 29, wstawienia nie będą już wysyłane w nieskończoność, co rozwiąże problemy z instancjami BottomNavigationBar i FloatingActionButton. (I1bb78, b/186012452)
  • 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 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 wyświetlania FragmentTransaction, który zawierał 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. Rozwiązano w ten sposób 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 nowym 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 określać kierunek wszystkich animacji, a nie tylko animacji otwierania i zamykania. (I7072e, b/181142246)
  • Podczas przejścia w ramach hierarchii udostępnionego elementu nazwa przejścia nie będzie już usuwana. (I4d4a6, b/179934757)

Aktualizacje zależności

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

Wersja 1.3.1

10 marca 2021 r.

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

Nowe funkcje

  • 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)
  • Na końcu fragmentu nie ma już dodatkowego elementu } 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 nowym 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 przejęciami, które zaczynają się przed rozmieszczeniem fragmentu, będą teraz prawidłowo docierać do RESUMED (Ic11e6, b/180825150)
  • Fragmenty napompowane za pomocą tagu <fragment> będą teraz zawsze docierać 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 commity.

Najważniejsze zmiany od wersji 1.2.0

  • Nowy menedżer stanu: znaczące przepisanie wewnętrznych elementówFragmentManager 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 Activity Result API: dodano obsługę interfejsu ActivityResultRegistry API wprowadzonego w Activity 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 wybierania wyniku z aktywności.

    • W tej wersji rozwiązaliśmy kilka problemów związanych z nieprawidłowymi kodami żądań i wysyłaniem próśb o uprawnienia, 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. Działa to w przypadku fragmentów hierarchii (nadrzędny/podrzędny), DialogFragments i fragmentów w Nawigacji. Zapewnia też, że wyniki są wysyłane tylko do Twojego fragmentu, gdy jego wartość wynosi co najmniej STARTED. Interfejsy API fragmentów docelowych zostały wycofane i zastąpione nowymi interfejsami. Zobacz Pobieranie wyników za pomocą interfejsu Fragment Result API.

  • FragmentOnAttachListener: wywołanie zwrotne onAttachFragment() w przypadku FragmentActivityFragment zostało wycofane. Dodano nową metodę FragmentOnAttachListener, która zapewnia bardziej elastyczną alternatywę, umożliwiającą delegowanie onAttachFragment() do oddzielnych, testowalnych odbiorców oraz obsługę dodawania odbiorców 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 interfejsie 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 podczas używania 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. Pozwala to deweloperom używać normalnego, niezachowanego fragmentu i zachowywania konkretnego stanu, który chce zachować oddzielnie. Pozwala to uniknąć wspólnego źródła wycieków, a jednocześnie zachować przydatne właściwości pojedynczego utworzenia i zniszczenia zachowanego stanu (czyli konstruktora ViewModel i otrzymanego przez niego wywołania zwrotnego onCleared()).

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

Wersja 1.3.0-rc02

27 stycznia 2021 r.

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, który powodował, że po zmianie konfiguracji element nadrzędny DialogFragment pojawiał się nad podrzędnym DialogFragment. Fragmenty okien podrzędnych zawsze są teraz wyświetlane nad nadrzędnym fragmentem okna. (I30806, b/177439520)
  • Rozwią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 nowym 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 z parametrem Animator wyświetlają się teraz w odpowiedniej kolejności podczas korzystania z tagu FragmentContainerView. (Id9aa3, b/176089197)

Wersja 1.3.0-rc01

16 grudnia 2020 roku

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 nowym 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)
  • Zaznaczenie jest teraz prawidłowo przywracane do widoków głównych fragmentów kodu po ich wznowieniu. (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 zatwierdzenia.

Nowe funkcje

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

Zmiany w działaniu

  • Obiekty FragmentContainerView, które nie rozszerzają fragmentu za pomocą atrybutu class lub android:name, mogą być teraz używane poza FragmentActivity. (Id4397, b/172266337)
  • Próba ustawienia maksymalnego cyklu życia fragmentu na DESTROYED spowoduje teraz błąd IllegalArgumentException (Ie7651, b/170765622)
  • Inicjowanie FragmentScenario w stanie DESTROYED spowoduje teraz wyjątek IllegalArgumentException (I73590, b/170765622)

Poprawki błędów w nowym 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)
  • Wyjściowe fragmenty, których efekty zostały wycofane, są teraz prawidłowo anulowane i ponownie uruchamiane z odpowiednim efektem wejścia. (I62226, b/167092035)
  • Rozwiązaliśmy problem, który powodował, że nie działała funkcja wyjścia Animator z funkcji hide(). (Id7ffe)
  • Fragmenty są teraz prawidłowo wyświetlane, gdy są odkładane, a następnie natychmiast uruchamiane. (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

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

Nowe funkcje

  • setMaxLifecycle() 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 następnie od setMaxLifecycle() do CREATED, teraz prawidłowo uruchamiają efekty wyjścia. (b/165822335)
  • Usunięcie oderwanego fragmentu, który nie został dodany do stosu z powrotem, nie powoduje już wycieku pamięci. Dzięki uprzejmości Nicklasa Ansmana Giertza! (b/166489383)
  • Aktywne fragmenty mają teraz atrybut FragmentManager o wartości innej niż null, a fragmenty z wartością FragmentManager inną niż null zawsze będą uważane za aktywne. (Aosp/1422346).
  • Domyślne efekty fragmentów, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE i TRANSIT_FRAGMENT_FADE, są teraz używane jako Animator zamiast Animation. (b/166155034)

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

  • Fragmenty teraz prawidłowo przywracają stan skupienia widoku tuż przed rozpoczęciem animacji. (Icc256)
  • Fragmenty, które mają tylko wspólne przejście elementu, mają teraz prawidłowo wypełnione efekty specjalne, co oznacza, że przechodzą do ostatecznego stanu (Iaebc7, b/166658128).
  • Widoki fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876)
  • Nowy menedżer stanu konsekwentnie usuwa widok fragmentu przed dodaniem widoku wejścia. (I41a6e)
  • Jawne zmiany w widoczności widoku fragmentów są teraz respektowane przez nowego menedżera stanu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu 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.

Nowy menedżer stanu

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

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

Te problemy 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 kodu uniemożliwiają teraz wyświetlanie kilku konkurujących animacji w przypadku tych samych fragmentów, co pozwala uniknąć sytuacji, w której element Animation zastąpiłby wszystkie efekty Transition lub Animator i Transition w pojedynczym fragmencie. (b/149569323)
  • 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 utkną już w stanie CREATED, lecz przejdą 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 metody registerForActivityResult() po metodzie 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 sekcji Aktywność 1.2.0-alpha08 do przywrócenia stanu FragmentManager. Wszystkie detektory dodane do podklas FragmentActivity będą uruchamiane po tym detektorze. (I513da)

Poprawki błędów

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

Znany problem

  • Jeśli używasz nowego menedżera stanu, ustawienie bezpośrednio 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.

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

Nowe funkcje

  • FragmentScenario umożliwia teraz ustawienie początkowego stanu cyklu życia CREATED, STARTED lub RESUMED zamiast zawsze przenoszenia fragmentu do stanu RESUMED. (b/159662750)
  • Dodano alternatywę dla interfejsu API FragmentScenario w interfejsie onFragment 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 elementu zostanie zapisany i przywrócony jednocześnie z widokiem fragmentu. (b/158503763)

Poprawki błędów

  • Fragmenty czekają teraz na dołączenie widoku fragmentu przed wywołaniem funkcji ViewCompat.requestApplyInsets(). Pozwala to uniknąć sytuacji, w których żądanie wstawienia zostało odrzucone. (b/158095749)
  • Wywołanie 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łania zwrotne onAttachFragment() w elementach FragmentActivityFragment zostały wycofane. Dodaliśmy nowy element FragmentOnAttachListener, który stanowi bardziej elastyczną alternatywę, która umożliwia delegowanie elementów onAttachFragment() do rozdzielania, możliwych do testowania detektorów oraz obsługę dodawania detektora do obiektów FragmentManager innych niż bezpośredni podrzędny element FragmentManager. (I06d3d)

Poprawki błędów

  • 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 DialogFragment wyświetla inny DialogFragment jako fragment podrzędny. (b/157195715)
  • Rozwiązaliśmy problem, który powodował, że kontrola licencji UseRequireInsteadOfGet nie obsługiwała prawidłowo łańcuchowych przypadków użycia operatorów ?. i !!. (b/157677616)

Wersja 1.3.0-alpha05

20 maja 2020 r.

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 BundleFragmentResultListener, które nie mogą być równe null. 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 tylko z mniejszych bitów (poniżej 0xFFFF) w przypadku kodów żądań podczas używania tych interfejsów API. (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 fragmentów docelowych 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)
  • Zmiana niezgodność z Aktywności 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 setMenuVisibility(false) we fragmencie powoduje teraz prawidłową zmianę widoczności menu dostarczanych 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

Kwiecień 1, 2020

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 w fragmentach. (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)
  • Zmiany w 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. Zobacz zaktualizowaną wersję artykułu Pobieranie 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 napełnić 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)
  • Z fragmentu 1.2.3: FragmentContainerView nie wysyła już żądania UnsupportedOperationException za użycie nieprawidłowego konstruktora w podglądzie układu. (b/149707833)

Znane problemy

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

Wersja 1.3.0-alpha01

Marzec 4, 2020

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 zatwierdzenia.

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ć 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()). (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 teraz prawidłowo zachowują konstruktory domyślne tylko w klasach Fragment, które są używane, a nie we wszystkich wystąpieniach Fragment, co rozwiązuje problem regresji wprowadzony 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. Zostało to wcześniej opublikowane we Fragmentie 1.3.0-alpha04. (b/154645875)
  • Wywołanie funkcji setMenuVisibility(false) w fragmentach teraz prawidłowo zmienia widoczność menu udostępnianych przez jego podrzędne fragmenty. Zostało to wcześniej opublikowane we Fragmentie 1.3.0-alpha04. (b/153593580)

Wersja 1.2.4

Wersja 1.2.4

1 kwietnia 2020 r.

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

Poprawki błędów

  • Zaktualizowano reguły 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)
  • Ograniczyliśmy zakres uwzględnionych reguł ProGuard fragmentu, aby umożliwić usuwanie nieużywanych klas fragmentów kodu. (b/149665169)
  • Rozwiązano problem z fałszywie pozytywnymi 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 zaleca używanie interfejsu viewLifecycleOwner jako LifecycleOwner do nawiązywania połączeń z interfejsem OnBackPressedDispatcher w usługach onCreateView(), onViewCreated() i onActivityCreated(). (b/142117657)
  • Dodaliśmy nowy sprawdzanie licencji, które potwierdza, że podczas korzystania z artefaktu fragment-testing używasz właściwego debugImplementation. (b/141500106)
  • W przypadku fragmentów kodu sugerujemy teraz użycie powiązanych metod require___() w celu uzyskania bardziej opisowych komunikatów o błędach zamiast checkNotNull(get___()), requireNonNull(get___()) lub get___()!! w przypadku wszystkich interfejsów API fragmentów, które zawierają odpowiedniki get i require. (aosp/1202883)

Poprawki błędów

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

Wkład zewnętrzny

  • Dziękujemy Zacowi Sweersowi za udostępnienie require___() kontroli jakości kodu po stronie 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 add i replace, które przyjmują instancję Class (lub wersje zmodyfikowane przez Kotlin), mają teraz domyślny konstruktor zachowywany 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> zawsze otrzymują wywołanie funkcji onInflate() przed onCreate() w ramach układu. (aosp/1215856)
  • Wywołanie toString() w wystąpieniu FragmentManager nie powoduje już wywołania NullPointerException, jeśli aktywność została już zniszczona. (b/148189412)

Zmiany 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 FrameLayout lub inne układy. 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>.
  • Czas onDestroyView(): fragmenty czekają teraz na zakończenie animacji wyjścia, przejściami platformy wyjściowej i przejścia AndroidaX (w przypadku korzystania z przejścia 1.3.0) przed wywołaniem funkcji onDestroyView().
  • Funkcje add()replace() oparte na klasie: dodano 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 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 używasz getViewLifecycleOwner() podczas obserwowania LiveData z onCreateView(), onViewCreated() lub onActivityCreated().
  • Wycofanie metody getFragmentManager(): metody getFragmentManager()requireFragmentManager() w klasie Fragment zostały wycofane i zastąpione jedną metodą getParentFragmentManager(), która zwraca niezerową 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 ponownego kompilowania aplikacji.

Znane problemy

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

Wersja 1.2.0-rc05

8 stycznia 2020 r.

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

Poprawki błędów

  • 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 z tagiem <fragment> są teraz prawidłowo usuwane z innych ustawień, nawet jeśli występują tylko czasami w układzie (tzn. tylko w układzie poziomym). W rezultacie 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.

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

Poprawki błędów

  • 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

  • Doprecyzowaliśmy dokumentację dotyczącą wycofywania aplikacji 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 zależności

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

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

Poprawki błędów

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

  • Wywołania zwrotne onDismiss i onCancel funkcji DialogFragment gwarantują teraz, że przekaz do nich DialogInterface nie ma wartości null, a pole getDialog() zwraca wartość inną niż null po ich wykonaniu. (b/141974033)
  • Funkcja FragmentContainerView dodaje teraz fragment zdefiniowany przez class lub android:name w ramach napełniania, dzięki czemu funkcje findFragmentById()findFragmentByTag() działają natychmiast po jej wykonaniu. (b/142520327)
  • Naprawiono IllegalStateException w FragmentContainerView z powodu zapisywania 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. Do czasu rozwiązania tego problemu poprzez aapt2 wyłączyliśmy regułę Lint sugerującą przejście do: FragmentContainerView. (b/142601969)

Wersja 1.2.0-beta02

11 października 2019 r.

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

Poprawki błędów

  • 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> FragmentContainerView używa normalnego tagu FragmentTransaction znajdującego się poza infrastrukturą, aby dodać początkowy fragment. Umożliwia to dalsze operacje FragmentTransaction w elemencie FragmentContainerView i umożliwia korzystanie z powiązania widoku dla układu. (b/139830628, b/141177981)
  • Fragmenty zawierają teraz ostrzeżenie 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)
  • Jeśli używasz przejścia 1.3.0-beta01, fragmenty kodu prawidłowo zamykają teraz przejścia typu androidx.transition przed rozpoczęciem nowych przejść / animacji w tym samym kontenerze. (aosp/1119841)
  • Rozwiązaliśmy problem występujący w wersji API 17 i starszych, gdy podczas korzystania z elementu FragmentContainerView w widoku rdzeniowym Fragmentu używane były 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-alfa04 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)
  • Naprawiono błąd, który powodował, że fragmenty kodu powodowały wywołanie funkcji Activity.findViewById(), a wcześniej nie. (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 interfejsu API

Poprawki błędów.

  • FragmentContainerView teraz prawidłowo odwraca kolejność rysowania podczas wysuwania fragmentów z tylnego stosu. (b/139104187)
  • Naprawiono błąd, który powodował, że w przypadku jednoczesnego wyskakującego fragmentu i dodawania nowego fragmentu była uruchamiana nieprawidłowa animacja. (b/111659726)
  • Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, które zostały naprawione 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ą w przypadku używania by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z Fragment. (b/135716331)
  • Domyślne animacje podczas korzystania z TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADEsetTransition na urządzeniu 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 FragmentContainerView jako zdecydowanie zalecany kontener dla dynamicznie dodawanych fragmentów kodu. Zastępuje on użycie konstrukcji FrameLayout itp., ponieważ rozwiązuje problemy z układem kolejności animacji w animacji i wstawienia okien wysyłane do fragmentów kodu. (b/37036000, aosp/985243, b/136494650)
  • Dodano statyczną metodę FragmentManager.findFragment(View) do pobierania zawierającego fragment kodu z widoku powiększonego przez fragment. Rozszerzenie Kotlin jest 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 obiekcie 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: naprawiliśmy problem, który powodował, że wywołanie funkcji postponeEnterTransition() z większym czasem oczekiwania nie anuluje wcześniejszych limitów czasu. (b/137797118)
  • 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 nadrzędnego fragmentu. (b/116675313)
  • Naprawiono NullPointerException występujące podczas korzystania z przejść udostępnionych elementów oraz łączenia operacji wyskakujących i dodawania. (b/120507394)
  • Dodano obejście zabezpieczeń IllegalStateException w przypadku korzystania z FragmentPagerAdapter i FragmentStatePagerAdapter w testach Robolectric. (b/137201343)

Wersja 1.2.0-alpha01

2 lipca 2019 r.

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 wcięcia. (b/135945162)

Poprawki błędów.

  • Rozwiązano błąd NullPointerException występujący podczas wyświetlania 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 wprowadzone 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() do uzyskiwania dostępu do ViewModels powiązanych z poszczególnymi fragmentami oraz by activityViewModels() do uzyskiwania dostępu 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(). FragmentPagerAdapter i FragmentStatePagerAdapter mają nowy konstruktor, który umożliwia przełączenie się na nowe zachowanie.
  • Konstruktor FragmentActivity LayoutId: podklasy obiektu FragmentActivity mogą teraz opcjonalnie wywoływać konstruktor w elemencie FragmentActivity, który przyjmuje identyfikator R.layout, co wskazuje układ, który należy ustawić jako widok treści zamiast wywoływać setContentView() w elemencie onCreate(). Nie zmienia to 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óźnij z określonym limitem czasu: dodano nowe przeciążenie postponeEnterTransition(), które zajmuje więcej czasu.

Wersja 1.1.0-rc04

7 sierpnia 2019 r.

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 opóźnione przejścia w przypadku fragmentów zostały wyodrębnione. (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, który powodował, że wywołanie funkcji postponeEnterTransition() z większym limitem czasu oczekiwania nie powodowało anulowania poprzednich limitów czasu oczekiwania. (b/137797118)

Wersja 1.1.0-rc02

17 lipca 2019 r.

androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 i androidx.fragment-testing:fragment:1.1.0-rc02 zostały udostępnione. 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 kodu teraz prawidłowo aktualizują swoją widoczność podczas wykonywania operacji show() lub hide() podczas przejścia. (b/133385058)
  • Rozwiązano błąd NullPointerException występujący podczas wyświetlania 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. Zatwierdzenia 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 elemencie onCreate() fragmentu kodu mają teraz prawidłowe pierwszeństwo przed podrzędnym tagiem FragmentManager. (b/133175997)
  • Fragmenty podrzędne nie są już animowane, gdy zastępuje się ich fragment nadrzędny. (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.

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

Zmiany interfejsu 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 po usunięciu elementu nadrzędnego. b/131581013

Wersja 1.1.0-alpha08

7 maja 2019 r.

androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 i androidx.fragment:fragment-testing:1.1.0-alpha08 zostały udostępnione. 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 Fragmentów, zaktualizuj Preferencje do wersji 1.1.0-alpha05.

Nowe funkcje

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

Zmiany interfejsu API

  • Zmiana wprowadzająca nowe zachowanie: wycofana wcześniej metoda FragmentFactory instantiate, która przyjmowała argument Bundle, została usunięta. aosp/953856
  • Niezbędna zmiana: stałe RESUME_ONLY_CURRENT_FRAGMENT i USE_SET_USER_VISIBLE_HINT w elementach FragmentPagerAdapter i FragmentStatePagerAdapter zostały zmienione na odpowiednio BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT i BEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Poprawki błędów

  • Fragmenty, których cykl życia został ograniczony 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

  • Teraz możesz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję setMaxLifecycle() w FragmentTransaction. Zastępuje to wycofane ustawienie 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 konsekwencji (b/129907905) fragmenty w stosie tylnym nie będą otrzymywać wywołania zwrotnego do onCreateView() po odtworzeniu aktywności hostującej. Funkcja onCreateView() będzie teraz wywoływana tylko wtedy, gdy fragment staje się widoczny (tj. tylny stos zostanie wysunięty).

Poprawki błędów

  • Naprawiono błąd związany z używaniem tagu <fragment> w pliku XML i konstruktora contentLayoutId FragmentActivity lub AppCompatActivity. (b/129907905)
  • Rozwiązaliśmy problem, który powodował, że fragmenty na stosie nie były przenoszone na co najmniej CREATED po zmianie konfiguracji, co powodowało, że nie można było prawidłowo usunąć modeli ViewModel i podrzędnych elementów zatrzymywanych. (b/129593351)
  • Rozwiązaliśmy problem z zawieszaniem się restoreSaveState spowodowany rozbieżnością 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ą fragmentu cyklu życia 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. Ta metoda działa zarówno w modułach aplikacji, jak i biblioteki. (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 usługi FragmentScenario są teraz prawidłowo oznaczone za pomocą adnotacji @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

  • Naprawiono regresję w zakresie 1.1.0-alfa05, która powodowała miganie przychodzącego fragmentu na ekranie. (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() podczas zastępowania istniejącego docelowego fragmentu fragmentem, 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 działaniu

  • 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 DialogFragment mogła zostać wywołana dwukrotnie podczas korzystania z funkcji getDialog().dismiss() lub getDialog().cancel() (b/126563750)onDismiss()

Wersja 1.1.0-alpha04

7 lutego 2019 r.

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

Nowe funkcje

  • Dodano obsługę adnotacji klasy @ContentView, która umożliwia wskazanie, który plik XML układu należy napompować jako alternatywę dla zastąpienia onCreateView(). Zalecamy wyświetlenie powiązanych prac w tym języku: 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 zgłasza błąd IllegalStateException (b/121196360).
  • Dodaliśmy uwagę, że zasad getLifecycle(), getViewLifecycleOwner() i getViewLifecycleOwnerLiveData() nie należy zastępować i zostaną one sfinalizowane w przyszłej wersji. Jeśli zastępujesz tę metodę, zgłoś 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 czyszczone podczas przekazywania null do setTargetFragment(). (Aosp/849969)
  • Rozwiązaliśmy problem polegający na tym, że elementy docelowe były czasami 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]
  • Delegat właściwości by activityViewModels Kotlin został dodany w celu pobierania modeli widoków danych powiązanych z aktywnością [b/119050253]
  • Delegat właściwości by viewModels w Kotlinie został rozszerzony o opcjonalną metodę lambda służącą do uzyskiwania wartości ViewModelStoreOwner. Dzięki temu możesz przekazywać nadrzędny fragment lub inny niestandardowy element ViewModelStoreOwner za pomocą kodu takiego jak val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

Zmiany w interfejsie API

  • FragmentScenario pozwala teraz określić motyw, na przykład 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 Kotlin w narzędziu FragmentInvoice umożliwiają teraz użycie funkcji lambda na potrzeby konstruowania fragmentu jako alternatywy dla przekazywania w instancji FragmentFactory. (aosp/812913)

Poprawki błędów.

  • Usunięto błąd IllegalStateException podczas używania zagnieżdżonych fragmentów na stosie wstecznym (b/119256498).
  • Naprawiono awarię występującą podczas korzystania z FragmentScenario.recreate() z urządzeniem 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 jest pierwsza wersja artefaktu fragment-testing i FragmentScenario, która została opracowana w oparciu o interfejsy API 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ąż problem, który powodował, że operacje na fragmentach kodu kończyły się niepowodzeniem z poziomu LiveData (b/77944637)

Znane problemy

  • Po usunięciu fragmentu z FragmentManagera nie można uzyskać dostępu do 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.