Fragment

Podziel aplikację na kilka niezależnych ekranów, które są hostowane w ramach aktywności.
Najnowsza aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja beta Wersja alfa
13 sierpnia 2025 r. 1.8.9 - - -

Deklarowanie zależności

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

Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:

Odlotowe

dependencies {
    def fragment_version = "1.8.9"

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

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

Prześlij opinię

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

Tworzenie nowego problemu

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

Wersja 1.8

Wersja 1.8.9

13 sierpnia 2025 r.

Publikacja androidx.fragment:fragment-*:1.8.9 Wersja 1.8.9 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że anulowanie gestu przewidywanego przejścia wstecz, który powoduje wyskakujące ukrywanie, sprawiało, że kolejny gest nie był prawidłowo animowany podczas korzystania z animatorów. (I0a400, b/384765586)
  • Rozwiązaliśmy problem, który powodował, że połączenie setMaxLifecyclepopBackStack mogło nie przenieść górnego fragmentu do stanu RESUMED. (I3448b, b/406127576)

Wersja 1.8.8

4 czerwca 2025 r.

Publikacja androidx.fragment:fragment-*:1.8.8 Wersja 1.8.8 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował awarię FragmentManager podczas próby zapisania stanu fragmentów dodanych za pomocą setMaxLifecycle(Lifecycle.State.INITIALIZED). Te fragmenty, ponieważ nigdy nie przeszły przez onCreate(), nie mają już zapisanego stanu ani wywołanej funkcji onSaveInstanceState(). (I6e37a)

Wersja 1.8.7

20 maja 2025 r.

Publikacja androidx.fragment:fragment-*:1.8.7 Wersja 1.8.7 zawiera te zmiany.

Poprawki błędów

  • Rozwiązano problem polegający na tym, że po operacjach wysuwania i zastępowania w tej samej ramce element FragmentManager nie był w odpowiednim stanie, co mogło powodować awarię w połączeniu z wysuwaniem listy wstecznej za pomocą elementu popBackStack lub gestu przewidywanego przejścia wstecz. (I50ad1)
  • Naprawiono awarię spowodowaną używaniem przejść AndroidX i sytuacją, w której szybkie, kolejne transakcje fragmentów próbują anulować nierozpoczęte przejście, a biblioteka przejść AndroidX nie czyści prawidłowo stanu przejścia. (patrz b/414612221). (Ib5235)

Wersja 1.8.6

12 lutego 2025 r.

Publikacja androidx.fragment:fragment-*:1.8.6 Wersja 1.8.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Zastąpienie FragmentContainerView setOnApplyWindowInsetsListener przyjmuje teraz odbiornik null, co jest zgodne z tym, co dopuszcza platforma. (I575f0, b/282790626)

Wersja 1.8.5

30 października 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.5 Wersja 1.8.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd IllegalStateException wywoływany przez saveBackStack tylko po anulowaniu lub przerwaniu gestu przewidywanego przejścia wstecz. (I3387d, b/342419080)

Wersja 1.8.4

2 października 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.4 Wersja 1.8.4 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował awarię fragmentów podczas szybkiego naciśnięcia systemowego przycisku Wstecz lub szybkiego wykonania gestu cofania podczas korzystania z przejść AndroidX. (Ibc038, b/364804225)
  • Rozwiązaliśmy problem w fragmentach, który powodował, że przerwanie gestu przewidywanego przejścia wstecz powodowało przejście menedżera fragmentów w niezdefiniowany stan, a nawet wyświetlanie nieprawidłowego fragmentu. (If82e2, b/338624457)
  • Naprawiliśmy UninitializedPropertyAccessExceptionAndroidFragment podczas dynamicznej zamiany klasy, której używa instancja AndroidFragment. (I12dea)

Wersja 1.8.3

4 września 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.3 Wersja 1.8.3 zawiera te zmiany.

Poprawki błędów

  • FragmentManager prawidłowo uwzględnia teraz operacje oczekujące podczas obsługi gestu przewidywanego przejścia wstecz. Dzięki temu cofnięcie w systemie nie powinno już powodować błędu IndexOutOfBoundsException. (I9ba32, b/342316801)
  • AndroidFragment nie ulega już awarii, jeśli zostanie dodany do kompozycji, gdy stan zawierającego go działania lub fragmentu jest już zapisany. (I985e9, b/356643968)

Wersja 1.8.2

24 lipca 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.2 Wersja 1.8.2 zawiera te zatwierdzenia.

Poprawki błędów

  • AndroidFragment prawidłowo obsługuje teraz przypadki, w których fragment nadrzędny jest umieszczany na liście Fragment back stack, co pozwala uniknąć problemów z komunikatem „No view found for id” (Nie znaleziono widoku o podanym identyfikatorze) podczas powrotu do tego fragmentu. (I94608)
  • Fragmenty dodane za pomocą metody FragmentTransaction.add, która przyjmuje ViewGroup, czekają teraz 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 wejdzie w skład, zanim przeniesie go przez onStart(). (I94608)

Wersja 1.8.1

26 czerwca 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.1 Wersja 1.8.1 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że fragmenty bez kontenera były natychmiast DESTROYED po rozpoczęciu gestu przewidywanego przejścia wstecz. Teraz są one w stanie CREATED do momentu zakończenia gestu. (If6b83, b/345244539)

Wersja 1.8.0

12 czerwca 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.0 Wersja 1.8.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.7.0

  • fragment-compose zawiera teraz AndroidFragment Composable, który umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentu. Automatycznie zapisuje i przywraca stan fragmentu. Powinno to być bezpośrednie zastąpienie wcześniej zalecanego podejścia polegającego na użyciu AndroidViewBinding do powiększenia fragmentu.
  • Wywołanie zwrotne onBackStackChangeCancelled w interfejsie OnBackStackChangedListener usługi FragmentManager jest teraz wywoływane w ramach wykonywania operacji w usłudze FragmentManager, co zbliża je do czasu wywołania zwrotnego onBackStackChangeCommitted.

Wersja 1.8.0-rc01

29 maja 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.0-rc01 Wersja 1.8.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Wywołanie zwrotne onBackStackChangeCancelled w interfejsie FragmentManagers OnBackStackChangedListener jest teraz wywoływane w ramach wykonywania operacji w FragmentManager, co zbliża je do czasu wywołania zwrotnego onBackStackChangeCommitted. (I5ebfb, b/332916112)

Wersja 1.8.0-beta01

14 maja 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.0-beta01 Wersja 1.8.0-beta01 zawiera te zmiany.

Poprawki błędów

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

Wersja 1.8.0-alpha02

17 kwietnia 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.0-alpha02 Wersja 1.8.0-alpha02 zawiera te zmiany.

Poprawki błędów

  • W sekcji Fragment 1.7.0-rc02: dodano logi, które wskazują, dlaczego ustawienie sharedElement bez żadnych innych przejść nie zostanie uruchomione. (Iec48e)
  • Fragment 1.7.0-rc02: usunęliśmy błąd, który powodował awarię, gdy do transakcji, w której wszystkie inne przejścia były możliwe do przewinięcia, dodano element współdzielony, którego nie można było przewinąć. Transakcja będzie teraz prawidłowo uznawana za nieprzeszukiwalną. (I18ccd)

Wersja 1.8.0-alpha01

3 kwietnia 2024 r.

Publikacja androidx.fragment:fragment-*:1.8.0-alpha01 Wersja 1.8.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Nowa funkcja AndroidFragment Composable umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentu. Automatycznie zapisuje i przywraca stan fragmentu. Może on bezpośrednio zastąpić AndroidViewBinding Composable.(b/312895363, Icf841)

Zmiany w dokumentacji

  • Zaktualizowana dokumentacja interfejsów API OnBackStackChangedListener, która zawiera informacje o tym, kiedy są one wywoływane i jak należy ich używać. (I0bfd9)

Aktualizacja zależności

Wersja 1.7

Wersja 1.7.1

14 maja 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.1 Wersja 1.7.1 zawiera te zmiany.

Poprawki błędów

  • Funkcja przewidywanego przejścia wstecz będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają animator lub przejście AndroidX z możliwością wyszukiwania. Rozwiązaliśmy problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie pustego ekranu. (I43037, b/339169168)

Wersja 1.7.0

1 maja 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.0 Wersja 1.7.0 zawiera te zmiany.

Obsługa gestu wstecz z predykcją

  • Fragmenty obsługują teraz predykcyjne cofanie w aplikacji, gdy używasz Animator lub AndroidX Transition 1.5.0. Dzięki temu użytkownicy mogą użyć gestu cofania, aby zobaczyć poprzedni fragment, wyszukując Animator/Transition, zanim zdecydują się zatwierdzić transakcję, wykonując gest, lub ją anulować.
System przejściowy Zasób XML Obsługa przewidywanego przejścia wstecz
Animation R.anim Nie
Animator R.animator Tak
Platforma Transition R.transition Nie
AndroidX TransitionTransition 1.4.1 lub starszym R.transition Nie
AndroidX TransitionTransition 1.5.0 R.transition Tak

Jeśli po włączeniu gestu przewidywanego powrotu zauważysz problemy z obsługą przewidywanego powrotu we fragmentach, zgłoś problem dotyczący fragmentu, dołączając przykładowy projekt, w którym występuje ten problem. Możesz wyłączyć przewidywane przejście wstecz, używając FragmentManager.enabledPredictiveBack(false) w onCreate() Activity.

FragmentManager.OnBackStackChangedListener() udostępnia teraz onBackStackChangeProgressed()onBackStackChangeCancelled() do odbierania odpowiednio zdarzeń postępu i anulowania w przypadku przewidywanego przejścia wstecz.

Fragment Compose Artifact

Utworzyliśmy nowy artefakt fragment-compose, który ma na celu wspieranie aplikacji przechodzących z architektury opartej na fragmentach na architekturę opartą w pełni na Compose.

Pierwszą funkcją dostępną w tym nowym artefakcie jest content metoda rozszerzenia w Fragment, która ułatwia korzystanie z Compose w interfejsie pojedynczego fragmentu przez utworzenie ComposeView i ustawienie prawidłowego 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.

Publikacja androidx.fragment:fragment-*:1.7.0-rc02 Wersja 1.7.0-rc02 zawiera te zmiany.

Poprawki błędów

  • Dodano logi, które wskazują, dlaczego ustawienie sharedElement bez innych przejść nie zostanie uruchomione. (Iec48e)
  • Usunęliśmy błąd, który powodował awarię, gdy do transakcji, w których wszystkie inne przejścia były możliwe do przewijania, dodano element współdzielony, którego nie można było przewijać. Transakcja będzie teraz prawidłowo uznawana za nieprzeszukiwalną. (I18ccd)

Wersja 1.7.0-rc01

3 kwietnia 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.0-rc01 Wersja 1.7.0-rc01 zawiera te zmiany.

Aktualizacja zależności

Wersja 1.7.0-beta01

20 marca 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.0-beta01 Wersja 1.7.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • FragmentHostCallback jest teraz napisany w języku Kotlin, dzięki czemu dopuszczalność wartości null typu ogólnego Host jest zgodna z dopuszczalnością wartości null typu zwracanego przez onGetHost(). (I40af5)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że po zatwierdzeniu gestu przewidywanego przejścia wstecz na fragmencie, który nie znajduje się w kontenerze, fragment ten nigdy nie był niszczony. Fragment zostanie natychmiast przeniesiony do stanu końcowego. (Ida0d9)
  • Rozwiązaliśmy problem w fragmentach, który powodował, że przerwanie przychodzących przejść gestem przewidywanego przejścia wstecz niszczyło widok wejściowy i pozostawiało pusty ekran. (Id3f22, b/319531491)

Wersja 1.7.0-alpha10

7 lutego 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha10 Wersja 1.7.0-alpha10 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy znany problem z poprzedniej wersji Fragmentu, który powodował, że w przypadku korzystania z obsługi przewidywanego powrotu w Fragmentach w przypadku Animator lub AndroidX Transition Fragmenty zgłaszały błąd NullPointerExceptionhandleOnBackProgressed, jeśli nigdy nie dodano FragmentManager.OnBackStackChangedListener za pomocą addOnBackStackChangedListener. (I7c835)

Wersja 1.7.0-alpha09

24 stycznia 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha09 Wersja 1.7.0-alpha09 zawiera te zatwierdzenia.

Fragment Compose Artifact

Utworzyliśmy nowy artefakt fragment-compose, który ma na celu wspieranie aplikacji przechodzących z architektury opartej na fragmentach na architekturę opartą w pełni na Compose.

Pierwszą funkcją dostępną w tym nowym artefakcie jest content metoda rozszerzenia w Fragment, która ułatwia korzystanie z Compose w interfejsie pojedynczego fragmentu przez utworzenie ComposeView i ustawienie prawidłowego 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 onBackStackChangeProgressed()onBackStackChangeCancelled() do odbierania odpowiednio zdarzeń postępu i anulowania w przypadku przewidywanego przejścia wstecz. (214b87)

Znany problem

  • Jeśli używasz funkcji Fragmentu Predictive Back w przypadku Animator lub AndroidX Transition, Fragmenty będą zgłaszać wyjątek NullPointerExceptionhandleOnBackProgressed, jeśli nigdy nie dodano FragmentManager.OnBackStackChangedListener za pomocą addOnBackStackChangedListener. Ręczne dodanie detektora zapobiegnie awarii. Poprawka będzie dostępna w kolejnej wersji Fragmentów.

Wersja 1.7.0-alpha08

10 stycznia 2024 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha08 Wersja 1.7.0-alpha08 zawiera te zatwierdzenia.

Czyszczenie danych

Wersja 1.7.0-alpha07

29 listopada 2023 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha07 Wersja 1.7.0-alpha07 zawiera te zatwierdzenia.

Poprawki błędów

  • Usunęliśmy błąd NullPointerException, który był spowodowany ustawieniem przejścia elementu udostępnionego i nieustawieniem przejścia wejścia/wyjścia. (I8472b)
  • Fragment 1.6.2: po rozwinięciu fragmentu FragmentContainerView jego stany, takie jak FragmentManager, Host i id, są teraz dostępne w wywołaniu zwrotnym onInflate. (I1e44c, b/307427423)
  • Fragment 1.6.2: gdy używasz clearBackStack do usuwania zestawu fragmentów, wszystkie zagnieżdżone elementy ViewModel w elemencie Fragment zostaną teraz wyczyszczone, gdy wyczyszczone zostaną elementy ViewModels w fragmencie nadrzędnym. (I6d83c, b/296173018)

Wersja 1.7.0-alpha06

4 października 2023 roku

Publikacja androidx.fragment:fragment-*:1.7.0-alpha06 Wersja 1.7.0-alpha06 zawiera te zatwierdzenia.

Aktualizacja zależności

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

Wersja 1.7.0-alpha05

20 września 2023 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha05 Wersja 1.7.0-alpha05 zawiera te zatwierdzenia.

Nowe funkcje

  • Fragmenty obsługują teraz przewidywane przejście wstecz podczas korzystania z przejść AndroidX. Dzięki temu możesz użyć gestu cofania, aby przejść do poprzedniego fragmentu z niestandardowym przejściem Androidx, zanim zdecydujesz się zatwierdzić lub anulować transakcję za pomocą ukończonego gestu. Aby włączyć tę funkcję, musisz korzystać z wersji Przejście 1.5.0-alpha03. (Ib49b4, b/285175724)

Znane problemy

  • Obecnie występuje problem, który powoduje, że po anulowaniu gestu powrotu z przejściem następnym razem, gdy zaczniesz wykonywać ten gest, przejście nie zostanie uruchomione i wyświetli się pusty ekran. Może to być spowodowane problemem w bibliotece Transition. (b/300157785). Jeśli wystąpi ten problem, zgłoś go w przypadku komponentu Fragment i dołącz przykładowy projekt, w którym występuje. Możesz wyłączyć przewidywane przejście wstecz, używając FragmentManager.enabledPredictiveBack(false) w onCreate() Activity.

Wersja 1.7.0-alpha04

6 września 2023 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha04 Wersja 1.7.0-alpha04 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązano problem polegający na tym, że podczas anulowania gestu przewidywanego przejścia wstecz fragmenty nie przechodziły do prawidłowego stanu cyklu życia. (I7cffe, b/297379023)
  • Usunięto regresję, w której animacje mogły być uruchamiane z przejściami. (I59f36)
  • Rozwiązaliśmy problem z używaniem funkcji przewidywanego powrotu we fragmentach, który powodował, że próba dwukrotnego szybkiego powrotu w przedostatnim fragmencie na stosie wstecznym powodowała awarię. (Ifa1a4)

Wersja 1.7.0-alpha03

23 sierpnia 2023 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha03 Wersja 1.7.0-alpha03 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z fragmentami podczas korzystania z przewidywanego przejścia wstecz, który powodował pomijanie pierwszego fragmentu w stosie wstecznym menedżera fragmentów i zakończenie działania podczas korzystania z systemowego przycisku Wstecz w nawigacji przy użyciu 3 przycisków lub gestu przewidywanego przejścia wstecz. (I0664b, b/295231788)

Wersja 1.7.0-alpha02

9 sierpnia 2023 r.

Publikacja androidx.fragment:fragment-*:1.7.0-alpha02 Wersja 1.7.0-alpha02 zawiera te zatwierdzenia.

Poprawki błędów

  • Jeśli używasz fragmentów z gestami przewidywanego powrotu w API 34 i systemu przejść, który nie obsługuje wyszukiwania (Animations, Transitions), lub nie używasz żadnych przejść, fragmenty będą teraz czekać na zakończenie gestu przed wykonaniem działania powrotu. (I8100c)

Wersja 1.7.0-alpha01

7 czerwca 2023 r.

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

Nowe funkcje

  • Fragmenty obsługują teraz przewidywane przejście wstecz w aplikacji podczas korzystania z Animator. Dzięki temu możesz użyć gestu cofnięcia, aby zobaczyć poprzedni fragment z niestandardowym animatorem, zanim zdecydujesz, czy zatwierdzić transakcję za pomocą gestu ukończenia, czy ją anulować. Możesz też wyłączyć to nowe działanie, używając eksperymentalnego parametru enablePredictiveBack() i przekazując wartość false.

Wersja 1.6

Wersja 1.6.2

1 listopada 2023 roku

Publikacja androidx.fragment:fragment-*:1.6.2 Wersja 1.6.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Gdy fragment FragmentContainerView jest rozwijany, jego stany, takie jak FragmentManager, Host i id, są teraz dostępne w wywołaniu zwrotnym onInflate. (I1e44c, b/307427423)
  • Gdy używasz clearBackStack do usuwania zestawu fragmentów, wszystkie zagnieżdżone fragmenty ViewModel są teraz czyszczone, gdy czyszczone są ViewModels fragmentu nadrzędnego. (I6d83c, b/296173018)

Wersja 1.6.1

26 lipca 2023 r.

Publikacja androidx.fragment:fragment-*:1.6.1 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 usunięciu działania był nieprawidłowo buforowany nawet po przywróceniu instancji fragmentu do stanu RESUMED. Spowoduje to ponowne użycie stanu zapisanego w pamięci podręcznej, jeśli instancja fragmentu znajdowała się na liście wstecznej podczas korzystania z interfejsu API wielu list wstecznych do zapisywania i przywracania tego fragmentu. (I71288, b/246289075)

Aktualizacja zależności

  • Fragment zależy teraz od Activity 1.7.2. Rozwiązaliśmy problem, który powodował, że użytkownicy języka Kotlin nie mogli rozszerzać klasy ComponentDialog bez jawnej zależności od klasy Activity. (b/287509323)

Wersja 1.6.0

7 czerwca 2023 r.

Publikacja androidx.fragment:fragment-*:1.6.0 Wersja 1.6.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.5.0

  • Zapisany stan Fragment został całkowicie podzielony na stan prywatnej biblioteki (niestandardowe klasy Parcelable) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany w obiekcie Bundle, co pozwala dokładnie określić, skąd pochodzi stan fragmentu.
  • Interfejs FragmentManager.OnBackStackChangedListener został rozszerzony o 2 dodatkowe wywołania zwrotne: onBackStackChangeStartedonBackStackChangeCommitted. Są one wywoływane z każdym Fragment odpowiednio tuż przed dodaniem lub usunięciem go ze stosu wstecznego fragmentu oraz tuż po zatwierdzeniu transakcji.
  • FragmentStrictMode dodano nowy WrongNestedHierarchyViolation, który wykrywa, kiedy fragment podrzędny jest zagnieżdżony w hierarchii widoków fragmentu nadrzędnego, ale nie jest dodany do childFragmentManager fragmentu nadrzędnego.
  • Interfejsy API FragmentFragmentManager, które przyjmują Intent lub IntentSender, są teraz prawidłowo oznaczone adnotacją @NonNull, aby zapobiec przekazywaniu wartości null, ponieważ zawsze powodowałoby to natychmiastowe awarie odpowiednich interfejsów API platformy Android, do których te metody się odwołują.
  • DialogFragment udostępnia teraz dostęp do podstawowej usługi ComponentDialog za pomocą interfejsu requireComponentDialog() API.
  • Fragment zależy teraz od Lifecycle 2.6.1.
  • Fragment zależy teraz od SavedState 1.2.1.
  • Fragment zależy teraz od ProfileInstaller 1.3.0.
  • Artefakt fragment-testing-manifest oddziela wpisy w pliku manifestu od pozostałych komponentów testowania fragmentów. Oznacza to, że możesz:

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

    Pozwala to uniknąć konfliktów spowodowanych różnicami w wersjach między fragment-testingandroidx.test.

Wersja 1.6.0-rc01

10 maja 2023 r.

Publikacja androidx.fragment:fragment-*:1.6.0-rc01 Wersja 1.6.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował wysyłanie ActivityResult z nieprawidłowym kodem żądania, gdy wysłano kilka żądań startActivityForResult z rzędu. (If0b9d, b/249519359)
  • Rozwiązaliśmy problem, który powodował, że wywoływane były funkcje zwrotne onBackStackChangeListener w przypadku transakcji, które w rzeczywistości nie zmieniały stosu wstecznego, jeśli były połączone z transakcjami, które go zmieniały. (I0eb5c, b/279306628)

Wersja 1.6.0-beta01

19 kwietnia 2023 r.

Publikacja androidx.fragment:fragment-*:1.6.0-beta01 Wersja 1.6.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Użycie postponeEnterTransition z limitem czasu, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku odroczonego 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.

Publikacja androidx.fragment:fragment-*:1.6.0-alpha09 Wersja 1.6.0-alpha09 zawiera te zmiany.

Zmiany w interfejsie API

  • DialogFragment udostępnia teraz dostęp do podstawowej usługi ComponentDialog za pomocą interfejsu requireComponentDialog() API. (I022e3, b/234274777)
  • Interfejsy API fragmentów commitNow(), executePendingTransactions()popBackStackImmediate() zostały oznaczone adnotacją @MainThread, co oznacza, że będą teraz zgłaszać błędy kompilacji, gdy nie są wywoływane z głównego wątku, zamiast czekać na niepowodzenie w czasie działania. (Ic9665, b/236538905)

Poprawki błędów

  • Usunęliśmy błąd w FragmentManager, który powodował awarię podczas zapisywania i przywracania w tej samej klatce. (Ib36af, b/246519668)
  • Wywołania zwrotne 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.

Publikacja androidx.fragment:fragment-*:1.6.0-alpha08 Wersja 1.6.0-alpha08 zawiera te zatwierdzenia.

Zmiana zachowania

  • Czas wywołania zwrotnego OnBackStackChangedListener.onBackStackChangeCommited został dostosowany tak, aby wywoływać go przed wykonaniem operacji fragmentu. Dzięki temu wywołanie zwrotne nigdy nie otrzyma odłączonego fragmentu. (I66a76, b/273568280)

Poprawki błędów

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

Aktualizacje zależności

Wersja 1.6.0-alpha07

8 marca 2023 r.

Publikacja androidx.fragment:fragment-*:1.6.0-alpha07 Wersja 1.6.0-alpha07 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 1.6.0-alpha06

22 lutego 2023 roku

Publikacja androidx.fragment:fragment-*:1.6.0-alpha06 Wersja 1.6.0-alpha06 zawiera te zatwierdzenia.

Zmiana zachowania

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

Wersja 1.6.0-alpha05

8 lutego 2023 r.

Publikacja androidx.fragment:fragment-*:1.6.0-alpha05 Wersja 1.6.0-alpha05 zawiera te zatwierdzenia.

Nowe funkcje

  • Interfejs FragmentManager.OnBackStackChagnedListener oferuje teraz 2 dodatkowe wywołania zwrotne: onBackStackChangeStartedonBackStackChangeCommitted, które umożliwiają przekazywanie dodatkowych informacji i kontrolę, gdy w FragmentManager nastąpią zmiany w stosie wstecznym. (Ib7ce5, b/238686802)

Zmiany w interfejsie API

  • Interfejsy API FragmentFragmentManager, które przyjmują Intent lub IntentSender, są teraz prawidłowo oznaczone adnotacją @NonNull, aby zapobiec przekazywaniu wartości null, ponieważ zawsze powodowałoby to natychmiastowe awarie odpowiednich interfejsów API platformy Android, do których te metody się odwołują. (I06fd4)

Wersja 1.6.0-alpha04

7 grudnia 2022 r.

Publikacja androidx.fragment:fragment-*:1.6.0-alpha04 Wersja 1.6.0-alpha04 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w zachowaniu

  • Fragmenty przywracają teraz stan SavedStateRegistry przed onAttach(), dzięki czemu jest on dostępny we wszystkich metodach cyklu życia w górę. (I1e2b1)

Zmiany w interfejsie API

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

Pozwala to uniknąć konfliktów spowodowanych różnicami w wersjach między fragment-testingandroidx.test.(I8e534, b/128612536)

Poprawki błędów

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

Wersja 1.6.0-alpha03

5 października 2022 r.

androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03androidx.fragment:fragment-testing:1.6.0-alpha03 są zwalniane. Wersja 1.6.0-alpha03 zawiera te zatwierdzenia.

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 integracją nowych interfejsów wywołań zwrotnych dostawcy (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider), aby zapewnić, że fragmenty zawsze otrzymują 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-alpha02androidx.fragment:fragment-testing:1.6.0-alpha02 są zwalniane. Wersja 1.6.0-alpha02 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragmentu 1.5.2: rozwiązano problem, który powodował, że jednoczesne wykonywanie transakcji popBackStack()replace() mogło sprawić, że fragmenty wychodzące uruchamiały nieprawidłowe 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-alpha01androidx.fragment:fragment-testing:1.6.0-alpha01 są zwalniane. Wersja 1.6.0-alpha01 zawiera te zatwierdzenia.

Zmiany w zachowaniu

  • Zapisany stan Fragment został całkowicie podzielony na stan prywatnej biblioteki (niestandardowe klasy Parcelable) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany w obiekcie Bundle, co pozwala dokładnie określić, skąd pochodzi stan fragmentu. (b/207158202)

Poprawki błędów

  • Fragmentu 1.5.1: naprawiono regresję w DialogFragmentCallbacksDetector, w której użycie wersji narzędzia lint dołączonej do AGP 7.4 powodowało awarię tego narzędzia. (b/237567009)

Aktualizacja zależności

Wersja 1.5

Wersja 1.5.7

19 kwietnia 2023 r.

androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7androidx.fragment:fragment-testing:1.5.7 są zwalniane. Wersja 1.5.7 zawiera te zatwierdzenia.

Poprawki błędów

  • Użycie postponeEnterTransition z limitem czasu, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku odroczonego fragmentu. (I2ec7d, b/276375110)

Wersja 1.5.6

22 marca 2023 r.

androidx.fragment:fragment:1.5.6, androidx.fragment:fragment-ktx:1.5.6androidx.fragment:fragment-testing:1.5.6 są zwalniane. Wersja 1.5.6 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 1.5.5

7 grudnia 2022 r.

androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5androidx.fragment:fragment-testing:1.5.5 są zwalniane. Wersja 1.5.5 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 1.5.4

24 października 2022 r.

androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4androidx.fragment:fragment-testing:1.5.4 są zwalniane. Wersja 1.5.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, w którym użycie niestandardowego FragmentController z hostem, który nie implementuje interfejsu wywołania zwrotnego dostawcy (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider), i wywołanie jego wycofanej funkcji wysyłania nie powodowało wysyłania do fragmentów podrzędnych. (I9b380)

Wersja 1.5.3

21 września 2022 r.

androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3androidx.fragment:fragment-testing:1.5.3 są zwalniane. Wersja 1.5.3 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 1.5.2

10 sierpnia 2022 r.

androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2androidx.fragment:fragment-testing:1.5.2 są zwalniane. 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 sprawić, że fragmenty wychodzące uruchamiały nieprawidłowy kod Animation/Animator. (Ib1c07, b/214835303)

Wersja 1.5.1

27 lipca 2022 roku

androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1androidx.fragment:fragment-testing:1.5.1 są zwalniane. Wersja 1.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy regresję w DialogFragmentCallbacksDetector, w której użycie wersji lint dołączonej do 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.0androidx.fragment:fragment-testing:1.5.0 są zwalniane. Wersja 1.5.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.4.0

  • Integracja CreationExtras – Fragment może teraz udostępniać bezstanowy ViewModelProvider.Factory za pomocą Lifecycle 2.5.0’s CreationExtras.
  • Integracja okna komponentu – DialogFragment używa teraz ComponentDialog za pomocą Activity 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 na celu wyraźne określenie, jaki stan został zapisany we fragmencie i skąd pochodzi. Obecne zmiany obejmują:
    • FragmentManager zapisuje teraz stan zapisanej instancji w obiekcie Bundle zamiast bezpośrednio w niestandardowym obiekcie Parcelable.
    • Wyniki ustawione za pomocą metody Fragment Result APIs, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznego FragmentManager.
    • Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego elementu FragmentManager, co umożliwia powiązanie ilości zapisanego stanu powiązanego z poszczególnym fragmentem z unikalnymi identyfikatorami występującymi w rejestrowaniu debugowania elementu FragmentManager.Fragment

Inne zmiany

  • FragmentStrictMode umożliwia teraz prywatnym fragmentom kodu zewnętrznego pomijanie określonych kar za naruszenia zasad przez używanie allowViolation() z nazwą klasy.
  • Interfejsy Fragment API służące do udostępniania menu w ActionBar aktywności zostały wycofane. Interfejsy API MenuHostMenuProvider dodane w Activity 1.4.0 zapewniają testowalny interfejs API uwzględniający cykl życia, z którego powinny korzystać fragmenty.

Wersja 1.5.0-rc01

11 maja 2022 roku

androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01androidx.fragment:fragment-testing:1.5.0-rc01 są zwalniane. Wersja 1.5.0-rc01 zawiera te zatwierdzenia.

Refaktoryzacja zapisanego stanu instancji

  • Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego FragmentManager, co umożliwia powiązanie ilości zapisanego stanu z poszczególnymi fragmentami z unikalnymi identyfikatorami występującymi w rejestrowaniu debugowania fragmentów. (a153e0, b/207158202)

Wersja 1.5.0-beta01

20 kwietnia 2022 r.

androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01androidx.fragment:fragment-testing:1.5.0-beta01 są zwalniane. Wersja 1.5.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • DialogFragment dodał nową metodę dismissNow, która używa commitNow, aby zapewnić zgodność z funkcją showNow. Pamiętaj, że nie spowoduje to natychmiastowego zamknięcia Dialog, a jedynie synchroniczną aktualizację stanu FragmentManager. (I15c36, b/72644830)

Refaktoryzacja zapisanego stanu instancji

  • FragmentManager zapisuje teraz stan zapisanej instancji w obiekcie Bundle zamiast bezpośrednio w niestandardowym obiekcie Parcelable. To pierwszy krok w kierunku zapewnienia większej przejrzystości w zakresie tego, co jest faktycznie zapisywane przez fragmenty. (I93807, b/207158202)
  • Wyniki ustawione za pomocą interfejsów Fragment Result API, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznego FragmentManager. Dzięki temu będziesz mieć większą przejrzystość w zakresie wyników zapisywanych w ramach stanu zapisanej instancji. (I6ea12, b/207158202)

Wersja 1.5.0-alpha05

6 kwietnia 2022 roku

androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05androidx.fragment:fragment-testing:1.5.0-alpha05 są zwalniane. Wersja 1.5.0-alpha05 zawiera te zatwierdzenia.

Zmiany w interfejsie API

Wersja 1.5.0-alpha04

23 marca 2022 r.

androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04androidx.fragment:fragment-testing:1.5.0-alpha04 są zwalniane. Wersja 1.5.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Interfejsy API fragmentów do udostępniania menu w ActionBar działania zostały wycofane, ponieważ ściśle wiążą fragment z działaniem i nie można ich testować w izolacji. Interfejsy API MenuHostMenuProvider dodane w Activity 1.4.0-alpha01 zapewniają testowalny interfejs API uwzględniający cykl życia, z którego powinny korzystać fragmenty. (I50a59, I20758)

Poprawki błędów

  • SavedStateViewFactory obsługuje teraz używanie CreationExtras nawet wtedy, gdy zostało zainicjowane za pomocą SavedStateRegistryOwner. Jeśli podasz dodatkowe informacje, zainicjowane argumenty zostaną zignorowane. (I6c43b, b/224844583)

Wersja 1.5.0-alpha03

23 lutego 2022 r.

androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03androidx.fragment:fragment-testing:1.5.0-alpha03 są zwalniane. Wersja 1.5.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Zmiany w zachowaniu

Wersja 1.5.0-alpha02

9 lutego 2022 r.

androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02androidx.fragment:fragment-testing:1.5.0-alpha02 są zwalniane. Wersja 1.5.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentStrictMode umożliwia teraz prywatnym fragmentom kodu zewnętrznego pomijanie określonych kar za naruszenia zasad przez używanie allowViolation() z nazwą klasy. (I8f678)

Wersja 1.5.0-alpha01

26 stycznia 2022 r.

androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01androidx.fragment:fragment-testing:1.5.0-alpha01 są zwalniane. Wersja 1.5.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Fragment 1.4.1: FragmentContainerView nie zgłasza już wyjątku nieprawidłowego stanu, gdy identyfikatory widoków wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • Fragment 1.4.1: gdy używasz niestandardowej funkcji ownerProducer lambda z funkcją by viewModels() lazy, będzie ona teraz używać funkcji defaultViewModelProviderFactory od tego właściciela, jeśli nie podano niestandardowej funkcji ViewModelProvider.Factory, zamiast zawsze używać fabryki fragmentu. (I56170, b/214106513)
  • Naprawiliśmy awarię, która występowała podczas pierwszego dostępu do ViewModel z wywołania zwrotnego registerForActivityResult() w Fragment. (Iea2b3)

Wersja 1.4

Wersja 1.4.1

26 stycznia 2022 r.

androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1androidx.fragment:fragment-testing:1.4.1 są zwalniane. Wersja 1.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • FragmentContainerView nie zgłasza już wyjątku nieprawidłowego stanu, gdy identyfikatory widoków wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140)
  • Gdy używasz niestandardowej lambdy ownerProducer z funkcją by viewModels() lazy, będzie ona teraz używać defaultViewModelProviderFactory z tego właściciela, jeśli nie podano niestandardowego 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.0androidx.fragment:fragment-testing:1.4.0 są zwalniane. Wersja 1.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.3.0

  • Interfejsy FragmentStrictMode API zapewniają sprawdzanie w czasie działania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy, nie wywołują wycofanych interfejsów API fragmentów. Gdy zostanie wykryte naruszenie, możesz wyświetlić komunikat logu, wywołać własny niestandardowy detektor lub spowodować awarię aplikacji. Wartość FragmentStrictMode.Policy, która określa, jakie kontrole są włączone i jakie „kary” są wywoływane, można ustawić w FragmentManager za pomocą nowej metody setStrictModePolicy(). Ta zasada dotyczy tego FragmentManager i przechodzi na wszystkich menedżerów fragmentów podrzędnych, którzy nie ustawili własnej, unikalnej zasady. Zobacz StrictMode w przypadku fragmentów.
  • FragmentContainerView udostępnia teraz metodę getFragment(), która zwraca fragment ostatnio dodany do kontenera. Działa to na tej samej zasadzie co findFragmentById() z identyfikatorem FragmentContainerView, ale umożliwia łączenie wywołań.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario implementuje teraz Closeable, dzięki czemu możesz używać go z metodą use w języku Kotlin lub try-with-resources.

  • Added FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} określa, czy w przejściu między fragmentami ma być włączona standardowa animacja przejścia między aktywnościami zaczerpnięta z motywu.

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

Wiele stosów wstecznych

FragmentManager utrzymuje stos wsteczny składający się z transakcji fragmentów, które używały addToBackStack(). Dzięki temu możesz wycofać te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywania stanu za pomocą fragmentów, aby fragmenty mogły odpowiednio przywrócić swój stan.

Ta wersja rozszerza te mechanizmy, udostępniając 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. Umożliwiają one późniejsze przywrócenie tych transakcji i ich fragmentów w niezmienionym stanie. Pozwala to skutecznie „przełączać się” między wieloma stosami wstecznymi przez zapisanie bieżącego stosu wstecznego i przywrócenie zapisanego stosu wstecznego.

saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczne i powoduje odwrócenie („wycofanie”) wszystkich transakcji fragmentów z powrotem do tej konkretnej nazwy oraz zniszczenie i usunięcie wszystkich dodanych fragmentów. Różni się jednak od niego w kilku ważnych aspektach:

  • saveBackStack() zawsze obejmuje podany zakres.
  • W przeciwieństwie do metody popBackStack(), która w przypadku braku określonej nazwy na stosie wstecznym lub podania wartości null usuwa wszystkie transakcje ze stosu wstecznego, metoda saveBackStack() nie wykonuje żadnych działań, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą metody addToBackStack() z dokładnie taką samą nazwą o wartości innej niż null.
  • Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest zapisywany, wywoływana jest funkcja onSaveInstanceState() każdego fragmentu, a stan jest przywracany. Wszystkie instancje ViewModel powiązane z tymi fragmentami są zachowywane (a funkcja onCleared() nie jest na nich wywoływana).

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

  • Każda transakcja fragmentu musi używać setReorderingAllowed(true), aby można było przywrócić transakcje jako pojedynczą, niepodzielną operację.
  • Zapisany zestaw transakcji musi być samodzielny (tzn. nie może zawierać wyraźnych odwołań do żadnych fragmentów poza tym zestawem), aby można go było przywrócić w dowolnym późniejszym czasie, niezależnie od zmian wprowadzonych w międzyczasie na stosie wstecznym.
  • Żaden zapisany fragment nie może być fragmentem zachowanym ani mieć w swoim przechodnim zbiorze fragmentów podrzędnych fragmentu zachowanego. Dzięki temu FragmentManager nie będzie zwracać żadnych odwołań do zapisanych fragmentów po zapisaniu listy wstecznej.

Podobnie jak w przypadku funkcji saveBackStack(), restoreBackStack()clearBackStack(), które odpowiednio przywracają lub czyszczą wcześniej zapisaną listę wstecz, obie te funkcje nie robią nic, jeśli wcześniej nie wywołasz funkcji saveBackStack() z tą samą nazwą.

Więcej informacji znajdziesz w artykule Wiele stosów wstecznych: szczegółowe omówienie.

Wersja 1.4.0-rc01

3 listopada 2021 r.

androidx.fragment:fragment:1.4.0-rc01 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 r.

androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01androidx.fragment:fragment-testing:1.4.0-beta01 są zwalniane. Wersja 1.4.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragmenty nadrzędne będą teraz wysyłać zdarzenie onHiddenChanged() w dół całej hierarchii, zanim uruchomią własne wywołanie zwrotne. (Iedc20, b/77504618)
  • Klawiatura będzie teraz zamykana automatycznie podczas przechodzenia z fragmentu z otwartą klawiaturą do fragmentu z widokiem recyklera. (I8b842, b/196852211)
  • DialogFragment używa teraz setReorderingAllowed(true) w przypadku wszystkich transakcji, które tworzy, gdy dzwonisz pod numer show(), showNow() lub dismiss(). (Ie2c14)
  • Bardzo długie ostrzeżenie lintera DetachAndAttachFragmentInSameFragmentTransaction zostało skrócone do DetachAndAttachSameFragment. (e9eca3)

Wersja 1.4.0-alpha10

29 września 2021 r.

androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10androidx.fragment:fragment-testing:1.4.0-alpha10 są zwalniane. Wersja 1.4.0-alpha10 zawiera te zatwierdzenia.

Linter

  • Dodano ostrzeżenie DetachAndAttachFragmentInSameFragmentTransaction dotyczące wykrywania wywoływania zarówno funkcji detach(), jak i attach() na tym samym obiekcie Fragment w tym samym obiekcie FragmentTransaction – ponieważ te uzupełniające się operacje znoszą się wzajemnie, gdy są wykonywane w ramach tej samej transakcji, muszą zostać podzielone na osobne transakcje, aby faktycznie coś zrobić. (aosp/1832956, b/200867930)
  • Dodano błąd lint FragmentAddMenuProvider, który poprawia użycie cyklu życia fragmentu na cykl życia widoku fragmentu podczas korzystania z interfejsu API addMenuProviderMenuHost. (aosp/1830457, b/200326272)

Aktualizacje dokumentacji

  • Komunikaty o wycofaniu interfejsów API, które są teraz obsługiwane przez interfejsy API wyników aktywności, czyli startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissionsonRequestPermissionsResult, zostały rozszerzone o dodatkowe szczegóły. (cce80f)
  • Wiadomość o wycofaniu onActivityCreated() w przypadku FragmentDialogFragment została rozwinięta i zawiera więcej szczegółów. (224db4)

Wersja 1.4.0-alpha09

15 września 2021 r.

androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09androidx.fragment:fragment-testing:1.4.0-alpha09 są zwalniane. Wersja 1.4.0-alpha09 zawiera te zatwierdzenia.

Nowe funkcje

  • Możesz teraz wywołać funkcję clearBackStack(name), aby wyczyścić dowolny stan zapisany wcześniej za pomocą funkcji saveBackStack(name). (I70cd7)

Zmiany w interfejsie API

  • Klasa FragmentContainerView została przepisana w języku Kotlin, co zapewnia, że funkcja getFragment będzie prawidłowo uwzględniać dopuszczalność wartości null. (If694a, b/189629145)
  • Klasa FragmentStrictMode jest teraz napisana w języku Kotlin (I11767, b/199183506)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że stan fragmentu dodanego za pomocą setReorderingAllowed(true), a następnie natychmiast usuniętego przed wykonaniem oczekujących transakcji nie był prawidłowo czyszczony. (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-alpha08androidx.fragment:fragment-testing:1.4.0-alpha08 są zwalniane. Wersja 1.4.0-alpha08 zawiera te zatwierdzenia.

Poprawki błędów

  • Ulepszyliśmy UseRequireInsteadOfGetsprawdzanie kodu, aby lepiej obsługiwać nadmiarowe nawiasy. (I2d865)
  • Ulepszyliśmy UseGetLayoutInflatersprawdzanie Lint, aby obsługiwało dodatkowe przypadki brzegowe. (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 wydane bez istotnych zmian. Wersja 1.4.0-alpha07 zawiera te zatwierdzenia.

Wersja 1.4.0-alpha06

4 sierpnia 2021 r.

androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06androidx.fragment:fragment-testing:1.4.0-alpha06 są zwalniane. Wersja 1.4.0-alpha06 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z wieloma stosami wstecznymi podczas szybkiego przełączania się między nimi, który powodował wyświetlanie się symbolu IllegalStateException podczas przywracania elementu FragmentTransaction lub pojawianie się drugiej kopii fragmentu. (I9039f)
  • Rozwiązaliśmy problem polegający na tym, że funkcja FragmentManager przechowywała kopię wcześniej zapisanego stanu za pomocą funkcji saveBackStack() nawet po przywróceniu tego stanu. (Ied212)
  • Metoda dismissAllowingStateLoss() klasy DialogFragment nie powoduje już awarii, gdy wywołasz ją po zapisaniu stanu podczas dodawania elementu DialogFragment za pomocą metody show(FragmentTransaction, String). (I84422)

Wersja 1.4.0-alpha05

21 lipca 2021 r.

androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05androidx.fragment:fragment-testing:1.4.0-alpha05 są zwalniane. Wersja 1.4.0-alpha05 zawiera te zmiany.

Poprawki błędów

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

Aktualizacja zależności

Wersja 1.4.0-alpha04

30 czerwca 2021 r.

androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04androidx.fragment:fragment-testing:1.4.0-alpha04 są zwalniane. Wersja 1.4.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • FragmentManager używa teraz SavedStateRegistry do zapisywania stanu. Metody saveAllState()restoreSavedState() zostały też wycofane w FragmentController. Jeśli używasz FragmentController do hostowania fragmentów poza FragmentActivity, FragmentHostCallbacks powinien implementować SavedStateRegistryOwner. (Iba68e, b/188734238)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że wywołanie funkcji saveBackStack() w ramach obsługi wielu stosów wstecznych kończyło się niepowodzeniem, gdy było wykonywane w tym samym czasie co uruchamianie funkcji FragmentTransaction, która korzystała z funkcji replace(). (I73137)
  • Naprawiono NullPointerException, który występował po ręcznym przywróceniu zapisanego stosu wstecznego zawierającego wiele transakcji podczas korzystania z interfejsu restoreBackStack() API do obsługi wielu stosów wstecznych. Rozwiązaliśmy też problem polegający na tym, że setReorderingAllowed(true) nie było sprawdzane w przypadku wszystkich transakcji. (I8c593)
  • Rozwiązaliśmy problem, który powodował, że FragmentManager nieprawidłowo przywracał wcześniej zapisany stan fragmentów nawet po ich usunięciu z FragmentManager, co powodowało ciągłe powiększanie się zapisanego stanu. (I1fb8e)

Wersja 1.4.0-alpha03

16 czerwca 2021 r.

androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03androidx.fragment:fragment-testing:1.4.0-alpha03 są zwalniane. Wersja 1.4.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Wszystkie klasy Fragment StrictMode Violation zostały zaktualizowane i zawierają teraz bardziej szczegółowe komunikaty o błędach, które wyjaśniają szczegóły naruszenia. (b/187871638)
    • FragmentTagUsageViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera kontener nadrzędny, do którego miał zostać dodany fragment. (Ic33a7)
    • WrongFragmentContainerViolation zawiera teraz bardziej szczegółowy komunikat o błędzie, który informuje o kontenerze, do którego dodawany był fragment. (Ib55f8)
    • Klasy przypadków użycia TargetFragmentUsageViolation mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie i wszelkie inne informacje. (Icc6ac)
    • Klasy rozszerzające RetainInstanceUsageViolation mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie. (I6bd55)
    • FragmentReuseViolation ma teraz bardziej szczegółowy komunikat o błędzie, który zawiera poprzedni identyfikator fragmentu. (I28ce2)
    • SetUserVisibleHintViolation ma teraz bardziej szczegółowy komunikat o błędzie, który zawiera informację o tym, na jaką wartość ustawiono widoczną wskazówkę dla użytkownika. (Ib2d5f)

Zmiany w zachowaniu

  • Cofnięto ograniczenie dotyczące wywoływania funkcji fitsSystemWindows na urządzeniu FragmentContainerView – aplikacja nie ulega już awarii. (6b8ddd, b/190622202)

Poprawki błędów

  • Fragmentu 1.3.5: naprawiono regresję w przejściach elementów udostępnianych wprowadzoną w fragmencie 1.3.4 przez aosp/1679887. Fragmenty prawidłowo obsługują teraz grupy przejść (ustawione bezpośrednio za pomocą elementu transitionGroup="true" lub pośrednio za pomocą elementu transitionName lub background), a elementy udostępnione nie będą już zgłaszać błędów IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)
  • Aplikacja FragmentManager nie będzie się już zamykać podczas próby ukrycia usuwanego fragmentu. (I573dd, b/183634730)
  • Sprawdzanie kodu OnCreateDialogIncorrectCallback nie będzie już powodować awarii podczas oceny zmiennej najwyższego poziomu. (0a9efa, b/189967522)

Wersja 1.4.0-alpha02

2 czerwca 2021 r.

androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02androidx.fragment:fragment-testing:1.4.0-alpha02 są zwalniane. Wersja 1.4.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentStrictMode będzie teraz zawsze rejestrować naruszenia, gdy rejestrowanie jest włączone za pomocą zasady FragmentManager, niezależnie od używanej obecnie zasady trybu ścisłego. (I02df6, b/187872638)
  • FragmentStrictMode obsługuje teraz wyłączenie określonych klas Fragment z trybu ścisłego Violation, co pozwala im uniknąć kar. (Ib4e5d, b/184786736)

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

    • WrongFragmentContainerViolation zawiera teraz ViewGroup, do którego próbowano dodać Fragment. (I83c75, b/187871150)
    • TargetFragmentUsageViolation został rozszerzony na SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolationGetTargetFragmentRequestCodeUsageViolation, przy czym SetTargetFragmentUsageViolation zawiera docelowy fragment i kod żądania. (I741b4, b/187871150)
    • SetUserVisibleHintViolation zawiera teraz wartość logiczną przekazaną do setUserVisibleHint(). (I00585, b/187871150)
    • FragmentTagUsageViolation zawiera teraz element ViewGroup, do którego tag <fragment> próbował wstawić fragment.(I5dbbc, b/187871150)
    • FragmentReuseViolation zawiera teraz unikalny identyfikator poprzedniej instancji Fragment, która spowodowała naruszenie. (I0544d, b/187871150)
    • RetainInstanceUsageViolation jest teraz abstrakcyjna i ma 2 podklasy: SetRetainInstanceUsageViolationGetRetainInstanceUsageViolation, które reprezentują 2 przypadki typu naruszenia. (Ic81e5, b/187871150)

Zmiany w zachowaniu

  • FragmentContainerView zgłasza teraz wyjątek podczas próby zmiany atrybutu fitsSystemWindow programowo lub za pomocą kodu XML. Wcięcia powinny być obsługiwane przez widok każdego fragmentu. (Ie6651, b/187304502)

Wersja 1.4.0-alpha01

18 maja 2021 r.

androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01androidx.fragment:fragment-testing:1.4.0-alpha01 są zwalniane. Wersja 1.4.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentContainerView udostępnia teraz metodę getFragment(), która zwraca fragment ostatnio dodany do kontenera. Działa to na tej samej zasadzie co findFragmentById() z identyfikatorem FragmentContainerView, ale umożliwia łączenie wywołań. (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • Added FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} określa, czy w przejściu między fragmentami ma być włączona standardowa animacja przejścia między aktywnościami zaczerpnięta z motywu. (I46652)

Wiele stosów wstecznych

FragmentManager utrzymuje stos wsteczny składający się z transakcji fragmentów, które używały addToBackStack(). Dzięki temu możesz wycofać te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywania stanu za pomocą fragmentów, aby fragmenty mogły odpowiednio przywrócić swój stan.

W tej wersji rozszerzamy te mechanizmy, udostępniając 2 nowe interfejsy API: FragmentManagerrestoreBackStack(String name).saveBackStack(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. Umożliwiają one późniejsze przywrócenie tych transakcji i ich fragmentów w niezmienionym stanie. Pozwala to skutecznie „przełączać się” między wieloma stosami wstecznymi przez zapisanie bieżącego stosu wstecznego i przywrócenie zapisanego stosu wstecznego.

saveBackStack() działa podobnie do popBackStack(), ponieważ jest asynchroniczne i powoduje odwrócenie („wycofanie”) wszystkich transakcji fragmentów z powrotem do tej konkretnej nazwy oraz zniszczenie i usunięcie wszystkich dodanych fragmentów. Różni się jednak od niego w kilku ważnych aspektach:

  • saveBackStack() zawsze obejmuje podany zakres.
  • W przeciwieństwie do metody popBackStack(), która w przypadku braku określonej nazwy na stosie wstecznym lub podania wartości null usuwa wszystkie transakcje ze stosu wstecznego, metoda saveBackStack() nie wykonuje żadnych działań, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą metody addToBackStack() z dokładnie taką samą nazwą o wartości innej niż null.
  • Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest zapisywany, wywoływana jest funkcja onSaveInstanceState() każdego fragmentu, a stan jest przywracany. Wszystkie instancje ViewModel powiązane z tymi fragmentami są zachowywane (a funkcja onCleared() nie jest na nich wywoływana).

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

  • Każda transakcja fragmentu musi używać setReorderingAllowed(true), aby można było przywrócić transakcje jako pojedynczą, niepodzielną operację.
  • Zapisany zestaw transakcji musi być samodzielny (tzn. nie może zawierać wyraźnych odwołań do żadnych fragmentów poza tym zestawem), aby można go było przywrócić w dowolnym późniejszym czasie, niezależnie od zmian wprowadzonych w międzyczasie na stosie wstecznym.
  • Żaden zapisany fragment nie może być fragmentem zachowanym ani mieć w swoim przechodnim zbiorze fragmentów podrzędnych fragmentu zachowanego. Dzięki temu FragmentManager nie będzie zwracać żadnych odwołań do zapisanych fragmentów po zapisaniu listy wstecznej.

Podobnie jak w przypadku saveBackStack(), funkcja restoreBackStack() nie wykonuje żadnych działań, jeśli wcześniej nie została wywołana funkcja saveBackStack() z tą samą nazwą. (b/80029773)

Fragment StrictMode

Interfejsy FragmentStrictMode API zapewniają sprawdzanie w czasie działania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy, nie wywołują wycofanych interfejsów API fragmentów. Gdy zostanie wykryte naruszenie, możesz wyświetlić komunikat logu, wywołać własny niestandardowy detektor lub spowodować awarię aplikacji. Wartość FragmentStrictMode.Policy, która określa, jakie kontrole są włączone i jakie „kary” są wywoływane, można ustawić w FragmentManager za pomocą nowej metody setStrictModePolicy(). Ta zasada dotyczy tego FragmentManager i przechodzi na wszystkich menedżerów fragmentów podrzędnych, którzy nie ustawili własnej, unikalnej zasady. (#123, #131, #150, b/143774122)

  • detectFragmentReuse() wykrywa, czy wcześniej usunięta instancja Fragment jest ponownie dodawana do FragmentManager. Nigdy nie wchodź w interakcje z instancją Fragment ani nie przechowuj do niej odniesień po jej zniszczeniu i usunięciu z FragmentManager. (#142, b/153738653)
  • detectFragmentTagUsage() wykrywa, kiedy używasz tagu <fragment> w pliku XML układu. Podczas powiększania fragmentów w ramach układu zawsze używaj FragmentContainerView. (#141, b/153738235)
  • detectWrongFragmentContainer() wykrywa, kiedy dodajesz fragment do kontenera, który nie jest FragmentContainerView. W układzie fragmentów zawsze używaj elementu FragmentContainerView jako kontenera. (#146, b/181137036)
  • detectRetainInstanceUsage() wykrywa, kiedy używasz wycofanych interfejsów API setRetainInstance() lub getRetainInstance(). (#140, b/153737954)
  • detectSetUserVisibleHint() wykrywa, kiedy używasz wycofanego interfejsu setUserVisibleHint() API. (#136, b/153738974)
  • detectTargetFragmentUsage() wykrywa, kiedy używasz wycofanych interfejsów API setTargetFragment(), getTargetFragment() lub getTargetRequestCode(). (#139, b/153737745)

Zmiany w interfejsie API

Nowe testy Lint

  • UseGetLayoutInflater Sprawdzanie za pomocą narzędzia Lint ostrzega teraz przed użyciem LayoutInflater.from(Context)DialogFragment. Zawsze używaj metody getLayoutInflater() fragmentu okna, aby uzyskać odpowiedni element LayoutInflater. (#156, b/170781346)
  • DialogFragmentCallbacksDetector Sprawdzanie kodu Lint ostrzega teraz, gdy w metodzie onCreateDialog() klasy DialogFragment wywoływane są funkcje setOnCancelListener lub setOnDismissListener. Te odbiorniki należą do klasy DialogFragment, więc aby otrzymywać te wywołania zwrotne, należy zastąpić funkcje onCancel()onDismiss(). (#171, b/181780047, b/187524311)

Poprawki błędów

  • Od Fragmentu 1.3.4: naprawiono regresję wprowadzoną w fragmencie 1.3.3 podczas używania interfejsu API ViewTreeViewModelStoreOwner.get()ViewModelProvider lub metody Jetpack Compose viewModel() w fragmencie. W tych przypadkach użycia prawidłowo stosuje się ViewModelProvider.Factory dostarczony przez fragment, jeśli zastępuje on getDefaultViewModelProviderFactory() (tak jak w przypadku fragmentów z adnotacjami @AndroidEntryPoint, gdy używasz Hilta). Jeśli nie zastąpisz tej metody, domyślnie utworzona zostanie fabryka SavedStateViewModelFactory, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Fragment 1.3.4: gdy używasz FragmentContainerView na API 29, wstawki nie będą już wysyłane w nieskończoność, co rozwiązuje problemy z instancjami BottomNavigationBarFloatingActionButton. (I1bb78, b/186012452)
  • Fragmentu 1.3.4: po śmierci procesu możesz teraz pobrać obiekt Parcelable z pakietu wyników fragmentu. (I65932, b/187443158)
  • Fragmentu 1.3.4: podczas przejścia elementu udostępnionego w przypadku elementu ViewGroup, jeśli wartość transitionGroup jest ustawiona na false, przejście będzie teraz prawidłowe. (I99675)

Wkład zewnętrzny

Wersja 1.3

Wersja 1.3.6

21 lipca 2021 r.

androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6androidx.fragment:fragment-testing:1.3.6 są zwalniane. Wersja 1.3.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Z Fragment 1.4.0-alpha03: FragmentManager nie będzie się już zamykać, gdy spróbujesz ukryć usuwany fragment. (I573dd, b/183634730)
  • Widok fragmentu jest teraz prawidłowo ustawiany na GONE podczas korzystania z hide(), gdy widok główny ma ustawioną wartość transitionGroup=”true”. (aosp/1766655, b/193603427)
  • FragmentActivity zawsze odblokowuje zapisany stan jako pierwszą operację w wywołaniach zwrotnych cyklu życia, które zastępuje. (I6db7a)

Aktualizacja zależności

Wersja 1.3.5

16 czerwca 2021 r.

androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5androidx.fragment:fragment-testing:1.3.5 są zwalniane. Wersja 1.3.5 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 1.3.4

18 maja 2021 r.

androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4androidx.fragment:fragment-testing:1.3.4 są zwalniane. Wersja 1.3.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono regresję wprowadzoną w fragmencie 1.3.3 podczas korzystania z interfejsu API ViewTreeViewModelStoreOwner.get()ViewModelProvider lub metody Jetpack Compose viewModel() w fragmencie podczas korzystania z Hilt. W tych przypadkach użycia prawidłowo stosowany jest parametr ViewModelProvider.Factory podany przez fragment, jeśli zastępuje on parametr getDefaultViewModelProviderFactory() (tak jak w przypadku fragmentów z adnotacjami @AndroidEntryPoint). Jeśli nie zastąpisz tej metody, domyślnie utworzona zostanie fabryka SavedStateViewModelFactory, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368)
  • Gdy używasz FragmentContainerView na interfejsie API 29, wstawki nie będą już wysyłane w nieskończoność, co rozwiązuje problemy z instancjami BottomNavigationBarFloatingActionButton. (I1bb78, b/186012452)
  • Po śmierci procesu możesz pobrać obiekt Parcelable z pakietu wyników fragmentu. (I65932, b/187443158)
  • Podczas przejścia elementu udostępnionego w przypadku elementu ViewGroup, jeśli wartość transitionGroup jest ustawiona na false, przejście będzie teraz przebiegać prawidłowo. (I99675)

Wersja 1.3.3

21 kwietnia 2021 r.

androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3androidx.fragment:fragment-testing:1.3.3 są zwalniane. Wersja 1.3.3 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

  • Naprawiono regresję wprowadzoną w fragmencie 1.3.2, która powodowała, że animacje popEnter nie były uruchamiane podczas wycofywania FragmentTransaction zawierającego operację setPrimaryNavFragment, np. operacje 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 teraz niezależnie korzystać z wstawek. (I63f68, b/172153900)
  • DialogFragment prawidłowo obsługuje teraz przypadki, w których fragment podrzędny jest dodawany do kontenera o tym samym identyfikatorze co kontener w Twojej niestandardowej klasie Dialog. Rozwiązuje to problemy z hierarchią widoków podczas ponownego używania identyfikatorów, które są używane wewnętrznie przez okna dialogowe, takie jak BottomSheetDialog. (Ie6279, b/180021387)
  • FragmentManager.dump() teraz prawidłowo wstawia wcięcie w przypadku pierwszego fragmentu na liście aktywnych fragmentów. (If5c33, b/183705451)

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

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

Wersja 1.3.2

24 marca 2021 r.

androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2androidx.fragment:fragment-testing:1.3.2 są zwalniane. Wersja 1.3.2 zawiera te zatwierdzenia.

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

  • Jeśli operacje popBackStack()commit() są wykonywane jednocześnie, ostatnia operacja będzie teraz określać kierunek wszystkich animacji, a nie tylko niektórych animacji wyskakujących i animacji wejścia. (I7072e, b/181142246)
  • Widoki w hierarchii wspólnego elementu nie będą już miały wyczyszczonej nazwy przejścia podczas wykonywania przejścia wspólnego elementu. (I4d4a6, b/179934757)

Aktualizacje zależności

  • Fragment zależy teraz od Activity 1.2.2, co rozwiązuje problem z kontrolą lint InvalidFragmentVersionForActivityResult w Activity podczas korzystania z Fragment 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.1androidx.fragment:fragment-testing:1.3.1 są zwalniane. Wersja 1.3.1 zawiera te zatwierdzenia.

Nowe funkcje

  • Okna w DialogFragment mogą teraz uzyskiwać dostęp do właścicieli ViewTree za pomocą DecorView, co zapewnia możliwość używania DialogFragmentComposeView. (Ib9290, b/180691023)

Poprawki błędów

  • Fragmenty wstawiane do aktywności RESUMED za pomocą elementu FragmentContainerView są teraz prawidłowo wyświetlane po zmianie konfiguracji. (Ie14c8, b/180538371)
  • Na końcu fragmentu nie ma już dodatkowego znaku }toString() (I54705, b/177761088).
  • Przesłonięte metody w klasie FragmentActivity prawidłowo dziedziczą teraz dokumentację JavaDoc metody bazowej (I736ce, b/139548782).
  • Dokumentacja setFragmentResultsetFragmentResultListener została zaktualizowana, aby odzwierciedlać fakt, że nie akceptują już wartości null (I990ba, b/178348386).

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

  • Naprawiono wyciek pamięci we fragmentach spowodowany przez mFocusedView (Ib4e9e, b/179925887).
  • Fragmenty prawidłowo wywołują onCreateOptionsMenu podczas korzystania z transakcji wyświetlania/ukrywania (I8bce8, b/180255554).
  • Fragmenty podrzędne z przejściami, które rozpoczynają się przed rozmieszczeniem fragmentu, będą teraz prawidłowo osiągać RESUMED (Ic11e6, b/180825150)
  • Fragmenty rozszerzone 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.

androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0androidx.fragment:fragment-testing:1.3.0 są zwalniane. Wersja 1.3.0 zawiera te zatwierdzenia.

Główne zmiany od wersji 1.2.0

  • Nowy menedżer stanu: znaczne przepisanie wewnętrznych elementów FragmentManager rozwiązało liczne problemy związane z wysyłaniem zdarzeń cyklu życia, animacji i przejść oraz z obsługą odroczonych fragmentów.
  • Integracja interfejsu Activity Result API: dodaliśmy obsługę interfejsu ActivityResultRegistry API wprowadzonego w Activity 1.2.0 do obsługi przepływów startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() bez zastępowania metod w fragmencie, a także udostępniliśmy punkty zaczepienia do testowania tych przepływów. Zapoznaj się z aktualizacją Uzyskiwanie wyniku z aktywności.

    • W tej wersji rozwiązaliśmy kilka problemów związanych z nieprawidłowymi kodami żądań i wysyłaniem żądań uprawnień, które uniemożliwiały działanie interfejsu Activity Result API w poprzednich wersjach FragmentActivity. Aby używać interfejsów Activity Result API w FragmentActivity lub AppCompatActivity, musisz uaktualnić fragment do wersji 1.3.0.
  • Fragment Result API: dodano obsługę przekazywania wyników między dwoma fragmentami za pomocą nowych interfejsów API w FragmentManager. Działa to w przypadku fragmentów hierarchii (nadrzędny/podrzędny), fragmentów DialogFragment i fragmentów w Navigation. Zapewnia to, że wyniki są wysyłane do fragmentu tylko wtedy, gdy jest on w stanie STARTED. Interfejsy API fragmentów docelowych zostały wycofane na rzecz tych nowych interfejsów API. Więcej informacji znajdziesz w artykule Uzyskiwanie wyników za pomocą interfejsu Fragment Result API.

  • FragmentOnAttachListener: wywołanie zwrotne onAttachFragment() w przypadku FragmentActivityFragment zostało wycofane. Dodano nowy interfejs FragmentOnAttachListener, który zapewnia bardziej elastyczną alternatywę, umożliwiając przekazywanie onAttachFragment() do oddzielnych, testowalnych odbiorników i dodawanie odbiornika do menedżerów fragmentów innych niż bezpośredni podrzędny menedżer fragmentów.

  • FragmentScenario Ulepszenia: klasa FragmentScenario z artefaktu fragment-testing została przepisana w języku Kotlin i zawiera szereg ulepszeń:

    • FragmentScenario korzysta teraz z setMaxLifecycle() do implementowania moveToState(), co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od bazowej aktywności.
    • FragmentScenario obsługuje teraz ustawianie początkowego Lifecycle.State, aby można było potwierdzić stan fragmentu przed pierwszym przejściem do każdego Lifecycle.State.
    • Obecnie istnieje alternatywa dla interfejsu FragmentScenario API onFragment w postaci metody rozszerzenia Kotlin withFragment, która umożliwia zwracanie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku.
  • ViewTree Pomoc: Fragment obsługuje teraz interfejsy API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View)ViewTreeSavedStateRegistryOwner dodane w cyklu życia 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.

  • TRANSIT_ zmiany w animacji: domyślne efekty fragmentu – TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE – używają teraz Animator zamiast Animation. Zasoby użyte do utworzenia tych animatorów są teraz prywatne.

  • Wycofanie setRetainInstance(): metoda setRetainInstance() w przypadku fragmentów została wycofana. Wraz z wprowadzeniem ViewModeli deweloperzy zyskali specjalny interfejs API do zachowywania stanu, który można powiązać z aktywnościami, fragmentami i wykresami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, nieprzechowywanego fragmentu i zachować oddzielnie określony stan, który chcą przechowywać. Pozwala to uniknąć częstego źródła wycieków pamięci przy zachowaniu przydatnych właściwości pojedynczego tworzenia i niszczenia przechowywanego stanu (czyli konstruktora ViewModel i otrzymywanego przez niego wywołania zwrotnego onCleared()).

  • Wycofanie adaptera ViewPager 1: wraz z wprowadzeniem ViewPager21.0.0 wycofaliśmy klasy FragmentPagerAdapterFragmentStatePagerAdapter służące do interakcji z ViewPager. Zobacz Migracja z ViewPager do ViewPager2.

Wersja 1.3.0-rc02

27 stycznia 2021 r.

androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02androidx.fragment:fragment-testing:1.3.0-rc02 są zwalniane. Wersja 1.3.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

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

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

  • Widok fragmentu Lifecycle prawidłowo obsługuje teraz przypadki, w których widok fragmentu jest niszczony przed osiągnięciem przez Lifecycle stanu CREATED, co pozwala uniknąć wyjątków typu „no event down from INITIALIZED” (eda2bd, b/176138645).
  • Fragmenty, które używają znaku Animator, są teraz wyświetlane w odpowiedniej kolejności podczas korzystania z FragmentContainerView. (Id9aa3, b/176089197)

Wersja 1.3.0-rc01

16 grudnia 2020 roku

androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01androidx.fragment:fragment-testing:1.3.0-rc01 są zwalniane. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • onPrepareOptionsMenu() działa teraz zgodnie z tą samą logiką co onCreateOptionsMenu() i nie jest już wywoływana, gdy fragment nadrzędny wywołuje setMenuVisibility(false). (Id7de8, b/173203654)

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

  • Rozwiązaliśmy problem z wyciekiem pamięci i artefaktem wizualnym, który występował podczas dodawania fragmentu z Animation do FragmentContainerView, a następnie przerywania tego procesu 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)
  • Fokus jest teraz prawidłowo przywracany do widoków głównych fragmentów po ich wznowieniu. (Ifc84b)
  • Łączenie operacji pop i replace w tej samej transakcji fragmentu będzie teraz wyświetlać odpowiednie animacje (Ifd4e4, b/170328691).

Wersja 1.3.0-beta02

2 grudnia 2020 r.

androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02androidx.fragment:fragment-testing:1.3.0-beta02 są zwalniane. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentScenario został w pełni przekonwertowany na język Kotlin przy zachowaniu zgodności kodu źródłowego i binarnej dzięki użyciu interfejsów funkcyjnych Kotlin 1.4 dla FragmentAction. (I19d31)

Zmiany w zachowaniu

  • Elementy FragmentContainerView, które nie wczytują fragmentu za pomocą atrybutu class lub android:name, mogą być teraz używane poza elementem FragmentActivity. (Id4397, b/172266337)
  • Próba ustawienia maksymalnego czasu życia fragmentu na DESTROYED spowoduje teraz zgłoszenie wyjątku IllegalArgumentException (Ie7651, b/170765622).
  • Inicjowanie FragmentScenario ze stanem DESTROYED będzie teraz powodować zgłaszanie wyjątku 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ł stanu końcowego, jeśli przerywano przejście fragmentu, które korzystało z opcji Animator lub TRANSIT_FRAGMENT_. (I92426, b/169874632)
  • Rozwiązaliśmy problem, który uniemożliwiał prawidłowe niszczenie fragmentów z wychodzącym Animation. (I83d65)
  • Wychodzenie z fragmentów, w których efekty są odwrócone, powoduje teraz prawidłowe anulowanie i ponowne uruchomienie z odpowiednim efektem wejścia. (I62226, b/167092035)
  • Rozwiązaliśmy problem, który powodował, że wyjście Animator z hide() nie było uruchamiane. (Id7ffe)
  • Fragmenty są teraz prawidłowo wyświetlane, gdy są odroczone, a następnie natychmiast uruchamiane. (Ie713b, b/170022857)
  • Fragmenty, które usuwają widok z ogniska podczas animacji, nie będą już próbować przywrócić ostrości odłączonego widoku po osiągnięciu RESUMED (I38c65, b/172925703).

Wkład zewnętrzny

  • FragmentFactory zapisuje teraz klasy fragmentów oddzielnie dla różnych instancji ClassLoader. Dziękujemy Simonowi Schillerowi. (#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-beta01androidx.fragment:fragment-testing:1.3.0-beta01 są zwalniane. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w interfejsie API

Zmiany w zachowaniu

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

Poprawki błędów

  • Fragmenty rozszerzone za pomocą tagu <fragment> będą teraz prawidłowo czekać, aż ich widoki zostaną dodane do kontenera, zanim przejdą do stanu STARTED (I02f4c).
  • Fragmenty, które są widoczne, a następnie setMaxLifecycle() do CREATED, teraz prawidłowo uruchamiają efekty wyjścia. (b/165822335)
  • Usunięcie odłączonego fragmentu, który nie został dodany do stosu wstecznego, nie powoduje już wycieku pamięci. Dzięki uprzejmości Nicklasa Ansmana Giertza. (b/166489383)
  • Aktywne fragmenty będą teraz zawsze miały wartość niezerową w przypadku FragmentManager, a fragmenty z wartością niezerową w przypadku FragmentManager będą zawsze uznawane za aktywne. (aosp/1422346)
  • Domyślne efekty fragmentu, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE, używają teraz Animator zamiast Animation. (b/166155034)

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

  • Fragmenty prawidłowo przywracają stan fokusu widoku sprzed rozpoczęcia animacji. (Icc256)
  • Fragmenty, które mają tylko przejście elementu wspólnego, teraz prawidłowo kończą efekty specjalne, co oznacza, że faktycznie przechodzą do stanu końcowego (Iaebc7, b/166658128).
  • Widoki fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876)
  • Nowy menedżer stanu konsekwentnie usuwa widok fragmentu wychodzącego przed dodaniem widoku fragmentu wchodzącego. (I41a6e)
  • Nowy menedżer stanu uwzględnia teraz wyraźne zmiany widoczności widoku fragmentu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu wchodzącego na INVISIBLE, pozostanie on niewidoczny. (b/164481490)
  • Fragmenty teraz traktują Animators jako ważniejsze od Animations, co oznacza, że fragment zawierający oba te elementy uruchomi tylko Animator i zignoruje Animation. (b/167579557)
  • Nowy menedżer stanu nie powoduje już migotania fragmentów podczas korzystania z animacji wejścia. (b/163084315)

Znany problem

Jeśli podczas efektu specjalnego w nowym menedżerze stanu naciśniesz przycisk Wstecz, zamiast wrócić do poprzedniego fragmentu, stary fragment nigdy nie zostanie ponownie dodany, co spowoduje wyświetlenie pustego ekranu. (b/167259187, b/167092035, b/168442830)

Wersja 1.3.0-alpha08

19 sierpnia 2020 r.

androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08androidx.fragment:fragment-testing:1.3.0-alpha08 są zwalniane. Wersja 1.3.0-alpha08 zawiera te zmiany.

New State Manager

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

  • Eksperymentalny interfejs API w FragmentManager.enableNewStateManager(boolean) może służyć do określania, czy FragmentManager ma używać nowego menedżera stanu. (I7b6ee)

Poniższe problemy są rozwiązywane tylko w przypadku korzystania z nowego menedżera stanu:

  • Poprzedni fragment operacji replace jest teraz prawidłowo zatrzymywany przed rozpoczęciem nowego fragmentu. (b/161654580)
  • Fragmenty zapobiegają teraz występowaniu wielu konkurujących ze sobą animacji w tych samych fragmentach, co pozwala uniknąć sytuacji, w których Animation zastępuje wszystkie efekty Transition lub w których AnimatorTransition w pojedynczym fragmencie działają jednocześnie. (b/149569323)
  • Wartości enterTransitionexitTranstion wszystkich fragmentów wchodzących i wychodzących są teraz obliczane, a nie tylko ostatniego fragmentu wchodzącego i pierwszego fragmentu wychodzącego. (b/149344150)
  • Odłożone fragmenty nie są już blokowane w stanie CREATED, ale przechodzą do stanu STARTED wraz z innymi fragmentami. (b/129035555)
  • Rozwiązaliśmy problem, który powodował, że FragmentManager wykonywał operacje w nieprawidłowej kolejności w przypadku połączenia odroczonej transakcji z zmienioną kolejnością i transakcji bez zmienionej kolejności. (b/147297731)
  • Jednoczesne wyświetlanie wielu fragmentów nie będzie już powodować tymczasowego wyświetlania fragmentów pośrednich podczas odraczania fragmentów. (b/37140383)
  • FragmentManager zwraca teraz prawidłowe fragmenty podczas wywoływania funkcji findFragmentById() lub findFragmentByTag() z poziomu wywołania zwrotnego onAttachFragment(). (b/153082833)
  • Fragmenty nie wywołują już metody onCreateView() w przypadku niszczenia fragmentów, gdy fragment zastępujący jest odroczony. (b/143915710)
  • Komunikat o błędzie, który pojawia się podczas próby połączenia instancji frameworka Transition i AndroidX Transition, zawiera teraz informację o fragmencie z nieprawidłowym przejściem. (b/155574969)

Zmiany w zachowaniu

  • Możesz teraz wywołać funkcję launch() na obiekcie ActivityResultLauncher w metodzie cyklu życia onCreate() fragmentu. (b/161464278)
  • Wywołanie funkcji registerForActivityResult() po wywołaniu funkcji onCreate() powoduje teraz zgłoszenie wyjątku wskazującego, że jest to niedozwolone, zamiast cichego niepowodzenia w dostarczaniu wyników po zmianie konfiguracji. (b/162255449)
  • FragmentActivity korzysta teraz z interfejsu OnContextAvailableListener wprowadzonego w Activity 1.2.0-alpha08, aby przywrócić stan FragmentManager. Wszyscy odbiorcy dodani do podklas FragmentActivity będą uruchamiani po tym odbiorcy. (I513da)

Poprawki błędów

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

Znany problem

  • Jeśli używasz nowego menedżera stanu, bezpośrednie ustawienie widoczności widoku głównego fragmentu po onViewCreated() i przed onResume() spowoduje, że ustawiona widoczność zostanie zastąpiona przez FragmentManager, który kontroluje widoczność widoku głównego. Aby obejść ten problem, zawsze używaj operacji hide()show() do zmiany widoczności fragmentu. (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-alpha07androidx.fragment:fragment-testing:1.3.0-alpha07 są zwalniane. Wersja 1.3.0-alpha07 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w zachowaniu

  • FragmentScenario korzysta teraz z setMaxLifecycle() do implementowania moveToState(), co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od bazowej aktywności. (b/156527405)
  • Obiekt SavedStateRegistryOwner zwrócony przez ViewTreeSavedStateRegistryOwner jest teraz powiązany z cyklem życia widoku fragmentu. Dzięki temu jego stan zostanie zapisany i przywrócony w tym samym czasie co widok fragmentu. (b/158503763)

Poprawki błędów

  • Fragmenty czekają teraz na dołączenie widoku fragmentu przed wywołaniem funkcji ViewCompat.requestApplyInsets(), co pozwala uniknąć sytuacji, w których żądanie wstawienia było odrzucane. (b/158095749)
  • Wywołanie clearFragmentResultListener teraz prawidłowo czyści obserwatora cyklu życia. (b/159274993)

Wersja 1.3.0-alpha06

10 czerwca 2020 r.

androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06androidx.fragment:fragment-testing:1.3.0-alpha06 są zwalniane. Wersja 1.3.0-alpha06 zawiera te zatwierdzenia.

Nowe funkcje

  • Wywołanie zwrotne onAttachFragment() w przypadku FragmentActivityFragment zostało wycofane. Dodaliśmy nowy interfejs FragmentOnAttachListener, który zapewnia bardziej elastyczną alternatywę, umożliwiając delegowanie onAttachFragment() do oddzielnych, testowalnych odbiorników i obsługę dodawania odbiornika do menedżerów fragmentów innych niż bezpośredni podrzędny menedżer fragmentów. (I06d3d)

Poprawki błędów

  • Stan widoku fragmentów nadrzędnych jest teraz przywracany przed stanem widoku fragmentów podrzędnych, co rozwiązuje problem z kolejnością wyświetlania po zmianie konfiguracji, gdy DialogFragment wyświetlał inny DialogFragment jako fragment podrzędny. (b/157195715)
  • Rozwiązaliśmy problem, który powodował, że UseRequireInsteadOfGet Lint check nie obsługiwał prawidłowo połączonych zastosowań operatorów ?.!!. (b/157677616)

Wersja 1.3.0-alpha05

20 maja 2020 r.

androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05androidx.fragment:fragment-testing:1.3.0-alpha05 są zwalniane. Wersja 1.3.0-alpha05 zawiera te zmiany.

Nowe funkcje

Zmiany w interfejsie API

  • Interfejsy API setFragmentResult()setFragmentResultListener() przyjmują teraz odpowiednio niepuste wartości BundleFragmentResultListener. Aby jawnie wyczyścić wcześniej ustawiony wynik lub odbiornik, użyj nowych metod clearFragmentResult()clearFragmentResultListener(). (b/155416778)
  • setFragmentResultListener() Rozszerzenia Kotlin, które przyjmują wyrażenie lambda, są teraz oznaczone jako inline. (b/155323404)

Zmiany w zachowaniu

  • Wycofane wcześniej interfejsy startActivityForResult(), startIntentSenderForResult()requestPermissions na platformie Fragment korzystają teraz wewnętrznie z interfejsu ActivityResultRegistry, co usuwa ograniczenie dotyczące używania w kodach żądań tylko niższych bitów (poniżej 0xFFFF) podczas korzystania z tych interfejsów API. (b/155518741)

Aktualizacje dokumentacji

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

Wersja 1.3.0-alpha04

29 kwietnia 2020 r.

androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04androidx.fragment:fragment-testing:1.3.0-alpha04 są zwalniane. Wersja 1.3.0-alpha04 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano obsługę przekazywania wyników między dwoma fragmentami za pomocą nowych interfejsów API w FragmentManager. Działa to w przypadku fragmentów hierarchii (element nadrzędny/podrzędny), fragmentów DialogFragment i fragmentów w Navigation. Dzięki temu wyniki są wysyłane tylko do fragmentu, gdy jest on w stanie co najmniej STARTED. (b/149787344)

Zmiany w interfejsie API

  • Interfejsy API fragmentu docelowego zostały wycofane. Do przekazywania danych między fragmentami należy używać nowych interfejsów Fragment Result API. (b/149787344)
  • Interfejsy API startActivityForResult()/onActivityResult()requestPermissions()/onRequestPermissionsResult() w klasie Fragment zostały wycofane. Użyj interfejsów Activity Result API. (aosp/1290887)
  • Zmiana powodująca niezgodność w usłudze Activity 1.2.0-alpha04: metoda prepareCall() została zmieniona na registerForActivityResult(). (aosp/1278717)

Poprawki błędów

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

Wersja 1.3.0-alpha03

1 kwietnia 2020 r.

androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03androidx.fragment:fragment-testing:1.3.0-alpha03 są zwalniane. Wersja 1.3.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Metody prepareCall na platformie Fragment to teraz final. (b/152439361)

Poprawki błędów

  • Rozwiązaliśmy problem z regresją wprowadzony w fragmencie 1.3.0-alpha02 podczas używania BottomSheetDialogFragment. (b/151652127, aosp/1263328, aosp/1265163)
  • Naprawiono błąd powodujący awarię podczas używania prepareCall z fragmentu po zmianie konfiguracji. (b/152137004)
  • Rozwiązaliśmy problem, który powodował, że podczas korzystania z setTargetFragment() przejścia elementów współdzielonych i wyjścia były ignorowane. (b/152023196)
  • Fragment 1.2.4: zaktualizowano reguły ProGuard dla fragmentów, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338)
  • Fragment 1.2.4: wyłączono regułę Lint FragmentLiveDataObserve w klasach DialogFragment, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co sprawia, że podczas wywoływania observe można bezpiecznie używać this lub viewLifecycleOwner. (b/151765086)

Zmiany zależności

  • Fragmenty zależą od aktywności1.2.0-alpha03, w której wprowadzono znaczące ulepszenia interfejsu Activity Result API w aktywności 1.2.0-alpha02.

Wersja 1.3.0-alpha02

18 marca 2020 r.

androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02androidx.fragment:fragment-testing:1.3.0-alpha02 są zwalniane. Wersja 1.3.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano obsługę interfejsu ActivityResultRegistry API wprowadzonego w Activity 1.2.0-alpha02 do obsługi przepływów startActivityForResult()+onActivityResult()requestPermissions()+onRequestPermissionsResult() bez zastępowania metod w fragmencie, a także udostępniono punkty zaczepienia do testowania tych przepływów. Zapoznaj się z aktualizacją Uzyskiwanie wyniku z aktywności. (b/125158199)

Zmiany w interfejsie API

  • DialogFragment udostępnia teraz konstruktor, który przyjmuje obiekt @LayoutRes wskazujący układ, który onCreateView() powinien domyślnie rozszerzać. (b/150327080)
  • Metoda onActivityCreated() została wycofana. Kod dotyczący widoku fragmentu powinien być umieszczony w metodzie onViewCreated() (która jest wywoływana bezpośrednio przed metodą onActivityCreated()), a inny kod inicjujący – w metodzie onCreate(). Aby otrzymać wywołanie zwrotne, gdy onCreate() aktywności zostanie ukończone, należy zarejestrować LifeCycleObserverLifecycle aktywności w onAttach() i usunąć je po otrzymaniu wywołania zwrotnego onCreate(). (b/144309266)

Poprawki błędów

  • Fragment 1.2.3: naprawiliśmy błąd w DialogFragment, który powodował StackOverflowError podczas wywoływania getLayoutInflater()onCreateDialog(). (b/117894767, aosp/1258664)
  • Fragment 1.2.3: zmniejszyliśmy zakres reguł ProGuard uwzględnionych w fragmencie, aby można było usuwać nieużywane klasy fragmentów. (b/149665169)
  • W sekcji Fragment 1.2.3: naprawiono fałszywie dodatnie wyniki sprawdzania UseRequireInsteadOfGet Lint w przypadku używania nazwy zmiennej lokalnej, która przesłaniała nazwę właściwości Kotlin. (b/149891163)
  • Fragment 1.2.3: FragmentContainerView nie zgłasza już błędu UnsupportedOperationException w przypadku użycia nieprawidłowego konstruktora w podglądzie układu. (b/149707833)

Znane problemy

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

Wersja 1.3.0-alpha01

4 marca 2020 r.

androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01androidx.fragment:fragment-testing:1.3.0-alpha01 są zwalniane. Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

Zmiany w interfejsie API

  • Metoda setRetainInstance() w przypadku fragmentów została wycofana. Wraz z wprowadzeniem ViewModeli deweloperzy zyskali specjalny interfejs API do zachowywania stanu, który można powiązać z aktywnościami, fragmentami i wykresami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, nieprzechowywanego fragmentu i zachować oddzielnie określony stan, który chcą przechowywać. Pozwala to uniknąć częstego źródła wycieków pamięci przy zachowaniu przydatnych właściwości pojedynczego tworzenia i niszczenia przechowywanego stanu (czyli konstruktora ViewModel i otrzymywanego przez niego wywołania zwrotnego onCleared()). (b/143911815)
  • Wraz z wprowadzeniem ViewPager2 1.0.0 klasy FragmentPagerAdapterFragmentStatePagerAdapter do interakcji z ViewPager zostały wycofane. Zobacz Migracja z ViewPager do ViewPager2. (b/145132715)

Poprawki błędów

  • Reguły ProGuard dla fragmentów zachowują teraz tylko konstruktory domyślne Fragment klas, które są używane, a nie wszystkich instancji Fragment. Rozwiązuje to problem wprowadzony w fragmencie 1.2.1. (b/149665169
  • require___() Reguły Lint dodane w fragmencie 1.2.2 nie generują już fałszywych alarmów w przypadku zmiennych lokalnych, które mają taką samą nazwę jak zacienione nazwy właściwości Kotlin (np. view). (b/149891163)
  • FragmentContainerView nie zgłasza już błędu UnsupportedOperationException podczas korzystania z podglądu układu w Androidzie Studio. (b/149707833)
  • Rozwiązaliśmy problem polegający na tym, że zachowane fragmenty dodane po zapisaniu stanu nie były stale odtwarzane, a następnie niszczone po każdej zmianie konfiguracji. (b/145832397)

Wersja 1.2.5

Wersja 1.2.5

10 czerwca 2020 r.

androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5androidx.fragment:fragment-testing:1.2.5 są zwalniane. Wersja 1.2.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragment getViewLifecycleOwner() jest teraz zatrzymywany przed wywołaniem onSaveInstanceState(), co odzwierciedla zachowanie cyklu życia fragmentu. Wcześniej opublikowaliśmy go w fragmencie 1.3.0-alpha04. (b/154645875)
  • Wywołanie setMenuVisibility(false) w fragmencie teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. Wcześniej opublikowaliśmy go w fragmencie 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.4androidx.fragment:fragment-testing:1.2.4 są zwalniane. Wersja 1.2.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Zaktualizowano reguły ProGuard dla fragmentów, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338)
  • Wyłączono regułę Lint w przypadku klas FragmentLiveDataObserve, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co umożliwia bezpieczne używanie funkcji this lub viewLifecycleOwner podczas wywoływania funkcji observe.DialogFragment (b/151765086)

Wersja 1.2.3

Wersja 1.2.3

18 marca 2020 r.

androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3androidx.fragment:fragment-testing:1.2.3 są zwalniane. 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)
  • Zmniejszyliśmy zakres reguł ProGuard uwzględnionych w fragmencie, aby można było usuwać nieużywane klasy fragmentów. (b/149665169)
  • Rozwiązaliśmy problem z fałszywie dodatnimi wynikami w sprawdzaniu UseRequireInsteadOfGet Lint w przypadku używania nazwy zmiennej lokalnej, która przesłaniała nazwę właściwości Kotlin. (b/149891163)
  • FragmentContainerView nie zgłasza 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.

androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2androidx.fragment:fragment-testing:1.2.2 są zwalniane. Wersja 1.2.2 zawiera te zatwierdzenia.

Nowe testy Lint

  • Lint sugeruje użycie viewLifecycleOwner jako LifecycleOwner w wywołaniach OnBackPressedDispatcheronCreateView(), onViewCreated()onActivityCreated(). (b/142117657)
  • Dodano nowe sprawdzenie Lint, które potwierdza, że podczas korzystania z artefaktu fragment-testing używasz prawidłowego elementu debugImplementation. (b/141500106)
  • Fragmenty sugerują teraz używanie 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 Fragment API, które zawierają odpowiedniki getrequire. (aosp/1202883)

Poprawki błędów

  • Naprawiono pliki ProGuard fragmentów, aby uniknąć ostrzeżeń R8 (b/148963981).
  • Ulepszyliśmy istniejące sprawdzanie Lint, które sugeruje używanie viewLifecycleOwner zamiast observe, aby obsługiwać też wersję metody rozszerzenia livedata-ktx funkcji observe. (b/148996309)
  • Poprawiono formatowanie wielu testów Lint (aosp/1157012).

Wkład użytkowników zewnętrznych

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

Wersja 1.2.1

Wersja 1.2.1

5 lutego 2020 r.

androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1androidx.fragment:fragment-testing:1.2.1 są zwalniane. Wersja 1.2.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Fragmenty dodane za pomocą metod addreplace, które przyjmują instancję Class (lub wersje Kotlin reified), mają teraz domyślny konstruktor zachowywany przez ProGuard. (b/148181315)
  • Metody FragmentStatePagerAdapterFragmentPagerAdapter nie przechwytują już wyjątków zgłaszanych przez FragmentManager podczas wykonywania 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 rozszerzone za pomocą tagu <fragment> zawsze otrzymują wywołanie funkcji onInflate() przed onCreate(), gdy znajdują się w układzie. (aosp/1215856)
  • Wywołanie toString() w instancji FragmentManager nie powoduje już zgłaszania wyjątku NullPointerException, gdy aktywność jest już zniszczona. (b/148189412)

Zmiany zależności

Wersja 1.2.0

Wersja 1.2.0

22 stycznia 2020 r.

androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0androidx.fragment:fragment-testing:1.2.0 są zwalniane. Wersja 1.2.0 zawiera te zmiany.

Ważne zmiany od wersji 1.1.0

  • FragmentContainerView: FragmentContainerView to wysoce zalecany kontener do dynamicznego dodawania fragmentów, który zastępuje użycie FrameLayout lub innych układów. Obsługuje też te same atrybuty class, android:name i opcjonalny atrybut android:tag co tag <fragment>, ale do dodania tego początkowego fragmentu używa zwykłego tagu FragmentTransaction, a nie ścieżki kodu niestandardowego używanej przez tag <fragment>.
  • onDestroyView() czas: fragmenty czekają teraz na zakończenie animacji wyjścia, przejść platformy wyjścia i przejść AndroidX (gdy używasz przejścia 1.3.0), zanim wywołają onDestroyView().
  • Oparte na klasachadd()replace(): dodano nowe przeciążenia funkcji add()replace()FragmentTransaction, które przyjmują argumenty Class<? extends Fragment> i opcjonalne Bundle. Te metody używają FragmentFactory do utworzenia instancji fragmentu, który ma zostać dodany. Do fragment-ktx dodaliśmy też rozszerzenia Kotlin, które używają typów konkretnych (np.fragmentTransaction.replace<YourFragment>(R.id.container)).
  • Integracja ViewModel z SavedState w cyklu życia: SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z fragmentem.
  • Nowe testy Lint: dodaliśmy nowy test Lint, który sprawdza, czy podczas obserwowania LiveDataonCreateView(), onViewCreated() lub onActivityCreated() używasz getViewLifecycleOwner().
  • getFragmentManager() wycofanie: metody getFragmentManager()requireFragmentManager() w klasie Fragment zostały wycofane i zastąpione jedną metodą getParentFragmentManager(), która zwraca niepusty obiekt FragmentManager, do którego 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. Klasa FragmentManager uwzględnia teraz wartość Log.isLoggable() w przypadku tagu FragmentManager, co umożliwia włączanie rejestrowania DEBUG lub VERBOSE bez ponownej kompilacji aplikacji.

Znane problemy

  • Fragmenty, do których odwołuje się tylko atrybut class lub android:name w elemencie FragmentContainerView, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania dla każdej klasy fragmentu. (b/142601969)
  • Gdy dodajesz NavHostFragment za pomocą class lub android:name w XML z FragmentContainerView, nie możesz używać findNavController()onCreate() w swojej 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-rc05androidx.fragment:fragment-testing:1.2.0-rc05 są zwalniane. Wersja 1.2.0-rc05 zawiera te zmiany.

Poprawki błędów

  • Naprawiliśmy regresję w fragmencie 1.2.0-rc04 podczas używania tagu <fragment>, która powodowała nieprawidłowe wywoływanie funkcji onViewCreated() podczas niszczenia aktywności. (b/146290333)
  • Fragmenty dodane za pomocą tagu <fragment> są teraz prawidłowo czyszczone z konfiguracji, nawet jeśli czasami znajdują się w układzie (np. tylko w układzie poziomym). W rezultacie te fragmenty są teraz prawidłowo przenoszone do CREATED, nawet jeśli nie znajdują się w układzie, zamiast być tworzone, ale nigdy nie przechodzić 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-rc04androidx.fragment:fragment-testing:1.2.0-rc04 są zwalniane. Wersja 1.2.0-rc04 zawiera te zmiany.

Poprawki błędów

  • Dostosowaliśmy animacje dla TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE, aby uniknąć problemów wizualnych. (b/145468417)

Wersja 1.2.0-rc03

4 grudnia 2019 r.

androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03androidx.fragment:fragment-testing:1.2.0-rc03 są zwalniane. Wersja 1.2.0-rc03 zawiera te zmiany.

Poprawki błędów

  • Naprawiliśmy niezamierzoną zmianę działania, w wyniku której usunięte fragmenty były nadal zwracane przez findFragmentById() / findFragmentByTag() podczas działania animacji/przejść wyjścia. (b/143982969, aosp/1167585)
  • Fragmenty podrzędne są teraz prawidłowo zatrzymywane przed fragmentami nadrzędnymi, gdy aktywność zawierająca wywołuje onSaveInstanceState(). (b/144380645)
  • Rozwiązaliśmy problem, który powodował, że po wysunięciu ukrytego fragmentu widoki były nieprawidłowo oznaczane symbolem 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 setUserVisibleHint(). (b/143897055)
  • Ulepszyliśmy dokumentację dotyczącą setFragmentFactory()getFragmentFactory(), aby lepiej wskazywać, że ustawienie FragmentFactory wpłynie również na menedżerów fragmentów podrzędnych. (aosp/1170095)

Zmiany zależności

  • Fragmenty zależą teraz od komponentów 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-rc02androidx.fragment:fragment-testing:1.2.0-rc02 są zwalniane. Wersja 1.2.0-rc02 zawiera te zmiany.

Poprawki błędów

  • W języku Kotlin poprawka LintFix dotycząca używania getViewLifecycleOwner() podczas obserwowania LiveDataonCreateView(), onViewCreated() lub onActivityCreated() (wprowadzona w fragmencie 1.2.0-rc01) używa teraz składni dostępu do właściwości Kotlin viewLifecycleOwner zamiast getViewLifecycleOwner(). (aosp/1143821)

Wersja 1.2.0-rc01

23 października 2019 r.

androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01androidx.fragment:fragment-testing:1.2.0-rc01 są zwalniane. Wersja 1.2.0-rc01 zawiera te zmiany.

Nowe funkcje

  • Tag FragmentContainerView obsługuje teraz atrybut class oprócz atrybutu android:name, co odzwierciedla funkcjonalność tagu <fragment>. (b/142722242)
  • Dodano nowe sprawdzenie Lint, które zapewnia, że podczas obserwowania LiveDataonCreateView(), onViewCreated() lub onActivityCreated() używasz getViewLifecycleOwner(). (b/137122478)

Poprawki błędów

  • Wywołania zwrotne onDismissonCancelDialogFragment gwarantują teraz, że przekazywany do nich element DialogInterface nie ma wartości null, a wywoływana funkcja getDialog() zwraca wartość inną niż null. (b/141974033)
  • FragmentContainerView dodaje teraz fragment zdefiniowany przez class lub android:name w ramach inflacji, dzięki czemu findFragmentById()findFragmentByTag() działają od razu. (b/142520327)
  • Naprawiono IllegalStateExceptionFragmentContainerView, ponieważ stan został zapisany. (b/142580713)
  • Usunęliśmy UnsupportedOperationExceptionFragmentContainerView, gdy klasa FragmentContainerView jest zaciemniona. (b/142657034)

Znane problemy

  • Fragmenty, do których odwołuje się tylko atrybut class lub android:name w elemencie FragmentContainerView, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania dla każdej klasy fragmentu. Wyłączyliśmy regułę Lint sugerującą przejście na FragmentContainerView, dopóki nie zostanie to naprawione w ramach aapt2. (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-beta02androidx.fragment:fragment-testing:1.2.0-beta02 są zwalniane. Wersja 1.2.0-beta02 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że element Fragment onInflate() nie otrzymywał odpowiednich atrybutów z elementu FragmentContainerView, co powodowało błędy w przypadkach takich jak NavHostFragment. (b/142421837)

Wersja 1.2.0-beta01

9 października 2019 r.

androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01androidx.fragment:fragment-testing:1.2.0-beta01 są zwalniane. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • FragmentContainerView dodaje obsługę dodawania początkowego fragmentu z dodatkową obsługą atrybutów XML android:name i opcjonalnych atrybutów android:tag. W przeciwieństwie do tagu <fragment> tag FragmentContainerView używa zwykłego tagu FragmentTransaction, aby dodać początkowy fragment, co umożliwia dalsze operacje FragmentTransaction na tagu FragmentContainerView i korzystanie z powiązania widoku w przypadku układu. (b/139830628, b/141177981)
  • Fragmenty zawierają teraz ostrzeżenie lintera z szybką poprawką, która zastępuje <fragment> ciągiem FragmentContainerView. (b/139830056)

Poprawki błędów

  • Usunęliśmy ClassCastException podczas korzystania z funkcji androidx.transition. (b/140680619)
  • Podczas korzystania z Transition 1.3.0-beta01 fragmenty czekają teraz na zakończenie przejść androidx.transition (oprócz przejść i animacji platformy, które zostały poprawione odpowiednio w Fragment 1.2.0-alpha03Fragment 1.2.0-alpha02) przed wysłaniem onDestroyView(). (aosp/1119841)
  • Podczas korzystania z przejścia 1.3.0-beta01 fragmenty prawidłowo anulują androidx.transition przejścia przed rozpoczęciem nowych przejść lub animacji w tym samym kontenerze. (aosp/1119841)
  • Rozwiązaliśmy problem w przypadku interfejsu API w wersji 17 i starszych, który występował podczas używania androidx.transitionprzejść w widoku głównym fragmentu podczas korzystania z FragmentContainerView. (b/140361893)
  • Artefakt fragment-testing zależy teraz od AndroidX Test 1.2.0, co rozwiązuje problem z niezgodnością z najnowszą wersją Espresso 3.2.0. (b/139100149)
  • Usunięto korzystanie z danych (Log.w) w klasie FragmentManager. (aosp/1126468)

Znane problemy

  • Elementy onInflate() fragmentu nie otrzymują odpowiednich atrybutów z elementu FragmentContainerView, co powoduje problemy w przypadkach takich jak NavHostFragment. (b/142421837)

Wersja 1.2.0-alpha04

18 września 2019 r.

androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04androidx.fragment:fragment-testing:1.2.0-alpha04 są zwalniane. Wersja 1.2.0-alpha04 zawiera te zmiany.

Zmiany w interfejsie API

  • Metody getFragmentManager()requireFragmentManager()Fragment zostały wycofane i zastąpione jedną metodą getParentFragmentManager(), która zwraca niepusty obiekt FragmentManager, do którego dodano Fragment (możesz użyć isAdded(), aby sprawdzić, czy można bezpiecznie wywołać tę metodę). (b/140574496)
  • Statyczna metoda FragmentManager.enableDebugLogging została wycofana. FragmentManager uwzględnia teraz wartość Log.isLoggable() w przypadku tagu FragmentManager, co umożliwia włączanie logowania DEBUG lub VERBOSE bez ponownej kompilacji aplikacji. (aosp/1116591)

Poprawki błędów

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

Wersja 1.2.0-alpha03

5 września 2019 r.

androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03androidx.fragment:fragment-testing:1.2.0-alpha03 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

Poprawki błędów

  • FragmentContainerView teraz prawidłowo odwraca kolejność rysowania podczas usuwania fragmentów z listy wstecznej. (b/139104187)
  • Rozwiązaliśmy problem polegający na tym, że podczas jednoczesnego usuwania fragmentu i dodawania nowego fragmentu uruchamiała się nieprawidłowa animacja. (b/111659726)
  • Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, co zostało naprawione w fragmencie 1.2.0-alpha02), zanim wyślą onDestroyView(). (b/138741697)

Wersja 1.2.0-alpha02

7 sierpnia 2019 r.

androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 i androidx.fragment:fragment-testing:11.2.0-alpha02. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z funkcji by viewModels(), by activityViewModels(), konstruktora ViewModelProvider lub ViewModelProviders.of() z obiektem 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 aktywności na urządzeniach z Androidem 10. (aosp/1012812, aosp/1014730)

Zmiany w interfejsie API

  • Wprowadza FragmentContainerView jako wysoce zalecany kontener dla dynamicznie dodawanych fragmentów, zastępując użycie FrameLayout itp., ponieważ rozwiązuje problemy z kolejnością animacji w osi Z i przekazywaniem wstawek okna do fragmentów. (b/37036000, aosp/985243, b/136494650)
  • Dodano statyczną metodę FragmentManager.findFragment(View), która umożliwia pobranie fragmentu zawierającego widok utworzony przez fragment. Rozszerzenie Kotlin jest też dostępne w fragment-ktx. (aosp/1090757)
  • Dodaliśmy nowe przeciążenia funkcji add() i replace() w FragmentTransaction, które przyjmują argumenty Class<? extends Fragment> i opcjonalnie Bundle. Te metody używają FragmentFactory do utworzenia instancji fragmentu, który ma zostać dodany. Do fragment-ktx dodaliśmy też rozszerzenia Kotlin, które używają typów reifikowanych (np.fragmentTransaction.replace<YourFragment>(R.id.container)). (b/126124987)
  • Do wywołań zwrotnych cyklu życia Fragment dodano adnotacje @MainThread. (b/127272564)
  • Interfejsy API związane z tytułem ścieżki na stronach FragmentTransactionFragmentManager.BackStackEntry zostały wycofane. (b/138252944)
  • Metoda setTransitionStyleFragmentTransaction została wycofana. (aosp/1011537)
  • Wiele metod w FragmentManager nie jest już abstract. Sama klasa FragmentManager pozostaje abstract i nie powinna być bezpośrednio tworzona ani rozszerzana. Należy nadal pobierać istniejącą instancję z klas getSupportFragmentManager(), getChildFragmentManager() itp.

Poprawki błędów

  • Fragment 1.1.0-rc04: fragmenty prawidłowo anulują odroczone przejścia po usunięciu fragmentów. (b/138251858)
  • Fragmentu 1.1.0-rc03: rozwiązaliśmy problem polegający na tym, że wielokrotne wywoływanie funkcji postponeEnterTransition() z limitem czasu nie powodowało anulowania poprzednich limitów czasu. (b/137797118)
  • Fragment 1.1.0-rc02: rozwiązano problem z awarią w FragmentPagerAdapterFragmentStatePagerAdapter podczas usuwania bieżącego elementu. (b/137209870)
  • Fragmenty czekają teraz na zakończenie animacji przed wysłaniem onDestroyView(). (b/136110528)
  • Animacje fragmentów z fragmentów podrzędnych i ich elementów podrzędnych są teraz prawidłowo obsługiwane podczas animowania fragmentu nadrzędnego. (b/116675313)
  • Rozwiązaliśmy problem z NullPointerException podczas używania przejść między elementami współdzielonymi i łączenia operacji pop i add. (b/120507394)
  • Dodano obejście problemu z IllegalStateException podczas używania FragmentPagerAdapterFragmentStatePagerAdapter w testach Robolectric. (b/137201343)

Wersja 1.2.0-alpha01

2 lipca 2019 r.

androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01androidx.fragment:fragment-testing:1.2.0-alpha01 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • FragmentManager wywołuje teraz metodę requestApplyInsets() po dołączeniu widoku Fragmentu i bezpośrednio przed wywołaniem metody onViewCreated(), dzięki czemu widok zawsze ma prawidłowe wstawki. (b/135945162)

Poprawki błędów

  • Naprawiliśmy błąd NullPointerException podczas wycofywania FragmentTransaction, które używało setPrimaryNavigationFragment() przed replace(). (b/134673465)

Wersja 1.1.0

Wersja 1.1.0

5 września 2019 r.

androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0androidx.fragment:fragment-testing:1.1.0 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany od wersji 1.0.0

  • fragment-testing: artefakt fragment-testing udostępnia klasę FragmentScenario do testowania fragmentu w izolacji. Więcej informacji znajdziesz w dokumentacji testowania fragmentów aplikacji.
  • FragmentFactory: możesz teraz ustawić FragmentFactoryFragmentManager, aby zarządzać tworzeniem instancji fragmentów, co eliminuje ścisły wymóg posiadania konstruktora bez argumentów.
  • Delegaty właściwości Kotlin dla ViewModeli: artefakt fragment-ktx zawiera teraz 2 delegaty właściwości Kotlin: by viewModels() do uzyskiwania dostępu do ViewModeli powiązanych z poszczególnymi fragmentami i by activityViewModels() do uzyskiwania dostępu do ViewModeli w zakresie działania aktywności.
  • Maksymalny cykl życia: możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując setMaxLifecycle() na FragmentTransaction. Zastępuje on wycofany już setUserVisibleHint(). FragmentPagerAdapterFragmentStatePagerAdapter mają nowy konstruktor, który umożliwia przełączenie się na nowe działanie.
  • Konstruktor FragmentActivity LayoutId: podklasy FragmentActivity mogą teraz opcjonalnie wywoływać konstruktor w FragmentActivity, który przyjmuje identyfikator R.layout, wskazując układ, który powinien być ustawiony jako widok treści, zamiast wywoływać setContentView()onCreate(). Nie zmienia to wymagania, aby podklasa miała konstruktor bez argumentów.
  • Konstruktor Fragment LayoutId: podklasy klasy Fragment mogą teraz opcjonalnie wywoływać konstruktor w klasie Fragment, który przyjmuje identyfikator R.layout, wskazując układ, który powinien być używany w tym fragmencie, jako alternatywę dla zastępowania metody onCreateView(). Rozwinięty układ można skonfigurować w onViewCreated().
  • Odłóż z limitem czasu: dodaliśmy nowe przeciążenie funkcji postponeEnterTransition(), które przyjmuje limit czasu.

Wersja 1.1.0-rc04

7 sierpnia 2019 r.

androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 i androidx.fragment:fragment-testing:1.1.0-rc04. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Fragmenty teraz prawidłowo anulują odroczone przejścia po usunięciu fragmentów. (b/138251858)

Wersja 1.1.0-rc03

19 lipca 2019 r.

androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 i androidx.fragment:fragment-testing:1.1.0-rc03. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że wielokrotne wywoływanie funkcji postponeEnterTransition() z limitem czasu nie powodowało anulowania poprzednich limitów czasu. (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-rc02androidx.fragment-testing:fragment:1.1.0-rc02 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązaliśmy problem z awarią w FragmentPagerAdapterFragmentStatePagerAdapter podczas usuwania bieżącego elementu. (b/137209870)

Wersja 1.1.0-rc01

2 lipca 2019 r.

androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01androidx.fragment:fragment-testing:1.1.0-rc01 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Fragmenty teraz prawidłowo aktualizują swoją widoczność podczas korzystania z operacji show() lub hide() w trakcie przejścia. (b/133385058)
  • Naprawiliśmy błąd NullPointerException podczas wycofywania FragmentTransaction, które używało setPrimaryNavigationFragment() przed replace(). (b/134673465)

Wersja 1.1.0-beta01

5 czerwca 2019 r.

androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01androidx.fragment:fragment-testing:1.1.0-beta01 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • androidx.lifecycle.Lifecycle wywołania zwrotne (szczególnie związane z STARTED, RESUMED, PAUSED, STOPPEDDESTROYED) w przypadku zagnieżdżonych fragmentów są teraz prawidłowo zagnieżdżone; (b/133497591)
  • OnBackPressedCallback zarejestrowane w onCreate() fragmentu mają teraz pierwszeństwo przed menedżerem fragmentów podrzędnych. (b/133175997)
  • Fragmenty podrzędne nie są już animowane, gdy ich fragment nadrzędny jest zastępowany. (b/121017790)
  • Animacje i przejścia fragmentów są teraz ignorowane podczas korzystania z animateLayoutChanges="true". Rozwiązaliśmy problem, który powodował, że fragmenty nie były prawidłowo niszczone. (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-alpha09androidx.fragment:fragment-testing:1.1.0-alpha09 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Fragmenty otrzymują teraz wywołanie zwrotne do nowej metody onPrimaryNavigationFragmentChanged(boolean), gdy zmieni się główny fragment nawigacji. aosp/960857

Poprawki błędów

  • Elementy menu utworzone przez fragment podrzędny są teraz prawidłowo usuwane po usunięciu fragmentu nadrzędnego. b/131581013

Wersja 1.1.0-alpha08

7 maja 2019 r.

androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08androidx.fragment:fragment-testing:1.1.0-alpha08 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ta wersja jest niezgodna z biblioteką Preferences w wersjach od 1.1.0-alpha01 do 1.1.0-alpha04. Jeśli używasz tej wersji komponentu Fragments, przejdź na wersję Preferences 1.1.0-alpha05.

Nowe funkcje

  • Dodano nowe przeciążenie funkcji postponeEnterTransition(), które przyjmuje limit czasu, po którym fragment automatycznie wywoła startPostponedEnterTransition() b/120803208

Zmiany w interfejsie API

  • Zmiana powodująca niezgodność: usunęliśmy wycofaną wcześniej metodę FragmentFactory instantiate, która przyjmowała argument Bundle. aosp/953856
  • Zmiana powodująca niezgodność: stałe RESUME_ONLY_CURRENT_FRAGMENTUSE_SET_USER_VISIBLE_HINT w plikach FragmentPagerAdapterFragmentStatePagerAdapter zostały zmienione na BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENTBEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Poprawki błędów

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

Wersja 1.1.0-alpha07

25 kwietnia 2019 r.

androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07androidx.fragment:fragment-testing:1.1.0-alpha07 są zwalniane. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując setMaxLifecycle() na FragmentTransaction. Zastępuje on wycofany już setUserVisibleHint(). FragmentPagerAdapterFragmentStatePagerAdapter mają nowy konstruktor, który umożliwia przełączenie się na nowe działanie. (b/129780800)

Zmiany w interfejsie API

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

Zmiany w zachowaniu

  • W konsekwencji (b/129907905) fragmenty na stosie wstecznym nie otrzymają wywołania zwrotnego do onCreateView(), gdy aktywność hosta zostanie ponownie utworzona. onCreateView() będzie teraz wywoływana tylko wtedy, gdy fragment stanie się widoczny (tzn. gdy stos wsteczny zostanie usunięty).

Poprawki błędów

  • Rozwiązaliśmy problem z używaniem tagu <fragment> w XML i konstruktora contentLayoutIdFragmentActivity lub AppCompatActivity. (b/129907905)
  • Rozwiązaliśmy problem polegający na tym, że fragmenty na stosie wstecznym nie były przenoszone co najmniej do stanu CREATED po zmianie konfiguracji, co powodowało nieprawidłowe usuwanie obiektów ViewModel i podrzędnych fragmentów zachowywanych. (b/129593351)
  • Rozwiązaliśmy problem z awarią w restoreSaveState spowodowaną brakiem synchronizacji zachowanych fragmentów po zapisaniu stanu instancji. (b/130433793) (aosp/947824)
  • Rozwiązaliśmy problemy polegające na tym, że funkcja OnBackPressedCallback dodana za pomocą cyklu życia fragmentu nie była wywoływana, jeśli FragmentManager miał stos wsteczny. Więcej informacji znajdziesz w artykule androidx.activity 1.0.0-alpha07. (aosp/948209)
  • Fragmenty nie wymuszają już LAYER_TYPE_HARDWARE w przypadku animacji. Jeśli potrzebujesz animacji warstwy sprzętowej, ustaw ją w ramach animacji. (b/129486478)

Wersja 1.1.0-alpha06

3 kwietnia 2019 r.

androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06androidx.fragment:fragment-testing:1.1.0-alpha06 są zwalniane. Zatwierdzenia 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

  • Klasy FragmentFragmentActivity zawierają teraz drugi konstruktor, który przyjmuje wartość @LayoutRes int. Zastępuje on poprzednie działanie polegające na dodawaniu do klasy adnotacji @ContentView. To podejście 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 instantiate klasy FragmentFactory, która przyjmuje argument Bundle, została wycofana. Aplikacje powinny używać nowego przeciążenia instantiate, które nie przyjmuje argumentu Bundle. (b/128836103)
  • Metody FragmentScenario są teraz prawidłowo oznaczone adnotacją @StyleRes. (aosp/924193)
  • FragmentTabHost zostało wycofane. (b/127971835)
  • Metoda getThemedContext() w klasie FragmentActivity została usunięta. (aosp/934078)

Poprawki błędów

  • Naprawiliśmy regresję w wersji 1.1.0-alpha05, która powodowała miganie przychodzącego fragmentu na ekranie. (b/129405432)
  • Rozwiązaliśmy problem, który powodował utratę głównego fragmentu nawigacji po serii operacji popBackStack+replace+popBackStack. (b/124332597)
  • Rozwiązaliśmy problem z używaniem konstruktorów @ContentView w aktywności podczas przywracania stanu fragmentu. (b/127313094)
  • Poprawiliśmy logikę setTargetFragment() podczas zastępowania istniejącego fragmentu docelowego fragmentem, który nie jest jeszcze dołączony do menedżera fragmentów. (aosp/932156)

Wersja 1.1.0-alpha05

13 marca 2019 r.

androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05androidx.fragment:fragment-testing:1.1.0-alpha05 są zwalniane. Pełną listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • wyszukiwania adnotacji są teraz zapisywane w pamięci podręcznej (b/123709449);@ContentView

Zmiany w zachowaniu

  • Wywoływanie funkcji remove(), hide(), show(), detach()setPrimaryNavigationFragment() z dołączonym fragmentem do innego menedżera fragmentów powoduje teraz zgłoszenie wyjątku IllegalStateException zamiast cichego niepowodzenia (aosp/904301).

Poprawki błędów

  • onNewIntent w przypadku FragmentActivity jest teraz prawidłowo oznaczony jako @CallSuper (b/124120586)
  • Rozwiązaliśmy problem polegający na tym, że funkcja DialogFragmentonDismiss() mogła być wywoływana dwukrotnie podczas korzystania z funkcji getDialog().dismiss() lub getDialog().cancel() (b/126563750).

Wersja 1.1.0-alpha04

7 lutego 2019 r.

androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04androidx.fragment:fragment-testing 1.1.0-alpha04 są zwalniane.

Nowe funkcje

  • Dodaliśmy obsługę adnotacji klasy @ContentView, która umożliwia wskazanie, który plik XML układu ma zostać rozszerzony, zamiast zastępować onCreateView(). Zalecamy wyświetlanie powiązanych zadań w onViewCreated(). (aosp/837619)
  • fragment-testing zależy teraz od androidx.test:core-ktx 1.1.0 stable (b/121209673)
  • Teraz możesz używać openActionBarOverflowOrOptionsMenuFragmentScenario do testowania menu opcji hostowanych przez fragment (b/121126668).

Zmiany w interfejsie API

  • Dodaliśmy metodę requireArguments(), która zwraca wartość @NonNull Bundle lub zgłasza wyjątek IllegalStateException (b/121196360).
  • Dodaliśmy informację, że wartości getLifecycle(), getViewLifecycleOwner()getViewLifecycleOwnerLiveData() nie powinny być zastępowane i w przyszłej wersji zostaną ustalone na stałe. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880714)
  • Dodaliśmy informację, że wartości getViewModelStore() nie należy zastępować i w przyszłej wersji zostanie ona ostatecznie ustalona. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880713)
  • Rozwiązaliśmy problem z kompatybilnością binarną z poprzednimi wersjami Fragmentów. (aosp/887877) (aosp/889834)

Poprawki błędów

  • Gdy przekażesz wartość null do parametru setTargetFragment(), docelowe fragmenty zostaną prawidłowo wyczyszczone. (aosp/849969)
  • Rozwiązaliśmy problem polegający na tym, że docelowe fragmenty były czasami niedostępne w onDestroy() lub po nim. (b/122312935)
  • Metoda onDismiss() w klasie DialogFragment jest teraz wywoływana przed onDestroy(). (aosp/874133) (aosp/890734)

Wersja 1.1.0-alpha03

17 grudnia 2018 r.

Nowe funkcje

  • Fragment implementuje teraz BundleSavedStateRegistryOwner i jest zależny od nowo wydanej biblioteki SavedState [aosp/824380].
  • Dodano delegata właściwości Kotlin, aby pobierać obiekty ViewModel powiązane z zawierającym je obiektem Activity [b/119050253]by activityViewModels
  • by viewModels Delegat właściwości Kotlin został rozszerzony, aby przyjmować opcjonalną metodę lambda do pobierania ViewModelStoreOwner, co umożliwia przekazywanie nadrzędnego fragmentu lub innego niestandardowego ViewModelStoreOwner za pomocą kodu takiego jak val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253].

Zmiany w interfejsie API

  • FragmentScenario umożliwia teraz określenie tematu, np. Theme.AppCompat [b/119054431]. Jest to zmiana powodująca niezgodność.
  • Dodaliśmy metodę requireView(), która zwraca wartość @NonNull View lub zgłasza wyjątek IllegalStateException [b/120241368].
  • Dodaliśmy metodę requireParentFragment(), która zwraca wartość @NonNull Fragment lub zgłasza wyjątek IllegalStateException [b/112103783].

Poprawki błędów

  • Naprawiono błąd IllegalStateException: nie udało się zapisać stanu b/120814739
  • Fragmenty przywracane z zapisanego stanu instancji będą teraz zawsze otrzymywać wartość niezerową Bundle [b/119794496]
  • Usunięte fragmenty nie używają już ponownie obiektu Lifecycle, jeśli zostaną ponownie dodane [b/118880674]

Wersja 1.1.0-alpha02

3 grudnia 2018 r.

Nowe funkcje

  • Rozszerzenia Kotlin FragmentScenario umożliwiają teraz używanie wyrażenia lambda do tworzenia fragmentu jako alternatywy dla przekazywania instancji FragmentFactory. (aosp/812913)

Poprawki błędów

  • Rozwiązano problem z błędem IllegalStateException podczas używania zagnieżdżonych fragmentów na stosie wstecznym (b/119256498).
  • Usunięto awarię podczas używania FragmentScenario.recreate()FragmentFactory (aosp/820540)
  • Rozwiązaliśmy problem polegający na tym, że po usunięciu fragmentu docelowe fragmenty nie były dostępne (aosp/807634).

Wersja 1.1.0-alpha01

5 listopada 2018 r.

To pierwsza wersja fragment-testingartefaktuFragmentScenario, który jest oparty na interfejsach API androidx.test:core. Więcej informacji znajdziesz w dokumentacji testowania fragmentów.

Nowe funkcje

  • Nowa klasa FragmentScenario do testowania fragmentów w izolacji.
  • Możesz teraz ustawić FragmentFactory na dowolnym FragmentManager, aby kontrolować sposób tworzenia nowych instancji Fragment.
  • Dodaliśmy nowy delegat właściwości Kotlin by viewModels() do pobierania ViewModeli z Fragmentu.
  • Oczekujące zdarzenia wejściowe (np. kliknięcia) są teraz anulowane w onStop() fragmentu.

Zmiany w interfejsie API

  • Znacznie rozszerzyliśmy adnotacje dotyczące dopuszczalności wartości null w interfejsie Fragment API.

Poprawki błędów

  • Rozwiązano problem, który powodował niepowodzenie operacji Fragment w LiveData (b/77944637)

Znane problemy

  • Po usunięciu fragmentu z menedżera fragmentów nie można uzyskać dostępu do fragmentów docelowych.
  • fragment-testing zależy od androidx.test:core:1.0.0-beta01 zamiast od prawidłowego androidx.test:core:1.0.0.