Fragment
Ostatnia aktualizacja | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
12 lutego 2025 r. | 1.8.6 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od Fragment, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven firmy Google.
Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle
aplikacji lub modułu:
Odlotowe
dependencies { def fragment_version = "1.8.3" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.3" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz oddać głos w sprawie istniejącego problemu, klikając przycisk z gwiazdką.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.8
Wersja 1.8.6
12 lutego 2025 r.
androidx.fragment:fragment-*:1.8.6
został zwolniony. Wersja 1.8.6 zawiera te komisy.
Poprawki błędów
- Zastąpienie
FragmentContainerView
setOnApplyWindowInsetsListener
przyjmuje teraz listenera null, zgodnie z możliwościami platformy. (I575f0, b/282790626)
Wersja 1.8.5
30 października 2024 r.
androidx.fragment:fragment-*:1.8.5
został zwolniony. Wersja 1.8.5 zawiera te komitowane zmiany.
Poprawki błędów
- Naprawiono błąd, który powodował, że
IllegalStateException
był wywoływany przezsaveBackStack
tylko po anulowaniu lub przerwaniu gestu przewidywania wstecz. (I3387d, b/342419080)
Wersja 1.8.4
2 października 2024 r.
androidx.fragment:fragment-*:1.8.4
został zwolniony. Wersja 1.8.4 zawiera te komity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował awarię Fragmentów podczas szybkiego naciśnięcia przycisku systemowego Wstecz lub szybkiego wykonania gestu Wstecz, gdy używane są przejścia Androidx. (Ibc038, b/364804225)
- Rozwiązaliśmy problem z fragmentami, w których przypadku przerwanie przewidywanego gestu wstecz powodowało przejście menedżera fragmentów w niezdefiniowany stan, a nawet wyświetlenie niewłaściwego fragmentu. (If82e2, b/338624457)
- Rozwiązaliśmy błąd
UninitializedPropertyAccessException
wAndroidFragment
podczas dynamicznej wymiany klasy używanej przez instancjęAndroidFragment
. (I12dea)
Wersja 1.8.3
4 września 2024 r.
androidx.fragment:fragment-*:1.8.3
został zwolniony. Wersja 1.8.3 zawiera te komisy.
Poprawki błędów
FragmentManager
teraz podczas obsługi gestów przewidującego cofnięcia prawidłowo uwzględnia oczekujące operacje. Dzięki temu przywracanie systemu nie powoduje już błęduIndexOutOfBoundsException
. (I9ba32, b/342316801)AndroidFragment
nie ulega już awarii, jeśli zostanie dodany do kompozycji, gdy stan zawierającej go aktywności lub fragmentu jest już zapisany. (I985e9, b/356643968)
Wersja 1.8.2
24 lipca 2024 r.
androidx.fragment:fragment-*:1.8.2
został zwolniony. Wersja 1.8.2 zawiera te komitowane zmiany.
Poprawki błędów
AndroidFragment
teraz prawidłowo obsługuje przypadki, gdy nadrzędny fragment jest umieszczany na stosie Fragment back, co pozwala uniknąć problemów z błędem „Nie znaleziono widoku o identyfikatorze” podczas powrotu do tego fragmentu. (I94608)- Fragmenty dodane za pomocą metody
FragmentTransaction.add
, która zajmujeViewGroup
, teraz czekająonContainerAvailable
, zanim przejdą doonStart()
. Ma to wpływ na użytkowników tego interfejsu API, np.AndroidFragment
, który teraz czeka, ażAndroidFragment
ponownie wprowadzi kompozycję, zanim przekaże ją doonStart()
. (I94608)
Wersja 1.8.1
26 czerwca 2024 r.
androidx.fragment:fragment-*:1.8.1
został zwolniony. Wersja 1.8.1 zawiera te komity.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że fragmenty bez kontenera były natychmiast
DESTROYED
po rozpoczęciu przewidywanego gestu wstecz. Teraz są one w stanieCREATED
, dopóki gest się nie zakończy. (If6b83, b/345244539)
Wersja 1.8.0
12 czerwca 2024 r.
androidx.fragment:fragment-*:1.8.0
został zwolniony. Wersja 1.8.0 zawiera te komitowane zmiany.
Ważne zmiany od wersji 1.7.0
- Element
fragment-compose
zawiera teraz elementAndroidFragment
Composable
, który umożliwia dodawanie fragmentów do hierarchii tworzenia za pomocą nazwy klasy fragmentu. Zapisuje i przywraca stan fragmentu automatycznie. Należy go używać zamiast wcześniej zalecanego podejścia polegającego na napełnianiu Fragmentu za pomocą funkcjiAndroidViewBinding
. - Współczynnik
onBackStackChangeCancelled
w interfejsieOnBackStackChangedListener
jest teraz wywoływany w ramach wykonywania operacji wFragmentManager
, co powoduje, że jest ono wykonywane w bliższym czasie po wywołaniuonBackStackChangeCommitted
.FragmentManager
Wersja 1.8.0-rc01
29 maja 2024 r.
androidx.fragment:fragment-*:1.8.0-rc01
został zwolniony. Wersja 1.8.0-rc01 zawiera te komisy.
Poprawki błędów
- Wywołanie zwrotne
onBackStackChangeCancelled
w interfejsieFragmentManagers OnBackStackChangedListener
jest teraz wykonywane w ramach operacji wFragmentManager
, co powoduje, że jest ono bardziej zsynchronizowane z czasem wykonania wywołania zwrotnegoonBackStackChangeCommitted
. (I5ebfb, b/332916112)
Wersja 1.8.0-beta01
14 maja 2024 r.
androidx.fragment:fragment-*:1.8.0-beta01
został zwolniony. Wersja 1.8.0-beta01 zawiera te komity.
Poprawki błędów
- Z Fragmentu
1.7.1
: przewidywane cofnięcie będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają albo animatora, albo przewijalną animację przejścia Androidx. Rozwiązaliśmy problem, który powodował, że anulowanie częściowo przeszukiwalnej transakcji powodowało czarny ekran. (I43037, b/339169168)
Wersja 1.8.0-alpha02
17 kwietnia 2024 r.
androidx.fragment:fragment-*:1.8.0-alpha02
został zwolniony. Wersja 1.8.0-alpha02 zawiera te komity.
Poprawki błędów
- Z Fragmentu
1.7.0-rc02
: dodano logi, aby wskazać, dlaczego ustawieniesharedElement
bez żadnych innych przejść nie będzie działać. (Iec48e) - Z Fragmentu
1.7.0-rc02
: naprawiliśmy błąd, który powodował awarię, gdy do transakcji, w której wszystkie inne przejścia były możliwe do przewinięcia, dodawano element współdzielony, który nie był możliwy do przewinięcia. Transakcja zostanie teraz prawidłowo uznana za nieprzeskakującą. (I18ccd)
Wersja 1.8.0-alpha01
3 kwietnia 2024 r.
androidx.fragment:fragment-*:1.8.0-alpha01
został zwolniony. Wersja 1.8.0-alpha01 zawiera te komity.
Nowe funkcje
- Nowa funkcja
AndroidFragment
Composable
umożliwia dodawanie fragmentów do hierarchii tworzenia za pomocą nazwy klasy fragmentu. Zapisuje i przywraca stan fragmentu automatycznie. Można go użyć jako bezpośredniej zamiany dla AndroidViewBindingComposable
.(b/312895363, Icf841)
Zmiany w dokumentacji
- Zaktualizowaliśmy dokumentację interfejsów API
OnBackStackChangedListener
, aby wskazać, kiedy i jak ich używać. (I0bfd9)
Aktualizacja zależności
- Fragment jest teraz zależny od Profile Installer 1.3.1.
Wersja 1.7
Wersja 1.7.1
14 maja 2024 r.
androidx.fragment:fragment-*:1.7.1
został zwolniony. Wersja 1.7.1 zawiera te komity.
Poprawki błędów
- Funkcja przewidywania wstecznego będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają albo Animator, albo Seekable Androidx Transition. Rozwiązano problem, który powodował, że anulowanie częściowo możliwych do odsłuchania transakcji powodowało pusty ekran. (I43037, b/339169168)
Wersja 1.7.0
1 maja 2024 r.
androidx.fragment:fragment-*:1.7.0
został zwolniony. Wersja 1.7.0 zawiera te komisy.
Obsługa predykcyjnego gestu wstecz
- Fragmenty obsługują teraz przewidywane powroty w aplikacji, gdy używasz
Animator
lub AndroidX Transition 1.5.0. Dzięki temu użytkownicy mogą użyć gestu wstecz, aby zobaczyć poprzedni fragment, wyszukując animację lub przejście, zanim zdecydują się na przeprowadzenie transakcji przez wykonanie gestu lub anulowanie.
System przejściowy | Zasób XML | Obsługuje przewidywane przejście wstecz |
---|---|---|
Animation |
R.anim |
Nie |
Animator |
R.animator |
Tak |
Platforma Transition |
R.transition |
Nie |
AndroidX Transition z Transition 1.4.1 lub nowszą wersją |
R.transition |
Nie |
AndroidX Transition z Transition 1.5.0 |
R.transition |
Tak |
Jeśli po włączeniu gestu przewidującego cofnięcie zauważysz jakiekolwiek problemy z obsługą tej funkcji w Fragments, zgłoś problem w Fragments, dołączając przykładowy projekt, w którym można odtworzyć ten problem. Możesz wyłączyć przewidywane cofnięcie, używając FragmentManager.enabledPredictiveBack(false)
w onCreate()
swojej Aktywności.
FragmentManager.OnBackStackChangedListener()
udostępnia teraz odpowiednio wartości onBackStackChangeProgressed()
i onBackStackChangeCancelled()
, aby otrzymywać prognozowany postęp wsteczny i zdarzenia anulowane.
Fragment Compose Artifact
Utworzono nowy artefakt fragment-compose
, który obsługuje aplikacje przechodzące z architektury opartej na fragmentach na architekturę opartą całkowicie na Compose.
Pierwszą funkcją dostępną w tym nowym artefakcie jest metoda rozszerzenia content
w komponencie Fragment
, która ułatwia korzystanie z komponentu Compose w interfejsie poszczególnych fragmentów. Tworzy ona dla Ciebie komponent ComposeView
i ustawia prawidłowe wartości ViewCompositionStrategy
.
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Wersja 1.7.0-rc02
17 kwietnia 2024 r.
androidx.fragment:fragment-*:1.7.0-rc02
został zwolniony. Wersja 1.7.0-rc02 zawiera te komity.
Poprawki błędów
- Dodano logi, aby wskazać, dlaczego ustawienie
sharedElement
bez żadnych innych przejść nie będzie działać. (Iec48e) - Rozwiązaliśmy błąd, który powodował awarię, gdy do transakcji, w której wszystkie inne przejścia były możliwe do przewinięcia, dodawano element współdzielony, który nie pozwalał na przewijanie. Transakcja zostanie teraz prawidłowo uznana za nieprzeskakującą. (I18ccd)
Wersja 1.7.0-rc01
3 kwietnia 2024 r.
androidx.fragment:fragment-*:1.7.0-rc01
został zwolniony. Wersja 1.7.0-rc01 zawiera te komity.
Aktualizacja zależności
- Fragment jest teraz zależny od Profile Installer 1.3.1.
Wersja 1.7.0-beta01
20 marca 2024 r.
androidx.fragment:fragment-*:1.7.0-beta01
został zwolniony. Wersja 1.7.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metoda
FragmentHostCallback
jest teraz napisana w języku Kotlin, aby typ ogólny hosta był nieokreślony w takiej samej sytuacji jak typ zwracany przez metodęonGetHost()
. (I40af5)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po zatwierdzeniu gestu przewidywania cofnięcia na fragmencie, który nie znajduje się w kontenerze, fragment ten nigdy nie był usuwany. Fragment zostanie teraz natychmiast przeniesiony do stanu końcowego. (Ida0d9)
- Rozwiązaliśmy problem w Fragmentach, który powodował, że przerwanie przejść za pomocą gestów przewidywania cofnięcia powodowało zniszczenie widoku wejściowego i pozostawiało pusty ekran. (Id3f22, b/319531491)
Wersja 1.7.0-alpha10
7 lutego 2024 r.
androidx.fragment:fragment-*:1.7.0-alpha10
został zwolniony. Wersja 1.7.0-alpha10 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy znany problem występujący w poprzedniej wersji Fragment, w której korzystanie z obsługi funkcji przewidywania wstecz Fragmenta dla
Animator
lub AndroidX Transition powodowało, że Fragmenty wywoływały błądNullPointerException
zhandleOnBackProgressed
, jeśli nigdy nie dodanoFragmentManager.OnBackStackChangedListener
za pomocąaddOnBackStackChangedListener
. (I7c835)
Wersja 1.7.0-alpha09
24 stycznia 2024 r.
androidx.fragment:fragment-*:1.7.0-alpha09
został zwolniony. Wersja 1.7.0-alpha09 zawiera te commity.
Fragment Compose Artifact
Utworzono nowy artefakt fragment-compose
, który obsługuje aplikacje przechodzące z architektury opartej na fragmentach na architekturę opartą całkowicie na Compose.
Pierwszą funkcją dostępną w tym nowym artefakcie jest metoda rozszerzenia content
w komponencie Fragment
, która ułatwia korzystanie z komponentu Compose w interfejsie poszczególnych fragmentów. Tworzy ona dla Ciebie komponent ComposeView
i ustawia prawidłowe wartości ViewCompositionStrategy
. (561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Nowe funkcje
FragmentManager.OnBackStackChangedListener()
udostępnia teraz odpowiednio wartościonBackStackChangeProgressed()
ionBackStackChangeCancelled()
, aby otrzymywać prognozowany postęp wsteczny i zdarzenia anulowane. (214b87)
Znany problem
- Jeśli używasz obsługi przewidywanego przywracania Fragmentów w
Animator
lub AndroidX Transition, Fragmenty będą wywoływać błądNullPointerException
zhandleOnBackProgressed
, jeśli nigdy nie dodanoFragmentManager.OnBackStackChangedListener
za pomocąaddOnBackStackChangedListener
. Ręczne dodanie słuchacza rozwiąże problem z zawieszaniem. Naprawimy to w kolejne wydanie Fragmentów.
Wersja 1.7.0-alpha08
10 stycznia 2024 r.
androidx.fragment:fragment-*:1.7.0-alpha08
został zwolniony. Wersja 1.7.0-alpha08 zawiera te commity.
Czyszczenie danych
- Usunięto obejście problemu z biblioteką przejść, który został rozwiązany w Transition
1.5.0-alpha06
. (I04356)
Wersja 1.7.0-alpha07
29 listopada 2023 r.
androidx.fragment:fragment-*:1.7.0-alpha07
został zwolniony. Wersja 1.7.0-alpha07 zawiera te commity.
Poprawki błędów
- Usunęliśmy błąd
NullPointerException
spowodowany ustawieniem przejścia elementu współdzielonego i nieustawieniem przejścia wejścia/wyjścia. (I8472b) - Z Fragmentu
1.6.2
: gdy fragmentFragmentContainerView
zostanie wczytany, jego stany, takie jakFragmentManager
, Host i id, są teraz dostępne w zgłoszeniuonInflate
. (I1e44c, b/307427423) - Z Fragmentu
1.6.2
: gdy używasz elementuclearBackStack
, aby usunąć zestaw fragmentów, wszystkie zagnieżdżone elementyViewModel
zostaną wyczyszczone, gdy zostaną wyczyszczone elementyViewModels
nadrzędnego elementu. (I6d83c, b/296173018)
Wersja 1.7.0-alpha06
4 października 2023 roku
androidx.fragment:fragment-*:1.7.0-alpha06
został zwolniony. Wersja 1.7.0-alpha06 zawiera te commity.
Aktualizacja zależności
- Fragmenty zostały zaktualizowane, aby zależały od nowego interfejsu API
animateToStart
dodanego w ramach przechodu1.5.0-alpha04
.
Wersja 1.7.0-alpha05
20 września 2023 r.
androidx.fragment:fragment-*:1.7.0-alpha05
został zwolniony. Wersja 1.7.0-alpha05 zawiera te commity.
Nowe funkcje
- Fragmenty obsługują teraz funkcję przewidywanego cofnięcia, gdy używasz biblioteki Androidx Transitions. Dzięki temu możesz użyć gestu wstecz, aby przejść do poprzedniego fragmentu za pomocą niestandardowego przejścia Androidx, zanim zdecydujesz się potwierdzić lub anulować transakcję za pomocą gestu zakończenia. Aby włączyć tę funkcję, musisz zainstalować wersję Transition
1.5.0-alpha03
. (Ib49b4, b/285175724)
Znane problemy
- Obecnie występuje problem, który polega na tym, że po anulowaniu gestu wstecz z przejściem następne uruchomienie tego gestu powoduje wyświetlenie pustego ekranu. Przyczyną może być problem z biblioteką Transition. (b/300157785). Jeśli zauważysz ten problem, zgłoś go w Fragment, dołączając przykładowy projekt, w którym można go odtworzyć. Możesz wyłączyć przewidywane cofnięcie, używając
FragmentManager.enabledPredictiveBack(false)
wonCreate()
swojej Aktywności.
Wersja 1.7.0-alpha04
6 września 2023 r.
androidx.fragment:fragment-*:1.7.0-alpha04
został zwolniony. Wersja 1.7.0-alpha04 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który występował podczas anulowania przewidywanego gestu wstecz, gdy fragmenty nie przechodziły do prawidłowego stanu cyklu życia. (I7cffe, b/297379023)
- Usunięto regresję polegającą na tym, że animacje mogły być uruchamiane razem z przejściami. (I59f36)
- Rozwiązaliśmy problem z użyciem funkcji Wstecz przewidująca z fragmentami, w którym próba dwukrotnego szybkiego przejścia wstecz w drugim od końca fragmencie stosu wywołała awarię. (Ifa1a4)
Wersja 1.7.0-alpha03
23 sierpnia 2023 r.
androidx.fragment:fragment-*:1.7.0-alpha03
został zwolniony. Wersja 1.7.0-alpha03 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem z fragmentami, który występował podczas korzystania z funkcji przewidywanego cofnięcia. W jego wyniku pierwszy fragment w steku fragmentów menedżera fragmentów był pomijany, a aktywność kończyła się po naciśnięciu przycisku Wstecz w ramach systemu przy użyciu 3 przycisków lub gestu przewidywanego cofnięcia. (I0664b, b/295231788)
Wersja 1.7.0-alpha02
9 sierpnia 2023 r.
androidx.fragment:fragment-*:1.7.0-alpha02
został zwolniony. Wersja 1.7.0-alpha02 zawiera te commity.
Poprawki błędów
- Jeśli używasz fragmentów z przewidywalnymi gestami wstecz z interfejsu API 34, a Twoje urządzenie korzysta z systemu przejść, który nie obsługuje przewijania (
Animations
,Transitions
) lub nie obsługuje w ogóle żadnych przejść, fragmenty będą teraz czekać, aż gest zostanie zakończony, zanim wykonają działanie wstecz. (I8100c)
Wersja 1.7.0-alpha01
7 czerwca 2023 r.
androidx.fragment:fragment-*:1.7.0-alpha01
został zwolniony. Ta wersja jest opracowywana w gałęzi wewnętrznej.
Nowe funkcje
- Fragmenty obsługują teraz przewidywane powracanie do aplikacji przy użyciu
Animator
. Dzięki temu możesz użyć gestu wstecz, aby wyświetlić poprzedni fragment z niestandardowym animatorem, zanim zdecydujesz się na przeprowadzenie transakcji za pomocą gestu potwierdzenia lub anulowania. Możesz też wyłączyć to nowe zachowanie, używając eksperymentalnej funkcjienablePredictiveBack()
i przekazując parametrfalse
.
Wersja 1.6
Wersja 1.6.2
1 listopada 2023 roku
androidx.fragment:fragment-*:1.6.2
został zwolniony. Wersja 1.6.2 zawiera te commity.
Poprawki błędów
- Gdy fragment
FragmentContainerView
zostanie wczytany, jego stany, takie jakFragmentManager
, Host i id, są teraz dostępne w wywołaniu zwrotnymonInflate
. (I1e44c, b/307427423) - Gdy używasz polecenia
clearBackStack
, aby usunąć zestaw fragmentów, wszystkie zagnieżdżone fragmentyViewModel
zostaną wyczyszczone, gdy zostaną wyczyszczone wartościViewModels
nadrzędnego fragmentu. (I6d83c, b/296173018)
Wersja 1.6.1
26 lipca 2023 r.
androidx.fragment:fragment-*:1.6.1
został zwolniony. Wersja 1.6.1 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że zapisany stan z czasu zatrzymania aktywności, ale nie jej zniszczenia, był nieprawidłowo przechowywany w pamięci podręcznej nawet po przywróceniu instancji fragmentu do stanu
RESUMED
. Spowoduje to ponowne użycie stanu zapisanego w pamięci podręcznej, jeśli instancja fragmentu znajdowała się na stosie a interfejs API multiple back stacks był używany do zapisywania i przywracania tego fragmentu. (I71288, b/246289075)
Aktualizacja zależności
- Fragment jest teraz zależny od Activity 1.7.2. Rozwiązaliśmy w ten sposób problem, który uniemożliwiał użytkownikom Kotlina rozszerzanie klasy
ComponentDialog
bez wyraźnej zależności od klasy Activity. (b/287509323)
Wersja 1.6.0
7 czerwca 2023 r.
androidx.fragment:fragment-*:1.6.0
został zwolniony. Wersja 1.6.0 zawiera te commity.
Ważne zmiany od wersji 1.5.0
- Zapisane stany
Fragment
zostały podzielone na stan biblioteki prywatnej (klasy niestandardoweParcelable
) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany wBundle
, co pozwala określić dokładne źródło stanu fragmentu. - Interfejs
FragmentManager.OnBackStackChangedListener
został rozszerzony o 2 dodatkowe funkcje zwracające wartościonBackStackChangeStarted
ionBackStackChangeCommitted
, które są wywoływane w przypadku każdegoFragment
odpowiednio przed dodaniem lub usunięciem z fragmentu stosu zwrotnego oraz zaraz po zatwierdzeniu transakcji. FragmentStrictMode
dodano nowy elementWrongNestedHierarchyViolation
, który wykrywa, kiedy podrzędny fragment jest zagnieżdżony w hierarchii widoku nadrzędnego, ale nie jest dodany dochildFragmentManager
nadrzędnego.- Interfejsy API
Fragment
iFragmentManager
, które przyjmują argumentIntent
lubIntentSender
, są teraz odpowiednio oznaczone za pomocą@NonNull
, aby zapobiec przekazywaniu wartości null, ponieważ spowodowałaby ona natychmiastowe zamykanie się odpowiednich interfejsów API platformy Android, do których wywołują te metody. - Usługa
DialogFragment
udostępnia teraz dostęp do usługiComponentDialog
za pomocą interfejsu APIrequireComponentDialog()
. - Fragment zależy teraz od cyklu życia
2.6.1
. - Fragment zależy teraz od SavedState
1.2.1
. - Fragment teraz zależy od ProfileInstaller
1.3.0
. Element
fragment-testing-manifest
oddziela wpisy w pliku manifestu od pozostałych komponentów testowania fragmentów. Oznacza to, że możesz:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Pozwala to uniknąć konfliktów spowodowanych różnicami w wersjach między
fragment-testing
iandroidx.test
.
Wersja 1.6.0-rc01
10 maja 2023 r.
androidx.fragment:fragment-*:1.6.0-rc01
został zwolniony. Wersja 1.6.0-rc01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że
ActivityResult
były wysyłane z nieprawidłowym kodem żądania, gdy kolejnestartActivityForResult
były wysyłane po sobie. (If0b9d, b/249519359) - Rozwiązaliśmy problem, który powodował wywoływanie funkcji zwrotnych
onBackStackChangeListener
w przypadku transakcji, które nie zmieniały ścieżki wstecznej, jeśli były pomieszane z transakcjami, które ją zmieniały (I0eb5c, b/279306628).
Wersja 1.6.0-beta01
19 kwietnia 2023 r.
androidx.fragment:fragment-*:1.6.0-beta01
został zwolniony. Wersja 1.6.0-beta01 zawiera te commity.
Poprawki błędów
- Użycie
postponeEnterTransition
z czasem oczekiwania, a następnie zastąpienie opóźnionego fragmentu nie powoduje już wycieku opóźnionego fragmentu. (I2ec7d, b/276375110) - Nowe wywołania zwrotne
onBackStackChangeStarted
ionBackStackChangeCommitted
będą teraz wysyłać fragment tylko raz, nawet jeśli wiele transakcji zawiera ten sam fragment. (Ic6b69)
Wersja 1.6.0-alpha09
5 kwietnia 2023 r.
androidx.fragment:fragment-*:1.6.0-alpha09
został zwolniony. Wersja 1.6.0-alpha09 zawiera te commity.
Zmiany w interfejsie API
- Usługa
DialogFragment
udostępnia teraz dostęp do usługiComponentDialog
za pomocą interfejsu APIrequireComponentDialog()
. (I022e3, b/234274777) - Interfejsy API fragment
commitNow()
,executePendingTransactions()
ipopBackStackImmediate()
zostały opatrzone adnotacją@MainThread
, co oznacza, że będą teraz generować błędy kompilacji, gdy nie zostaną wywołane z głównego wątku, zamiast czekać na błąd w czasie wykonywania. (Ic9665, b/236538905)
Poprawki błędów
- Usunęliśmy błąd w funkcji
FragmentManager
, który powodował awarię podczas zapisywania i przywracania w tym samym kadrze. (Ib36af, b/246519668) - Funkcje
OnBackStackChangedListener
onBackStackChangeStarted
ionBackStackChangeCommitted
są teraz wykonywane tylko wtedy, gdy zmieni sięFragmentManager
stos wsteczny. (I66055, b/274788957)
Wersja 1.6.0-alpha08
22 marca 2023 r.
androidx.fragment:fragment-*:1.6.0-alpha08
został zwolniony. Wersja 1.6.0-alpha08 zawiera te commity.
Zmiany w zachowaniu
- Czas wywołania funkcji
OnBackStackChangedListener.onBackStackChangeCommited
został dostosowany, aby działał przed wykonaniem operacji fragmentu. Dzięki temu funkcja wywołania zwrotnego nigdy nie otrzyma fragmentu, który został odłączony. (I66a76, b/273568280)
Poprawki błędów
- Z Fragmentu
1.5.6
: rozwiązaliśmy problem, który powodował, że wywołanieclearFragmentResultListener
w ramachsetFragmentResultListener
nie działało, jeśliLifecycle
było jużSTARTED
i jego wynik był już dostępny. (If7458)
Aktualizacje zależności
- Fragment zależy teraz od cyklu życia
2.6.1
. (586fe7) - Fragment zależy teraz od SavedState
1.2.1
. (078e4e) - Fragment teraz zależy od ProfileInstaller
1.3.0
. (3fc05b)
Wersja 1.6.0-alpha07
8 marca 2023 r.
androidx.fragment:fragment-*:1.6.0-alpha07
został zwolniony. Wersja 1.6.0-alpha07 zawiera te commity.
Poprawki błędów
- Z Fragmentu
1.5.6
: rozwiązaliśmy problem, który powodował, że usunięcie dowolnego fragmentu, niezależnie od tego, czy zawierał dodane elementy menu, powodowało unieważnienie menu aktywności. (50f098, b/244336571)
Wersja 1.6.0-alpha06
22 lutego 2023 roku
androidx.fragment:fragment-*:1.6.0-alpha06
został zwolniony. Wersja 1.6.0-alpha06 zawiera te commity.
Zmiany w zachowaniu
- Nowy wywołanie zwrotne
onBackStackChangedStarted
w obiekcieFragmentManager
onBackStackChangedListener
będzie teraz wykonywane, zanim fragmenty zaczną przechodzić do docelowych stanów. (I34726)
Wersja 1.6.0-alpha05
8 lutego 2023 r.
androidx.fragment:fragment-*:1.6.0-alpha05
został zwolniony. Wersja 1.6.0-alpha05 zawiera te commity.
Nowe funkcje
- Interfejs
FragmentManager.OnBackStackChagnedListener
oferuje teraz 2 dodatkowe wywołania zwrotne,onBackStackChangeStarted
ionBackStackChangeCommitted
, które umożliwiają uzyskanie dodatkowych informacji i kontrolę w przypadku zmian w strukturzeFragmentManager
. (Ib7ce5, b/238686802)
Zmiany w interfejsie API
- Interfejsy API
Fragment
iFragmentManager
, które przyjmują argumentIntent
lubIntentSender
, są teraz odpowiednio oznaczone za pomocą adnotacji@NonNull
, aby zapobiec przekazywaniu wartości null, ponieważ spowodowałaby ona natychmiastowe zamykanie się odpowiednich interfejsów API platformy Android, do których te metody się odwołują. (I06fd4)
Wersja 1.6.0-alpha04
7 grudnia 2022 r.
androidx.fragment:fragment-*:1.6.0-alpha04
został zwolniony. Wersja 1.6.0-alpha04 zawiera te commity.
Nowe funkcje
FragmentStrictMode
dodano nowy elementWrongNestedHierarchyViolation
, który wykrywa, kiedy podrzędny fragment jest zagnieżdżony w hierarchii widoku nadrzędnego, ale nie został dodany do elementuchildFragmentManager
nadrzędnego. (I72521, b/249299268)
Zmiany w zachowaniu
- Fragmenty są teraz przywracane do stanu
SavedStateRegistry
przed stanemonAttach()
, co zapewnia ich dostępność we wszystkich metodach cyklu życia w górę. (I1e2b1)
Zmiany w interfejsie API
- Element
fragment-testing-manifest
oddziela wpisy w pliku manifestu od pozostałych komponentów testowania fragmentów. Oznacza to, że możesz:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Zapobiega to konfliktom spowodowanym przez różnice w wersjach między fragment-testing
i androidx.test
(I8e534, b/128612536).
Poprawki błędów
- Zmiana w Fragment
1.5.5
: fragmenty nie będą już nieprawidłowo zapisywać stanuViewModel
jako części zapisanego stanu rejestru widoku. (I10d2b, b/253546214)
Wersja 1.6.0-alpha03
5 października 2022 r.
Funkcje androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
i androidx.fragment:fragment-testing:1.6.0-alpha03
są dostępne. Wersja 1.6.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Zajęcia rozszerzające
DialogFragment
będą teraz wymagać wywołania super w swoich zastępstwachonDismiss()
. (I14798, b/238928865)
Poprawki błędów
- Naprawiono regresję spowodowaną przez integrację nowych interfejsów wywołania zwrotnego dostawcy (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
), aby zapewnić, że fragmenty zawsze będą otrzymywać odpowiednie wywołania zwrotne. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
Wersja 1.6.0-alpha02
24 sierpnia 2022 r.
Funkcje androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
i androidx.fragment:fragment-testing:1.6.0-alpha02
są dostępne. Wersja 1.6.0-alpha02 zawiera te commity.
Poprawki błędów
- Z Fragment
1.5.2
: rozwiązano problem, który powodował, że jednoczesne wykonanie transakcjipopBackStack()
ireplace()
mogło powodować nieprawidłowe wykonanieAnimation
/Animator
przez fragmenty wychodzące (Ib1c07, b/214835303)
Wersja 1.6.0-alpha01
27 lipca 2022 roku
Funkcje androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
i androidx.fragment:fragment-testing:1.6.0-alpha01
są dostępne. Wersja 1.6.0-alpha01 zawiera te commity.
Zmiany w zachowaniu
- Zapisane stany
Fragment
zostały podzielone na stan biblioteki prywatnej (klasy niestandardoweParcelable
) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany wBundle
, co pozwala określić dokładne źródło stanu fragmentu. (b/207158202)
Poprawki błędów
- Z Fragmentu
1.5.1
: naprawiono regresję wDialogFragmentCallbacksDetector
, w której korzystanie z wersji lint dołączonej do AGP 7.4 powodowało jej zamykanie. (b/237567009)
Aktualizacja zależności
- Zmiana Fragment
1.5.1
: biblioteka fragmentów jest teraz zależna od cyklu życia2.5.1
. (Id204c) - Z poziomu Fragment
1.5.1
: biblioteka fragmentów zależy teraz od poziomu Aktywność1.5.1
. (I10f07)
Wersja 1.5
Wersja 1.5.7
19 kwietnia 2023 r.
Funkcje androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
i androidx.fragment:fragment-testing:1.5.7
są dostępne. Wersja 1.5.7 zawiera te zatwierdzenia.
Poprawki błędów
- Użycie
postponeEnterTransition
z czasem oczekiwania, a następnie zastąpienie opóźnionego fragmentu nie powoduje już wycieku opóźnionego fragmentu. (I2ec7d, b/276375110)
Wersja 1.5.6
22 marca 2023 r.
Funkcje androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
i androidx.fragment:fragment-testing:1.5.6
są dostępne. Wersja 1.5.6 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że usunięcie dowolnego fragmentu, niezależnie od tego, czy zawierał dodane pozycje menu, powodowało unieważnienie menu aktywności. (50f098, b/244336571)
- Rozwiązaliśmy problem, który powodował, że wywołanie funkcji
clearFragmentResultListener
w ramach funkcjisetFragmentResultListener
nie działało, jeśli funkcjaLifecycle
była jużSTARTED
i jego wynik był już dostępny. (If7458)
Wersja 1.5.5
7 grudnia 2022 r.
Funkcje androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
i androidx.fragment:fragment-testing:1.5.5
są dostępne. Wersja 1.5.5 zawiera te zatwierdzenia.
Poprawki błędów
- Fragmenty nie będą już nieprawidłowo zapisywać stanu
ViewModel
jako części zapisanego stanu rejestru widoku. (I10d2b, b/253546214)
Wersja 1.5.4
24 października 2022 r.
Funkcje androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
i androidx.fragment:fragment-testing:1.5.4
są dostępne. Wersja 1.5.4 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto błąd, który powodował, że korzystanie z niestandardowego
FragmentController
z hostem, który nie implementuje interfejsu wywołania zwrotnego dostawcy (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
), i wywołanie jego przestarzałej funkcji dispatch nie powodowało wysyłania do fragmentów potomnych. (I9b380)
Wersja 1.5.3
21 września 2022 r.
Funkcje androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
i androidx.fragment:fragment-testing:1.5.3
są dostępne. Wersja 1.5.3 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto błąd, który powodował, że fragmenty w grupie wywołań wywoływały funkcje zwrotne
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
ionConfigurationChanged()
. (I34581, I8dfe6, b/242570955) - Zagnieżdżone fragmenty podrzędne nie będą już otrzymywać wielu wywołań
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
anionConfigurationChanged()
. (I690b3, Id0096, If9d6b, I2cba2)
Wersja 1.5.2
10 sierpnia 2022 r.
Funkcje androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
i androidx.fragment:fragment-testing:1.5.2
są dostępne. Wersja 1.5.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że jednoczesne wykonanie transakcji
popBackStack()
ireplace()
mogło spowodować uruchomienie nieprawidłowego fragmentuAnimation
/Animator
. (Ib1c07, b/214835303)
Wersja 1.5.1
27 lipca 2022 roku
Funkcje androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
i androidx.fragment:fragment-testing:1.5.1
są dostępne. Wersja 1.5.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązanie regresji w
DialogFragmentCallbacksDetector
, w której korzystanie z wersji lint dołączonej do AGP 7.4 powodowało jej awarię. (b/237567009)
Aktualizacja zależności
- Biblioteka fragmentów zależy teraz od cyklu życia
2.5.1
. (Id204c) - Biblioteka fragmentów zależy teraz od aktywności
1.5.1
. (I10f07)
Wersja 1.5.0
29 czerwca 2022 r.
Funkcje androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
i androidx.fragment:fragment-testing:1.5.0
są dostępne. Wersja 1.5.0 zawiera te commity.
Ważne zmiany od wersji 1.4.0
- Integracja z CreationExtras –
Fragment
może teraz udostępniać bezstanowąViewModelProvider.Factory
za pomocąCreationExtras
z Lifecycle2.5.0
. - Integracja okna dialogowego komponentu –
DialogFragment
używa terazComponentDialog
za pomocą aktywności1.5.0
jako domyślnego okna dialogowego zwracanego przezonCreateDialog()
. - Refaktoryzacja zapisanego stanu instancji – fragmenty zaczęły zmieniać sposób zapisywania stanu instancji. Dzięki temu można wyraźnie określić stan zapisany w fragmentach i jego źródło. Obecne zmiany obejmują:
FragmentManager
zapisuje teraz stan zapisanej instancji wBundle
, a nie bezpośrednio w niestandardowymParcelable
.- Wyniki określone za pomocą
Fragment Result APIs
, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od wewnętrznego stanu usługiFragmentManager
. - Stan powiązany z każdym poszczególnym fragmentem jest teraz zapisywany osobno od wewnętrznego stanu
FragmentManager
, co pozwala na powiązanie ilości zapisanego stanu powiązanego z poszczególnym fragmentem z identyfikatorami unikalnymi obecnymi w dziennikowaniu debugowaniaFragment
.
Inne zmiany
FragmentStrictMode
umożliwia teraz prywatnym fragmentom kodu zewnętrznego omijanie określonych kar za naruszenie zasad dzięki użyciuallowViolation()
z nazwą klasy.- Interfejsy Fragment API służące do wyświetlania menu
ActionBar
w ramach aktywności zostały wycofane. Interfejsy APIMenuHost
iMenuProvider
dodane w Activity1.4.0
stanowią testowalny interfejs API o zdefiniowanym cyklu życia, którego fragmenty powinny używać.
Wersja 1.5.0-rc01
11 maja 2022 roku
Funkcje androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
i androidx.fragment:fragment-testing:1.5.0-rc01
są dostępne. Wersja 1.5.0-rc01 zawiera te zatwierdzenia.
Refaktoryzacja stanu zapisanej instancji
- Stan powiązany z poszczególnymi fragmentami jest teraz zapisywany osobno od wewnętrznego stanu
FragmentManager
, co pozwala na powiązanie ilości zapisanego stanu powiązanego z poszczególnym fragmentem z identyfikatorami unikalnymi obecnymi w dziennikowaniu debugowania fragmentu. (a153e0, b/207158202)
Wersja 1.5.0-beta01
20 kwietnia 2022 r.
Funkcje androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
i androidx.fragment:fragment-testing:1.5.0-beta01
są dostępne. Wersja 1.5.0-beta01 zawiera te commity.
Zmiany w interfejsie API
DialogFragment
dodała nową metodędismissNow
, która używa argumentucommitNow
w celu zapewnienia zgodności z funkcjąshowNow
. Pamiętaj, że nie spowoduje to natychmiastowego zamknięciaDialog
, tylko zsynchronizuje stanFragmentManager
. (I15c36, b/72644830)
Refaktoryzacja stanu zapisanej instancji
FragmentManager
zapisuje teraz stan zapisanej instancji wBundle
, a nie bezpośrednio w niestandardowymParcelable
. Jest to pierwszy krok w kierunku zapewnienia większej przejrzystości w zakresie tego, co jest faktycznie zapisywane przez Fragmenty. (I93807, b/207158202)- Wyniki zdefiniowane za pomocą interfejsów Fragment Result API, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od wewnętrznego stanu
FragmentManager
. Dzięki temu będziesz mieć większą kontrolę nad tym, jakie wyniki są zapisywane w ramach zapisanego stanu instancji. (I6ea12, b/207158202)
Wersja 1.5.0-alpha05
6 kwietnia 2022 roku
Funkcje androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
i androidx.fragment:fragment-testing:1.5.0-alpha05
są dostępne. Wersja 1.5.0-alpha05 zawiera te commity.
Zmiany w interfejsie API
- Parametr
setHasOptionsMenu()
w konfiguracjiFragment
został wycofany. Aby zarządzać menu i ich elementami, należy używać nowych interfejsów API menu zgodnie z opisem w notatkach do wersji Fragmenta1.5.0-alpha04
. (I7b4b4, b/226438239)
Wersja 1.5.0-alpha04
23 marca 2022 r.
Funkcje androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
i androidx.fragment:fragment-testing:1.5.0-alpha04
są dostępne. Wersja 1.5.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Interfejsy API fragmentu, które umożliwiają wyświetlanie menu w aktywności
ActionBar
, zostały wycofane, ponieważ ściśle łączą fragment z aktywizacją i nie można ich testować osobno. Interfejsy APIMenuHost
iMenuProvider
dodane w Activity1.4.0-alpha01
stanowią testowalny interfejs API o odpowiednich właściwościach cyklu życia, którego fragmenty powinny używać. (I50a59, I20758)
Poprawki błędów
SavedStateViewFactory
obsługuje terazCreationExtras
nawet wtedy, gdy został zainicjowany za pomocąSavedStateRegistryOwner
. Jeśli podano dodatkowe argumenty, argumenty zainicjowane są ignorowane. (I6c43b, b/224844583)
Wersja 1.5.0-alpha03
23 lutego 2022 r.
Funkcje androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
i androidx.fragment:fragment-testing:1.5.0-alpha03
są dostępne. Wersja 1.5.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Możesz teraz przekazywać wartość
CreationExtras
do funkcjiby viewModels()
iby activityViewModels()
. (Ibefe7, b/217601110)
Zmiany w zachowaniu
DialogFragment
używa teraz domyślnieComponentDialog
jako dialogu zwracanego przezonCreateDialog()
. (If3784, b/217618170)
Wersja 1.5.0-alpha02
9 lutego 2022 r.
Funkcje androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
i androidx.fragment:fragment-testing:1.5.0-alpha02
są dostępne. Wersja 1.5.0-alpha02 zawiera te commity.
Nowe funkcje
FragmentStrictMode
umożliwia teraz prywatnym fragmentom kodu zewnętrznego omijanie określonych kar za naruszenie zasad za pomocąallowViolation()
z nazwą klasy. (I8f678)
Wersja 1.5.0-alpha01
26 stycznia 2022 r.
Funkcje androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
i androidx.fragment:fragment-testing:1.5.0-alpha01
są dostępne. Wersja 1.5.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Fragment
jest teraz zintegrowany z dodatkami do tworzenia widoku modelu, które zostały wprowadzone w ramach cyklu życia2.5.0-alpha01
. (I3060b, b/207012585)
Poprawki błędów
- W Fragment
1.4.1
:FragmentContainerView
nie generuje już wyjątku dotyczącego nieprawidłowego stanu, gdy identyfikatory widoku wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140) - Z Fragment
1.4.1
: jeśli używasz niestandardowej funkcji lambdaownerProducer
z funkcjąby viewModels()
o opóźnionym działaniu, będzie ona teraz używać funkcjidefaultViewModelProviderFactory
tego właściciela, jeśli nie zostanie podana niestandardowa funkcjaViewModelProvider.Factory
, zamiast zawsze używać fabryki fragmentu. (I56170, b/214106513) - Naprawiono błąd powodujący awarię podczas pierwszego dostępu do
ViewModel
z poziomu wywołania zwrotnegoregisterForActivityResult()
z poziomuFragment
. (Iea2b3)
Wersja 1.4
Wersja 1.4.1
26 stycznia 2022 r.
Funkcje androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
i androidx.fragment:fragment-testing:1.4.1
są dostępne. Wersja 1.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
FragmentContainerView
nie powoduje już wyjątku nieprawidłowego stanu, gdy identyfikatory widoku wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140) - Jeśli używasz niestandardowej funkcji
ownerProducer
lambda z funkcjąby viewModels()
opóźnionego uruchamiania, będzie ona teraz używać funkcjidefaultViewModelProviderFactory
tego właściciela, jeśli nie zostanie podana niestandardowa funkcjaViewModelProvider.Factory
, zamiast zawsze używać fabryki fragmentu. (I56170, b/214106513)
Wersja 1.4.0
17 listopada 2021 r.
Funkcje androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
i androidx.fragment:fragment-testing:1.4.0
są dostępne. Wersja 1.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.3.0
- Interfejsy API
FragmentStrictMode
zapewniają sprawdzanie w czasie wykonywania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy aplikacja, nie wywołują przestarzałych fragmentów interfejsu API. Gdy wykryjesz naruszenie, możesz wydrukować komunikat z dziennika, wywołać własny niestandardowy odbiornik lub spowodować awarię aplikacji.FragmentStrictMode.Policy
, który kontroluje, jakie kontrole są włączone i jakie „sankcje” są wywoływane, można ustawić wFragmentManager
za pomocą nowej metodysetStrictModePolicy()
. Ta zasada dotyczyFragmentManager
i w drodze dojścia do wszystkich podrzędnych menedżerów fragmentów, które nie mają własnych zasad. Zobacz Tryb ścisły w przypadku fragmentów. Obiekt
FragmentContainerView
udostępnia teraz metodęgetFragment()
, która zwraca fragment ostatnio dodany do kontenera. Ta funkcja korzysta z tej samej logiki cofindFragmentById()
z identyfikatoremFragmentContainerView
, ale umożliwia łańcuchowe wywoływanie.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
implementuje terazCloseable
, co pozwala używać go z metodąuse
w Kotlinie lub z try-with-resources.Dodano
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
możliwość określenia, czy w przejściu Fragmentów ma być włączona standardowa animacja przejścia z aktywności pochodząca z motywu.Eksperymentalny interfejs API usługi
FragmentManager.enableNewStateManager(boolean)
został usunięty, a nowy menedżer stanu jest teraz jedyną dostępną opcją.
Wiele ścieżek wstecznych
FragmentManager
zarządza stosem odtwarzania, który składa się z transakcji fragmentów, które używają addToBackStack()
. Umożliwia to odtworzenie tych transakcji i powrót do poprzedniego stanu za pomocą mechanizmów zapisu stanu za pomocą fragmentów, aby umożliwić fragmentom przywrócenie odpowiedniego stanu.
Ta wersja rozszerza te mechanizmy o 3 nowe interfejsy API FragmentManager
: saveBackStack(String name)
, restoreBackStack(String name)
i clearBackStack(String name)
. Te interfejsy API używają tego samego name
co addToBackStack()
, aby zapisać stan FragmentTransaction
i stan każdego fragmentu dodanego w tych transakcjach. Pozwalają też później przywrócić te transakcje i ich fragmenty wraz z ich stanem. Dzięki temu możesz skutecznie „przełączać się” między wieloma stosami odwołania, zapisując bieżący stos odwołania i przywracając zapisany stos odwołania.
saveBackStack()
działa podobnie do popBackStack()
, ponieważ jest asynchroniczny i powoduje odwrócenie wszystkich transakcji fragmentów z powrotem do tej konkretnej nazwy (pop) oraz usunięcie wszystkich dodanych fragmentów, ale różni się od niego w kilku ważnych aspektach:
saveBackStack()
jest zawsze uwzględniana.- W przeciwieństwie do funkcji
popBackStack()
, która powoduje wczytanie wszystkich transakcji z poprzedniego zbioru, jeśli nie znajdzie się w nim określonej nazwy lub jeśli podana zostanie wartość null, funkcjasaveBackStack()
nie robi nic, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą funkcjiaddToBackStack()
z tą samą, niepustą nazwą. - Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest przechowywany, wywoływana jest funkcja
onSaveInstanceState()
każdego fragmentu, a stan jest przywracany, a wszystkie wystąpieniaViewModel
powiązane z tymi fragmentami są zatrzymywane (i nie jest wywoływana funkcjaonCleared()
).
Transakcje fragmentów, które można stosować z użyciem funkcji saveBackStack()
, muszą spełniać określone kryteria:
- Każda transakcja fragmentu musi używać wartości
setReorderingAllowed(true)
, aby zapewnić możliwość przywracania transakcji jako pojedynczej operacji atomowej. - Zapisane transakcje muszą być niezależne (czyli nie mogą się odwoływać do fragmentów spoza tego zbioru transakcji), aby można je było przywrócić w dowolnym momencie, niezależnie od tego, jakie zmiany zostały wprowadzone w międzyczasie w zbiorze transakcji.
- Żaden zapisany fragment nie może być zachowanym fragmentem ani zawierać takiego fragmentu w swoim zbiorze elementów podrzędnych, aby
FragmentManager
nie zwracał żadnych odwołań do zapisanych fragmentów po zapisaniu stosu wstecz.
Podobnie jak funkcje saveBackStack()
, restoreBackStack()
i clearBackStack()
, które przywracają odpowiednio wcześniej zapisany stos lub go oczyszczają, obie te funkcje nie robią nic, jeśli nie wywołano wcześniej funkcji saveBackStack()
o tej samej nazwie.
Więcej informacji znajdziesz w artykule Wiele ścieżek wstecznych: szczegółowe informacje.
Wersja 1.4.0-rc01
3 listopada 2021 r.
androidx.fragment:fragment:1.4.0-rc01
została wydana bez zmian w stosunku do wersji Fragment 1.4.0-beta01. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.
Wersja 1.4.0-beta01
27 października 2021 roku
Funkcje androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
i androidx.fragment:fragment-testing:1.4.0-beta01
są dostępne. Wersja 1.4.0-beta01 zawiera te commity.
Poprawki błędów
- Fragmenty nadrzędne będą teraz wysyłać
onHiddenChanged()
do całej hierarchii, zanim uruchomią własne wywołania zwrotne. (Iedc20, b/77504618) - Klawiatura będzie się teraz automatycznie zamykać, gdy przechodzisz z fragmentu z otwartą klawiaturą do fragmentu z widokiem recyclera. (I8b842, b/196852211)
- Usługa
DialogFragment
używa teraz elementusetReorderingAllowed(true)
do wszystkich transakcji, które tworzy po wywołaniu funkcjishow()
,showNow()
lubdismiss()
. (Ie2c14) - Niezwykle długie ostrzeżenie lintera
DetachAndAttachFragmentInSameFragmentTransaction
zostało skrócone doDetachAndAttachSameFragment
. (e9eca3)
Wersja 1.4.0-alpha10
29 września 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
i androidx.fragment:fragment-testing:1.4.0-alpha10
są dostępne. Wersja 1.4.0-alpha10 zawiera te commity.
Lint
- Dodano ostrzeżenie
DetachAndAttachFragmentInSameFragmentTransaction
w lint, które ostrzega o wywoływaniu funkcjidetach()
iattach()
w tej samejFragment
w tej samejFragmentTransaction
. Te uzupełniające się operacje wzajemnie się wykluczają, gdy są wykonywane w tej samej transakcji, więc aby coś zrobić, należy je rozdzielić na osobne transakcje. (aosp/1832956, b/200867930) - Dodano błąd lint
FragmentAddMenuProvider
, aby poprawić użycie FragmentLifecycle w FragmentViewLifecycle podczas korzystania z interfejsuaddMenuProvider
wMenuHost
. (aosp/1830457, b/200326272)
Aktualizacje dokumentacji
- Komunikat o wycofaniu interfejsów API, które są teraz obsługiwane przez interfejsy Activity API (
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
ionRequestPermissionsResult
), został rozszerzony o więcej szczegółów. (cce80f) - Komunikat o wycofaniu funkcji
onActivityCreated()
w przypadku zarównoFragment
, jak iDialogFragment
został rozszerzony o więcej szczegółów. (224db4)
Wersja 1.4.0-alpha09
15 września 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
i androidx.fragment:fragment-testing:1.4.0-alpha09
są dostępne. Wersja 1.4.0-alpha09 zawiera te commity.
Nowe funkcje
- Możesz teraz wywołać
clearBackStack(name)
, aby wykasować stan zapisany wcześniej za pomocąsaveBackStack(name)
. (I70cd7)
Zmiany w interfejsie API
- Klasa
FragmentContainerView
została przepisana w języku Kotlin, aby zapewnić prawidłowe uwzględnianie przez funkcjęgetFragment
możliwości braku wartości. (If694a, b/189629145) - FragmentStrictMode jest teraz napisany w Kotlinie (I11767, b/199183506)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że stan fragmentu dodanego za pomocą funkcji
setReorderingAllowed(true)
, a następnie natychmiast usuniętego przed wykonaniem oczekujących transakcji, nie był prawidłowo oczyszczany. (I8ccb8)
Wersja 1.4.0-alpha08
1 września 2021 roku
Funkcje androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
i androidx.fragment:fragment-testing:1.4.0-alpha08
są dostępne. Wersja 1.4.0-alpha08 zawiera te commity.
Poprawki błędów
- Ulepszyliśmy sprawdzanie Lint w
UseRequireInsteadOfGet
, aby lepiej obsługiwać zbędne nawiasy. (I2d865) - Ulepszyliśmy sprawdzanie Lint
UseGetLayoutInflater
, aby uwzględnić dodatkowe przypadki szczególne. (Ie5423)
Wersja 1.4.0-alpha07
18 sierpnia 2021 r.
Usługi androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
i androidx.fragment:fragment-testing:1.4.0-alpha07
są publikowane bez istotnych zmian. Wersja 1.4.0-alpha07 zawiera te komisy.
Wersja 1.4.0-alpha06
4 sierpnia 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
i androidx.fragment:fragment-testing:1.4.0-alpha06
są dostępne. Wersja 1.4.0-alpha06 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem z wieloma stosami przy szybkim przełączaniu się między nimi. Podczas przywracania
IllegalStateException
pojawiał sięIllegalStateException
lub druga kopia fragmentu.FragmentTransaction
(I9039f) - Rozwiązaliśmy problem polegający na tym, że
FragmentManager
zachowywało kopię stanu zapisanego wcześniej za pomocąsaveBackStack()
nawet po przywróceniu tego stanu. (Ied212) - Metoda
dismissAllowingStateLoss()
klasyDialogFragment
nie ulega już awarii, gdy wywołasz ją po zapisaniu stanu podczas dodawania fragmentu dialogu za pomocą metodyshow(FragmentTransaction, String)
. (I84422)
Wersja 1.4.0-alpha05
21 lipca 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
i androidx.fragment:fragment-testing:1.4.0-alpha05
są dostępne. Wersja 1.4.0-alpha05 zawiera te commity.
Poprawki błędów
- Z Fragmentu
1.3.6
: widok fragmentu jest teraz prawidłowo ustawiony naGONE
, gdy używaszhide()
, a widok wyższy ma ustawioną opcjętransitionGroup=”true”
. (aosp/1766655, b/193603427) - Z Fragmentu
1.3.6
:FragmentActivity
zawsze odblokowuje zapisany stan jako pierwszą operację w zawołaniach zwrotnych cyklu życia, które zastępuje. (I6db7a)
Aktualizacja zależności
- Zmiana w Fragment
1.3.6
: fragmenty są teraz zależne od działania1.2.4
(I3a66c).
Wersja 1.4.0-alpha04
30 czerwca 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
i androidx.fragment:fragment-testing:1.4.0-alpha04
są dostępne. Wersja 1.4.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
FragmentManager
używa terazSavedStateRegistry
, aby zapisywać stan. MetodysaveAllState()
irestoreSavedState()
zostały też wycofane w funkcjiFragmentController
. Jeśli używaszFragmentController
do hostowania fragmentów pozaFragmentActivity
, musisz zaimplementowaćFragmentHostCallbacks
wSavedStateRegistryOwner
. (Iba68e, b/188734238)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował niepowodzenie wywołania funkcji
saveBackStack()
w ramach obsługi wielu podzbiorów, gdy było wykonywane jednocześnie z wykonywaniem funkcjiFragmentTransaction
, która używała funkcjireplace()
. (I73137) - Naprawiono błąd
NullPointerException
, który występował po ręcznym przywróceniu zapisanego zbioru danych z wieloma transakcjami podczas korzystania z interfejsu APIrestoreBackStack()
do obsługi wielu zbiorów danych. Rozwiązaliśmy też problem polegający na tym, że w przypadku niektórych transakcji nie był sprawdzany parametrsetReorderingAllowed(true)
. (I8c593) - Rozwiązaliśmy problem polegający na tym, że
FragmentManager
nieprawidłowo przywracała wcześniej zapisany stan fragmentów nawet po ich usunięciu zFragmentManager
, co powodowało, że zapisany stan stale się powiększał. (I1fb8e)
Wersja 1.4.0-alpha03
16 czerwca 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
i androidx.fragment:fragment-testing:1.4.0-alpha03
są dostępne. Wersja 1.4.0-alpha03 zawiera te commity.
Nowe funkcje
- Wszystkie klasy Fragment StrictMode
Violation
zostały zaktualizowane o bardziej szczegółowe komunikaty o błędach, które wyjaśniają szczegóły naruszenia. (b/187871638)- Plik
FragmentTagUsageViolation
zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera kontener nadrzędny, do którego miał zostać dodany fragment. (Ic33a7) WrongFragmentContainerViolation
zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera informacje o kontenerze, do którego dodano fragment. (Ib55f8)- Klasy przypadków użycia w usłudze
TargetFragmentUsageViolation
zawierają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie oraz inne informacje. (Icc6ac) - Klasy rozszerzające
RetainInstanceUsageViolation
mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment kodu powodujący naruszenie. (I6bd55) FragmentReuseViolation
zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera poprzedni identyfikator fragmentu. (I28ce2)SetUserVisibleHintViolation
ma teraz bardziej szczegółowy komunikat o błędzie, który zawiera informacje o tym, jaką wartość miał widoczny dla użytkownika podpowiedź. (Ib2d5f)
- Plik
Zmiany w zachowaniu
- Przywrócono ograniczenie wywoływania funkcji
fitsSystemWindows
w funkcjiFragmentContainerView
– aplikacja nie będzie się już zawieszać. (6b8ddd, b/190622202)
Poprawki błędów
- Z Fragmentu
1.3.5
: rozwiązano regresję w przejściach elementów współdzielonych wprowadzoną w Fragment1.3.4
przez aosp/1679887. Fragmenty poprawnie obsługują teraz grupy przejść (ustawione bezpośrednio za pomocą elementutransitionGroup="true"
lub pośrednio za pomocą elementutransitionName
lubbackground
), a elementy współdzielone nie będą już wywoływać błęduIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304) FragmentManager
nie będzie się już zawieszać, gdy spróbujesz ukryć fragment do usunięcia. (I573dd, b/183634730)- Sprawdzanie poprawności kodu
OnCreateDialogIncorrectCallback
nie będzie się już zawieszać podczas sprawdzania zmiennej najwyższego poziomu. (0a9efa, b/189967522)
Wersja 1.4.0-alpha02
2 czerwca 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
i androidx.fragment:fragment-testing:1.4.0-alpha02
są dostępne. Wersja 1.4.0-alpha02 zawiera te commity.
Nowe funkcje
- Jeśli rejestrowanie jest włączone za pomocą
FragmentManager
,FragmentStrictMode
będzie zawsze rejestrować naruszenia niezależnie od używanej obecnie zasady dotyczącej trybu ścisłego. (I02df6, b/187872638) FragmentStrictMode
obsługuje teraz wykluczanie poszczególnych zajęćFragment
z trybu rygorystycznegoViolation
, co pozwala na pominięcie kar. (Ib4e5d, b/184786736)Klasa
FragmentStrictMode
Violation
została rozszerzona o informacje strukturalne na podstawie każdego naruszenia. Dzięki temu możesz sprawdzić, co dokładnie spowodowało naruszenie, oraz fragment kodu, który je spowodował (If5118, b/187871150). Każdy elementViolation
zawiera:- Plik
WrongFragmentContainerViolation
zawiera terazViewGroup
, który próbował dodać plikFragment
. (I83c75, b/187871150) TargetFragmentUsageViolation
została rozwinięta doSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
iGetTargetFragmentRequestCodeUsageViolation
, a fragment docelowy i kod żądania znajdują się w plikuSetTargetFragmentUsageViolation
. (I741b4, b/187871150)- Argument
SetUserVisibleHintViolation
zawiera teraz wartość logiczną przekazaną do argumentusetUserVisibleHint()
. (I00585, b/187871150) - Element
FragmentTagUsageViolation
zawiera teraz ViewGroup, do którego tag<fragment>
próbował wczytać fragment.(I5dbbc, b/187871150) FragmentReuseViolation
zawiera teraz unikalny identyfikator poprzedniej instancji elementuFragment
, który spowodował naruszenie. (I0544d, b/187871150)- Klasa
RetainInstanceUsageViolation
jest teraz abstrakcyjna i ma 2 podklasy:SetRetainInstanceUsageViolation
iGetRetainInstanceUsageViolation
, które reprezentują 2 przypadki typu naruszenia. (Ic81e5, b/187871150)
- Plik
Zmiany w zachowaniu
- Funkcja
FragmentContainerView
zwraca teraz wyjątek, gdy próbujesz zmienić atrybutfitsSystemWindow
programowo lub za pomocą kodu XML. Wstawki powinny być obsługiwane przez widok każdego pojedynczego fragmentu. (Ie6651, b/187304502)
Wersja 1.4.0-alpha01
18 maja 2021 r.
Funkcje androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
i androidx.fragment:fragment-testing:1.4.0-alpha01
są dostępne. Wersja 1.4.0-alpha01 zawiera te commity.
Nowe funkcje
Obiekt
FragmentContainerView
udostępnia teraz metodęgetFragment()
, która zwraca fragment ostatnio dodany do kontenera. Ta funkcja korzysta z tej samej logiki cofindFragmentById()
z identyfikatoremFragmentContainerView
, ale umożliwia łańcuchowe wywoływanie. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Dodano
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
możliwość określenia, czy w przejściu Fragmentów ma być włączona standardowa animacja przejścia z aktywności pochodząca z motywu. (I46652)
Wiele ścieżek wstecznych
FragmentManager
zarządza stosem odtwarzania, który składa się z transakcji fragmentów, które używają addToBackStack()
. Umożliwia to odtworzenie tych transakcji i powrót do poprzedniego stanu za pomocą mechanizmów zapisywania stanu za pomocą fragmentów, aby umożliwić fragmentom przywrócenie odpowiedniego stanu.
W tej wersji udostępniamy 2 nowe interfejsy API FragmentManager
: saveBackStack(String name)
i restoreBackStack(String name)
. Te interfejsy API używają tego samego name
co addToBackStack()
, aby zapisać stan FragmentTransaction
i stan każdego fragmentu dodanego w ramach tych transakcji. Pozwalają też później przywrócić te transakcje i ich fragmenty wraz z ich stanem. Dzięki temu możesz skutecznie „przełączać się” między wieloma stosami odwołania, zapisując bieżący stos odwołania i przywracając zapisany stos odwołania.
saveBackStack()
działa podobnie do popBackStack()
, ponieważ jest asynchroniczny i powoduje odwrócenie wszystkich transakcji fragmentów z powrotem do tej konkretnej nazwy (pop) oraz usunięcie wszystkich dodanych fragmentów, ale różni się od niego w kilku ważnych aspektach:
saveBackStack()
jest zawsze uwzględniana.- W przeciwieństwie do funkcji
popBackStack()
, która powoduje wczytanie wszystkich transakcji z poprzedniego zbioru, jeśli nie znajdzie się w nim określonej nazwy lub jeśli podana zostanie wartość null, funkcjasaveBackStack()
nie robi nic, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą funkcjiaddToBackStack()
z tą samą, niepustą nazwą. - Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest przechowywany, wywoływana jest funkcja
onSaveInstanceState()
każdego fragmentu, a stan jest przywracany, a wszystkie wystąpieniaViewModel
powiązane z tymi fragmentami są zatrzymywane (i nie jest wywoływana funkcjaonCleared()
).
Transakcje fragmentów, które można stosować z użyciem funkcji saveBackStack()
, muszą spełniać określone kryteria:
- Każda transakcja fragmentu musi używać wartości
setReorderingAllowed(true)
, aby można było przywrócić transakcje jako pojedynczą operację atomową. - Zapisane transakcje muszą być niezależne (czyli nie mogą się odwoływać do fragmentów spoza tego zbioru transakcji), aby można je było przywrócić w dowolnym momencie, niezależnie od tego, jakie zmiany zostały wprowadzone w międzyczasie w zbiorze transakcji.
- Żaden zapisany fragment nie może być zachowanym fragmentem ani zawierać takiego fragmentu w swoim zbiorze elementów podrzędnych, aby
FragmentManager
nie zwracał żadnych odwołań do zapisanych fragmentów po zapisaniu stosu wstecz.
Podobnie jak w przypadku polecenia saveBackStack()
polecenie restoreBackStack()
nie powoduje żadnej reakcji, jeśli nie było wcześniej wywoływane z tym samym parametrem.saveBackStack()
(b/80029773)
Fragment StrictMode
Interfejsy API FragmentStrictMode
zapewniają sprawdzanie w czasie wykonywania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy Twoja aplikacja, nie wywołują przestarzałych fragmentów interfejsu API. Gdy wykryjesz naruszenie, możesz wydrukować komunikat z dziennika, wywołać własny niestandardowy odbiornik lub spowodować awarię aplikacji. FragmentStrictMode.Policy
, który kontroluje, jakie kontrole są włączone i jakie „sankcje” są wywoływane, można ustawić w FragmentManager
za pomocą nowej metody setStrictModePolicy()
. Ta zasada dotyczy FragmentManager
i w drodze transitivej wszystkich podrzędnych menedżerów fragmentów, które nie mają własnych zasad. (#123, #131, #150, b/143774122)
detectFragmentReuse()
wykrywa, czy doFragmentManager
ponownie dodanoFragment
, który został wcześniej usunięty. Po zniszczeniu i usunięciu wystąpieniaFragment
zFragmentManager
nie należy wchodzić z nim w interakcję ani przechowywać odwołania do niego. (#142, b/153738653)detectFragmentTagUsage()
wykryje, kiedy używasz tagu<fragment>
w pliku XML układu. Podczas napełniania fragmentów w ramach układu zawsze używajFragmentContainerView
. (#141, b/153738235)detectWrongFragmentContainer()
wykrywa, kiedy dodasz do kontenera fragment, który nie jestFragmentContainerView
. W swoim układzie zawsze używaj elementuFragmentContainerView
jako kontenera fragmentów. (#146, b/181137036)detectRetainInstanceUsage()
wykryje, kiedy używasz wycofanych interfejsów APIsetRetainInstance()
lubgetRetainInstance()
. (#140, b/153737954)detectSetUserVisibleHint()
wykryje, kiedy używasz wycofanego interfejsu APIsetUserVisibleHint()
. (#136, b/153738974)detectTargetFragmentUsage()
wykryje, gdy używasz wycofanych interfejsów APIsetTargetFragment()
,getTargetFragment()
lubgetTargetRequestCode()
. (#139, b/153737745)
Zmiany w interfejsie API
- Eksperymentalny interfejs API usługi
FragmentManager.enableNewStateManager(boolean)
został usunięty, a nowy menedżer stanu jest teraz jedyną dostępną opcją. (I90036, b/162776418) FragmentScenario
implementuje terazCloseable
, co pozwala używać go z metodąuse
w Kotlinie lub z try-with-resources. (#121, b/143774122)
Nowe kontrole Lint
UseGetLayoutInflater
sprawdzanie Lint teraz ostrzega, gdy używaszLayoutInflater.from(Context)
w ramachDialogFragment
– zawsze używaj metodygetLayoutInflater()
fragmentu dialogu, aby uzyskać odpowiednią wartość dlaLayoutInflater
. (#156, b/170781346)- Lincz
DialogFragmentCallbacksDetector
ostrzega teraz, gdy wywołujesz metodęsetOnCancelListener
lubsetOnDismissListener
w metodieonCreateDialog()
obiektuDialogFragment
– te słuchacze należą do samego obiektuDialogFragment
i aby otrzymywać te wywołania zwrotne, musisz zastąpić metodyonCancel()
ionDismiss()
. (#171, b/181780047, b/187524311)
Poprawki błędów
- Od wersji Fragment 1.3.4: rozwiązano problem regresji wprowadzony w wersji Fragment
1.3.3
podczas używania interfejsuViewTreeViewModelStoreOwner.get()
API zViewModelProvider
lub metody Jetpack ComposeviewModel()
w Fragment. Te przypadki użycia teraz prawidłowo używają wartościViewModelProvider.Factory
podanej przez Twój fragment, jeśli zastępuje on wartośćgetDefaultViewModelProviderFactory()
(jak to robią adnotowane fragmenty@AndroidEntryPoint
przy użyciu Hilt). Jeśli nie zastąpisz tej metody, jako domyślna metoda fabryczna zostanie utworzona metodaSavedStateViewModelFactory
, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368) - Z Fragmentu 1.3.4: gdy używasz interfejsu API 29, w przypadku
FragmentContainerView
nie będzie już wysyłać wstawek przez nieokreślony czas. Rozwiązano w ten sposób problemy z instancjamiBottomNavigationBar
iFloatingActionButton
. (I1bb78, b/186012452) - Od Androida 1.3.4: teraz możesz pobrać obiekt Parcelable z paczki wyników fragmentu po zakończeniu działania procesu. (I65932, b/187443158)
- Z Fragmentu 1.3.4: podczas przejścia elementu współdzielonego w ViewGroup, jeśli w ViewGroup parametr
transitionGroup
ma wartość fałsz, przejście zostanie teraz wykonane prawidłowo. (I99675)
Darowizna zewnętrzna
- Dziękujemy simonschiller za wdrożenie
Closeable
w miejscuFragmentScenario
. (#121, b/143774122) - Dziękujemy simonschiller za dodanie do tej wersji wszystkich interfejsów API
FragmentStrictMode
. (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - Dziękujemy autorowi tatocaster za dodanie kontroli
UseGetLayoutInflater
dotyczącej cząstek papieru. (#156, b/170781346) - Dziękujemy autorowi tatocaster za dodanie kontroli
DialogFragmentCallbacksDetector
dotyczącej cząstek papieru. (#171, b/181780047)
Wersja 1.3
Wersja 1.3.6
21 lipca 2021 r.
Funkcje androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
i androidx.fragment:fragment-testing:1.3.6
są dostępne. Wersja 1.3.6 zawiera te commity.
Poprawki błędów
- Fragment
1.4.0-alpha03
:FragmentManager
nie będzie się już zawieszać, gdy spróbujesz ukryć fragment do usunięcia. (I573dd, b/183634730) - Widok fragmentu jest teraz prawidłowo ustawiony na
GONE
, gdy używaszhide()
, a widok wyższy ma ustawioną wartośćtransitionGroup=”true”
. (aosp/1766655, b/193603427) FragmentActivity
zawsze odblokowuje zapisany stan jako pierwszą operację w zastąpionych przez niego wywołaniach cyklu życia. (I6db7a)
Aktualizacja zależności
- Zmiana w Fragment
1.3.6
: fragmenty są teraz zależne od działania1.2.4
(I3a66c).
Wersja 1.3.5
16 czerwca 2021 r.
Funkcje androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
i androidx.fragment:fragment-testing:1.3.5
są dostępne. Wersja 1.3.5 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono regresję w przypadku przejść elementów współdzielonych wprowadzonych w Fragment
1.3.4
przez aosp/1679887. Fragmenty poprawnie obsługują teraz grupy przejść (ustawione bezpośrednio za pomocą elementutransitionGroup="true"
lub pośrednio za pomocą elementutransitionName
lubbackground
), a elementy współdzielone nie będą już wywoływać błęduIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304)
Wersja 1.3.4
18 maja 2021 r.
Funkcje androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
i androidx.fragment:fragment-testing:1.3.4
są dostępne. Wersja 1.3.4 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono regresję wprowadzoną w Fragment
1.3.3
podczas używania interfejsu APIViewTreeViewModelStoreOwner.get()
zViewModelProvider
lub metody Jetpack ComposeviewModel()
wewnątrz Fragmentu przy użyciu Hilt. W tych przypadkachViewModelProvider.Factory
jest teraz prawidłowo używane w fragmentach, jeśli zastępuje onogetDefaultViewModelProviderFactory()
(jak w przypadku adnotowanych fragmentów z@AndroidEntryPoint
). Jeśli nie zastąpisz tej metody, jako domyślna metoda fabryczna zostanie utworzona metodaSavedStateViewModelFactory
, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368) - Gdy używasz
FragmentContainerView
w interfejsie API 29, wstawki nie będą już wysyłane w nieskończoność. Rozwiązano w ten sposób problemy z instancjamiBottomNavigationBar
iFloatingActionButton
. (I1bb78, b/186012452) - Teraz możesz pobrać obiekt Parcelable z paczki wyników fragmentu po zakończeniu działania procesu. (I65932, b/187443158)
- Podczas przejścia z elementu udostępnionego do ViewGroup, jeśli w ViewGroup ustawisz wartość
transitionGroup
na „fałsz”, przejście będzie teraz prawidłowe. (I99675)
Wersja 1.3.3
21 kwietnia 2021 r.
Funkcje androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
i androidx.fragment:fragment-testing:1.3.3
są dostępne. Wersja 1.3.3 zawiera te zatwierdzenia.
Nowe funkcje
- Funkcja
SavedStateViewModelFactory
działa teraz, gdy jest używana z wartościąSavedStateRegistryOwner
zwracaną przez funkcjęViewTreeSavedStateRegistryOwner.get()
w ramach widoku fragmentu. (I21acf, b/181577191)
Poprawki błędów
- Naprawiono regresję wprowadzoną w Fragment
1.3.2
, która powodowała, że animacjepopEnter
nie były uruchamiane podczas wyjmowaniaFragmentTransaction
, które zawierało operacjęsetPrimaryNavFragment
, taką jak te używane przezNavHostFragment
. (I38c87, b/183877426) FragmentContainerView
zapewnia teraz, że każdyFragment
otrzymuje nowy zestawWindowInsets
, dzięki czemu każdy fragment może niezależnie korzystać z wstawek. (I63f68, b/172153900)DialogFragment
obsługuje teraz prawidłowo przypadki, w których do kontenera o tym samym identyfikatorze co kontener w klasie niestandardowejDialog
dodawany jest fragment podrzędny. Dzięki temu rozwiązano problemy z hierarchią widoku podczas ponownego używania identyfikatorów używanych wewnętrznie przez takie dialogi jakBottomSheetDialog
. (Ie6279, b/180021387)FragmentManager.dump()
teraz prawidłowo wciska pierwszy fragment na liście aktywnych fragmentów. (If5c33, b/183705451)
Poprawki błędów w Menedżerze stanu
- Nowy menedżer stanu fragmentu obsługuje teraz prawidłowo przejścia z wyjściem z użyciem operacji ukrywania. (I9e4de, b/184830265)
Wersja 1.3.2
24 marca 2021 r.
Funkcje androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
i androidx.fragment:fragment-testing:1.3.2
są dostępne. Wersja 1.3.2 zawiera te zatwierdzenia.
Poprawki błędów w Menedżerze stanu
- Gdy obie operacje (
popBackStack()
icommit()
) są wykonywane jednocześnie, ostatnia z nich będzie teraz określać kierunek wszystkich animacji, a nie tylko animacji otwierania i zamykania. (I7072e, b/181142246) - Podczas przejścia w elementie współdzielonym nazwa przejścia nie będzie już usuwana z widoków w hierarchii elementu współdzielonego. (I4d4a6, b/179934757)
Aktualizacje zależności
- Fragment zależy teraz od Activity 1.2.2, co rozwiązuje problem z sprawdzaniem lint
InvalidFragmentVersionForActivityResult
w Activity przy użyciu Fragment 1.3.1 lub nowszej wersji. - Fragment jest teraz zależny od Lifecycle 2.3.1.
Wersja 1.3.1
10 marca 2021 r.
Funkcje androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
i androidx.fragment:fragment-testing:1.3.1
są dostępne. Wersja 1.3.1 zawiera te zatwierdzenia.
Nowe funkcje
- Dialogi w
DialogFragment
mogą teraz uzyskać dostęp do właścicieli ViewTree za pomocą DecorView, co umożliwia korzystanie zDialogFragment
w ramachComposeView
. (Ib9290, b/180691023)
Poprawki błędów
- Fragmenty wczytane do aktywności
RESUMED
za pomocą FragmentContainerView są teraz prawidłowo wyświetlane po zmianie konfiguracji. (Ie14c8, b/180538371) - Usunięto dodatkowy element
}
na końcu fragmentutoString()
(I54705, b/177761088) - Przesłonięte metody w FragmentActivity dziedziczą teraz prawidłowo metodę podstawową javaDoc (I736ce, b/139548782).
- Dokumentacja funkcji
setFragmentResult
isetFragmentResultListener
została zaktualizowana, aby odzwierciedlić fakt, że nie akceptują one już typów nullable (I990ba, b/178348386).
Poprawki błędów w Menedżerze stanu
- Naprawiono wyciek pamięci w fragmentach spowodowany przez
mFocusedView
(Ib4e9e, b/179925887) - Fragmenty wywołują teraz poprawnie funkcję
onCreateOptionsMenu
podczas wyświetlania lub ukrywania transakcji (I8bce8, b/180255554). - Fragmenty podrzędne z przechodzeniem, które zaczyna się przed ich rozmieszczeniem, będą teraz prawidłowo docierać do
RESUMED
(Ic11e6, b/180825150) - Fragmenty napompowane za pomocą tagu
<fragment>
będą teraz zawsze trafiać doRESUMED
(I452ac, (I9fa49)
Aktualizacje zależności
- Fragment 1.3.1 zależy od aktywności
1.2.1
. (I557b9)
Wersja 1.3.0
10 lutego 2021 r.
Funkcje androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
i androidx.fragment:fragment-testing:1.3.0
są dostępne. Wersja 1.3.0 zawiera te zatwierdzenia.
Najważniejsze zmiany od wersji 1.2.0
- Nowy menedżer stanu: znaczące przepisanie kodu wewnętrznego w
FragmentManager
rozwiązało wiele problemów związanych z wysyłaniem zdarzeń cyklu życia, animacji i przejść oraz sposobem obsługi opóźnionych fragmentów. Integracja z interfejsem API Activity Result: dodano obsługę interfejsu
ActivityResultRegistry
API wprowadzonego w Akcji1.2.0
, aby obsługiwać przepływystartActivityForResult()
+onActivityResult()
irequestPermissions()
+onRequestPermissionsResult()
bez zastępowania metod w Twoim fragmencie oraz aby udostępnić uchwyty do testowania tych przepływów. Zapoznaj się z aktualnymi informacjami na temat wyników aktywności.- W tej wersji rozwiązaliśmy kilka problemów związanych z nieprawidłowymi kodami żądań i wysyłaniem próśb o przyznanie uprawnień, które uniemożliwiały działanie interfejsu Activity Result API w poprzednich wersjach
FragmentActivity
. Aby korzystać z interfejsów API ActivityResult w komponencieFragmentActivity
lubAppCompatActivity
, musisz uaktualnić Fragment do wersji 1.3.0.
- W tej wersji rozwiązaliśmy kilka problemów związanych z nieprawidłowymi kodami żądań i wysyłaniem próśb o przyznanie uprawnień, które uniemożliwiały działanie interfejsu Activity Result API w poprzednich wersjach
Interfejs API wyników fragmentu: dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w
FragmentManager
. Funkcja ta działa w przypadku fragmentów hierarchii (rodzica/dziecka), fragmentów DialogFragments i fragmentów w Nawigacji. Zapewnia, że wyniki są wysyłane tylko do Twojego Fragmentu, gdy jest on co najmniej w stanieSTARTED
. Interfejsy API docelowego fragmentu zostały wycofane na rzecz nowych interfejsów API. Zobacz Pobieranie wyników za pomocą interfejsu Fragment Result API.FragmentOnAttachListener
: wywołanie zwrotneonAttachFragment()
w metodachFragmentActivity
iFragment
zostało wycofane. Dodano nową metodęFragmentOnAttachListener
, która zapewnia bardziej elastyczną alternatywę, umożliwiającą delegowanieonAttachFragment()
do oddzielnych, testowalnych obiektów nasłuchujących, a także obsługę dodawania obiektu nasłuchującego do obiektów FragmentManager innych niż bezpośrednio podrzędne.Ulepszenia
FragmentScenario
: klasaFragmentScenario
z elementufragment-testing
została przepisana w języku Kotlin i otrzymała kilka ulepszeń:FragmentScenario
używa teraz interfejsusetMaxLifecycle()
do implementowania interfejsumoveToState()
, co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od podstawowej aktywności.FragmentScenario
obsługuje teraz ustawianie początkowegoLifecycle.State
, aby umożliwić potwierdzenie stanu fragmentu przed przejściem do każdegoLifecycle.State
po raz pierwszy.- Teraz istnieje alternatywa dla interfejsu API
FragmentScenario
w komponencieonFragment
w postaci metody rozszerzeniawithFragment
w języku Kotlin, która umożliwia zwracanie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku.
ViewTree
Wsparcie:Fragment
obsługuje teraz interfejsy APIViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
iViewTreeSavedStateRegistryOwner
dodane w Lifecycle2.3.0
i SavedState1.1.0
, dzięki czemu zwraca fragment jakoViewModelStoreOwner
orazSavedStateRegistryOwner
iLifecycleOwner
powiązane z cyklem życia widoku fragmentu, gdy używaszView
wFragment
.Zmiany animacji
TRANSIT_
: domyślne efekty fragmentu,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, używają terazAnimator
zamiastAnimation
. Zasoby użyte do tworzenia tych animacji są teraz prywatne.Wycofanie
setRetainInstance()
: metodasetRetainInstance()
w fragmentach została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do przechowywania stanu, który może być powiązany z aktywnościami, fragmentami i grafami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, niezachowywanego fragmentu i utrzymywać w oddzieleniu stan, który ma być zachowywany, unikając przy tym częstego źródła wycieków i zachowując przydatne właściwości pojedynczego tworzenia i usuwania zachowywanego stanu (czyli konstruktoraViewModel
i otrzymywanego przez niego wywołaniaonCleared()
).Wycofanie adaptera ViewPager 1: wraz z wydaniem ViewPager 2
1.0.0
klasyFragmentPagerAdapter
iFragmentStatePagerAdapter
służące do interakcji zViewPager
zostały wycofane. Zobacz Migracja z ViewPager do ViewPager2.
Wersja 1.3.0-rc02
27 stycznia 2021 r.
Funkcje androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
i androidx.fragment:fragment-testing:1.3.0-rc02
są dostępne. Wersja 1.3.0-rc02 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po zmianie konfiguracji element nadrzędny
DialogFragment
pojawiał się nad elementem podrzędnymDialogFragment
. Teraz elementy podrzędne dialogu zawsze wyświetlają się nad elementem nadrzędnym. (I30806, b/177439520) - Rozwiązaliśmy problem polegający na tym, że wykonanie operacji
hide
na elemencieAnimation
powodowało miganie ukrywanego fragmentu na końcu animacji. (I57e22, b/175417675) - Fragmenty z przejściami dodanymi przed dołączeniem hierarchii widoku są teraz prawidłowo wyświetlane w
RESUMED
. (I1fc1d, b/177154873)
Poprawki błędów w Menedżerze stanu
- Widok fragmentu
Lifecycle
poprawnie obsługuje teraz przypadki, gdy widok fragmentu jest usuwany, zanimLifecycle
dotrze doCREATED
, co zapobiega wyjątkom z komunikatem „no event down from INITIALIZED” (eda2bd, b/176138645). - Fragmenty, które używają
Animator
, są teraz wyświetlane w prawidłowej kolejności podczas korzystania zFragmentContainerView
. (Id9aa3, b/176089197)
Wersja 1.3.0-rc01
16 grudnia 2020 roku
Funkcje androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
i androidx.fragment:fragment-testing:1.3.0-rc01
są dostępne. Wersja 1.3.0-rc01 zawiera te commity.
Poprawki błędów
- Funkcja
onPrepareOptionsMenu()
działa teraz według tej samej logiki co funkcjaonCreateOptionsMenu()
i nie jest już wywoływana, gdy fragment nadrzędny wywołuje funkcjęsetMenuVisibility(false)
. (Id7de8, b/173203654)
Poprawki błędów w Menedżerze stanu
- Rozwiązaliśmy problem z wyciekami i artefaktami wizualnymi podczas dodawania fragmentu z
Animation
doFragmentContainerView
, a następnie przerywania tego dodawania operacją pop. (I952d8) - Rozwiązaliśmy problem, który powodował, że widok fragmentu pozostawał w hierarchii widoków, jeśli został zastąpiony podczas wykonywania metod
onCreate()
lubonViewCreated()
. (I8a7d5) - Po wznowieniu widoków rdzeniowych fragmentów przywrócony jest teraz prawidłowo ich fokus. (Ifc84b)
- Połączenie operacji pop i replace w ramach tej samej transakcji fragmentu spowoduje wyświetlenie prawidłowych animacji (Ifd4e4, b/170328691)
Wersja 1.3.0-beta02
2 grudnia 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
i androidx.fragment:fragment-testing:1.3.0-beta02
są dostępne. Wersja 1.3.0-beta02 zawiera te commity.
Nowe funkcje
FragmentScenario
został w pełni przekonwertowany na Kotlina przy zachowaniu zgodności z źródłem i binarzami dzięki zastosowaniu interfejsów funkcjonalnych Kotlina 1.4 w przypadkuFragmentAction
. (I19d31)
Zmiany w zachowaniu
- FragmentContainerViews, które nie napełniają fragmentu za pomocą atrybutu
class
aniandroid:name
, można teraz używać poza elementemFragmentActivity
. (Id4397, b/172266337) - Próba ustawienia maksymalnego cyklu życia fragmentu na
DESTROYED
spowoduje teraz wyjątekIllegalArgumentException
(Ie7651, b/170765622) - Inicjowanie FragmentScenario z stanem
DESTROYED
spowoduje teraz wyjątekIllegalArgumentException
(I73590, b/170765622)
Poprawki błędów w Menedżerze stanu
- Rozwiązaliśmy problem, który powodował, że widok nie osiągał swojego ostatecznego stanu, jeśli przerwano przejście fragmentu, które używało opcji
Animator
lub jednej z opcjiTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Rozwiązaliśmy problem, który uniemożliwiał prawidłowe usunięcie fragmentów z wychodzącym
Animation
. (I83d65) - Fragmenty wyjścia, w których efekty są odwrócone, są teraz prawidłowo anulowane i ponownie uruchamiane z odpowiednim efektem wejścia. (I62226, b/167092035)
- Rozwiązaliśmy problem, który powodował, że nie działała funkcja wyjścia
Animator
w funkcjihide()
. (Id7ffe) - Fragmenty są teraz prawidłowo wyświetlane, gdy są odroczone, a następnie natychmiast uruchomione. (Ie713b, b/170022857)
- Fragmenty, które usuwają fokus z widoku podczas animacji, nie będą już próbowały przywrócić fokusu na oddzielonym widoku, gdy osiągną stan
RESUMED
(I38c65, b/172925703)
Darowizna zewnętrzna
FragmentFactory
teraz przechowuje w pamięci podręcznej klasy fragmentów oddzielnie dla różnych instancjiClassLoader
. Dziękuję, Simon Schiller. (#87, b/113886460)
Wersja 1.3.0-beta01
1 października 2020 roku
Funkcje androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
i androidx.fragment:fragment-testing:1.3.0-beta01
są dostępne. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
setMaxLifecycle()
obsługuje teraz ustawienie stanuLifecycle
naINITIALIZING
, o ile fragment nie został przeniesiony doCREATED
. (b/159662173)
Zmiany w interfejsie API
- Uaktualnij androidx, aby używać Kotlina 1.4 (Id6471, b/165307851, b/165300826).
Zmiany w zachowaniu
- Pliki zasobów fragmentów zostały prawidłowo ustawione jako prywatne. (aosp/1425237)
Poprawki błędów
- Fragmenty utworzone za pomocą tagu
<fragment>
będą teraz prawidłowo czekać, aż ich widoki zostaną dodane do kontenera, zanim przejdą do stanu STARTED (I02f4c) - Fragmenty, które są widoczne, a potem
setMaxLifecycle()
doCREATED
, teraz prawidłowo uruchamiają efekty wyjścia. (b/165822335) - Usunięcie oderwanego fragmentu, który nie został dodany do stosu wstecz, nie powoduje już wycieku pamięci. Zdjęcie udostępnione przez Nicklasa Ansmana Giertza. (b/166489383)
- Aktywne fragmenty będą teraz zawsze zawierać niepustą wartość
FragmentManager
, a fragmenty z wartością niepustąFragmentManager
będą zawsze uważane za aktywne. (aosp/1422346) - Domyślne efekty fragmentu,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, używają teraz wartościAnimator
zamiastAnimation
. (b/166155034)
Poprawki błędów w Menedżerze stanu
- Fragmenty teraz prawidłowo przywracają stan skupienia widoku tuż przed rozpoczęciem animacji. (Icc256)
- Fragmenty, które mają tylko przejście z elementem współdzielonym, mają teraz prawidłowo dokończone efekty specjalne, co oznacza, że przechodzą do swojego ostatecznego stanu (Iaebc7, b/166658128)
- Widoki fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876)
- Nowy menedżer stanu konsekwentnie usuwa widok fragmentu przed dodaniem widoku wejścia. (I41a6e)
- Nowy menedżer stanu uwzględnia teraz jawne zmiany widoczności widoku fragmentu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu wejściowego na
INVISIBLE
, pozostanie on niewidoczny. (b/164481490) - Fragmenty mają teraz priorytet
Animators
nadAnimations
, co oznacza, że fragment zawierający oba elementy będzie wykonywać tylkoAnimator
i ignorowaćAnimation
. (b/167579557) - Nowy menedżer stanów nie powoduje już migania fragmentów podczas korzystania z animacji wchodzenia. (b/163084315)
Znany problem
Jeśli podczas korzystania z nowego menedżera stanów naciśniesz Wstecz zamiast wrócić do poprzedniego fragmentu, stary fragment nie zostanie ponownie dodany, co spowoduje pusty ekran. (b/167259187, b/167092035, b/168442830)
Wersja 1.3.0-alpha08
19 sierpnia 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
i androidx.fragment:fragment-testing:1.3.0-alpha08
są dostępne. Wersja 1.3.0-alpha08 zawiera te commity.
Menedżer nowych stanów
Ta wersja zawiera dużą refaktoryzację wewnętrznego zarządzania stanem FragmentManager
, która wpływa na wysyłanie metod cyklu życia, animacji i przechodów oraz sposób obsługi opóźnionych transakcji. Ta opcja jest domyślnie włączona. Więcej informacji znajdziesz w tym poście na blogu Fragments: Rebuilding the Internals. (b/139536619, b/147749580)
- Aby określić, czy FragmentManager ma używać nowego menedżera stanu, możesz użyć eksperymentalnego interfejsu API w
FragmentManager.enableNewStateManager(boolean)
. (I7b6ee)
Te problemy zostały rozwiązane tylko w przypadku korzystania z nowego menedżera stanu:
- Poprzedni fragment operacji
replace
jest teraz prawidłowo zatrzymywany przed rozpoczęciem nowego fragmentu. (b/161654580) - Fragmenty zapobiegają teraz występowaniu na tych samych fragmentach wielu konkurencyjnych animacji, co pozwala uniknąć sytuacji, w której animacja
Animation
zastąpi wszystkie efektyTransition
lub w której w poszczególnych fragmentach będą działać animacjeAnimator
iTransition
. (b/149569323) - Teraz zamiast tylko ostatniego fragmentu wejścia i pierwszego fragmentu wyjścia są wykonywane
enterTransition
iexitTranstion
wszystkich fragmentów wejścia i wyjścia. (b/149344150) - Odroczone fragmenty nie są już blokowane w stanie
CREATED
, lecz przechodzą do stanuSTARTED
wraz z innymi fragmentami. (b/129035555) - Rozwiązaliśmy problem, który powodował, że
FragmentManager
wykonywał operacje w nieprawidłowej kolejności, gdy mieszano opóźnioną transakcję z ponownym uporządkowaniem z transakcją bez ponownego uporządkowania. (b/147297731) - Wyświetlanie wielu fragmentów jednocześnie nie spowoduje już tymczasowego wyświetlenia fragmentów pośrednich podczas opóźniania fragmentów. (b/37140383)
- Funkcja
FragmentManager
zwraca teraz prawidłowe fragmenty podczas wywoływania funkcjifindFragmentById()
lubfindFragmentByTag()
w ramach wywołania zwrotnegoonAttachFragment()
. (b/153082833) - Fragmenty nie wywołują już funkcji
onCreateView()
w przypadku fragmentów, które są usuwane, gdy fragment, który je zastępuje, jest opóźniony. (b/143915710) - Komunikat o błędzie, który pojawia się podczas próby połączenia instancji frameworka
Transition
i AndroidXTransition
, zawiera teraz fragment z nieprawidłowym przejściem. (b/155574969)
Zmiany w zachowaniu
- Teraz możesz wywołać metodę
launch()
w elementachActivityResultLauncher
w ramach metody cyklu życiaonCreate()
fragmentu. (b/161464278) - Wywołanie funkcji
registerForActivityResult()
po funkcjionCreate()
powoduje teraz wyjątek wskazujący, że jest to niedozwolone, zamiast milcząco nie przekazywać wyników po zmianie konfiguracji. (b/162255449) FragmentActivity
używa teraz interfejsu APIOnContextAvailableListener
wprowadzonego w Aktywność1.2.0-alpha08
, aby przywrócić stanFragmentManager
. Wszystkie detektory dodane do podklasFragmentActivity
będą działać po tym detektorze. (I513da)
Poprawki błędów
- Wartości
ActivityOptions
przekazywane podczas korzystania z funkcjistartIntentSenderForResult()
są teraz uwzględniane. (b/162247961)
Znany problem
- Jeśli używasz nowego menedżera stanu, bezpośrednie ustawienie widoczności widoku okna głównego fragmentu po
onViewCreated()
i przedonResume()
spowoduje zastąpienie ustawionej przez Ciebie widoczności przezFragmentManager
, który kontroluje widoczność widoku okna głównego. Aby zmienić widoczność fragmentu, zawsze używaj operacjihide()
ishow()
. (b/164481490)
Wersja 1.3.0-alpha07
22 lipca 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
i androidx.fragment:fragment-testing:1.3.0-alpha07
są dostępne. Wersja 1.3.0-alpha07 zawiera te commity.
Nowe funkcje
FragmentScenario
obsługuje teraz ustawianie początkowego stanu cyklu życia:CREATED
,STARTED
lubRESUMED
zamiast zawsze przenoszenia fragmentu do stanuRESUMED
. (b/159662750)- Dodano alternatywę dla interfejsu API
FragmentScenario
wonFragment
w postaci metody rozszerzeniawithFragment
w Kotlinie, która umożliwia zwrócenie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku. (b/158697631)
Zmiany w zachowaniu
FragmentScenario
używa teraz interfejsusetMaxLifecycle()
do implementowania interfejsumoveToState()
, co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od podstawowej aktywności. (b/156527405)- Wartość
SavedStateRegistryOwner
zwracana przez funkcjęViewTreeSavedStateRegistryOwner
jest teraz powiązana z cyklem życia widoku fragmentu. Dzięki temu stan jest zapisywany i przywracany w tym samym czasie co widok fragmentu. (b/158503763)
Poprawki błędów
- Fragmenty czekają teraz na dołączenie widoku fragmentu, zanim wywołają funkcję
ViewCompat.requestApplyInsets()
, co zapobiega przypadkom odrzucenia żądania wstawki. (b/158095749) - Wywołanie funkcji
clearFragmentResultListener
prawidłowo czyści obserwator cyklu życia. (b/159274993)
Wersja 1.3.0-alpha06
10 czerwca 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
i androidx.fragment:fragment-testing:1.3.0-alpha06
są dostępne. Wersja 1.3.0-alpha06 zawiera te commity.
Nowe funkcje
- Wywołanie zwrotne
onAttachFragment()
w elementachFragmentActivity
iFragment
zostało wycofane. Dodano nową metodęFragmentOnAttachListener
, która zapewnia bardziej elastyczną alternatywę, umożliwiającą delegowanie metodyonAttachFragment()
do oddzielnych, testowalnych obiektów typu Listener, a także dodawanie obiektów typu Listener do obiektów FragmentManager innych niż bezpośrednio podrzędne. (I06d3d)
Poprawki błędów
- Stan widoku fragmentów nadrzędnych jest teraz przywracany przed fragmentami podrzędnymi, co rozwiązuje problem z wizualnym układem po zmianie konfiguracji, gdy element
DialogFragment
wyświetla inny elementDialogFragment
jako element podrzędny. (b/157195715) - Rozwiązaliśmy problem, który powodował, że kontrola lint
UseRequireInsteadOfGet
nie obsługiwała prawidłowo połączonych zastosowań operatorów?.
i!!
. (b/157677616)
Wersja 1.3.0-alpha05
20 maja 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
i androidx.fragment:fragment-testing:1.3.0-alpha05
są dostępne. Wersja 1.3.0-alpha05 zawiera te commity.
Nowe funkcje
- Dodano obsługę właściwości
ViewTreeViewModelStoreOwner
z Lifecycle2.3.0-alpha03
iViewTreeSavedStateRegistryOwner
z SavedState1.1.0-alpha01
podczas używania właściwościView
w komponencieFragment
. (aosp/1297993, aosp/1300264)
Zmiany w interfejsie API
- Interfejsy API
setFragmentResult()
isetFragmentResultListener()
przyjmują teraz odpowiednio wartości niezerowąBundle
iFragmentResultListener
. Aby wyraźnie wyczyścić wcześniej ustawiony wynik lub listenera, użyj nowych metodclearFragmentResult()
iclearFragmentResultListener()
. (b/155416778) setFragmentResultListener()
Rozszerzenia Kotlina, które przyjmują funkcję lambda, są teraz oznaczone jakoinline
. (b/155323404)
Zmiany w zachowaniu
- Wycofane wcześniej parametry
startActivityForResult()
,startIntentSenderForResult()
irequestPermissions
w interfejsieFragment
są teraz używane wewnętrznie w interfejsieActivityResultRegistry
, co usuwa ograniczenie korzystania z tych interfejsów API tylko do niższych bitów (poniżej0xFFFF
) w przypadku kodów żądań. (b/155518741)
Aktualizacje dokumentacji
- Rozwinęliśmy dokumentację konstruktorów
Fragment(@LayoutRes int)
iDialogFragment(@LayoutRes int)
, aby wyjaśnić, że należy je wywoływać z konstruktora bez argumentów podklasy, gdy używasz domyślnegoFragmentFactory
. (b/153042497)
Wersja 1.3.0-alpha04
29 kwietnia 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
i androidx.fragment:fragment-testing:1.3.0-alpha04
są dostępne. Wersja 1.3.0-alpha04 zawiera te commity.
Nowe funkcje
- Dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w
FragmentManager
. Funkcja ta działa w przypadku fragmentów hierarchii (rodzica/dziecka), fragmentów DialogFragments i fragmentów w Nawigacji. Zapewnia, że wyniki są wysyłane tylko do Twojego Fragmentu, gdy jest on co najmniej w stanieSTARTED
. (b/149787344)
Zmiany w interfejsie API
- Interfejsy API docelowych fragmentów zostały wycofane. Aby przekazywać dane między fragmentami, należy zamiast tego używać nowych interfejsów API wyników fragmentów. (b/149787344)
- Interfejsy API
startActivityForResult()
/onActivityResult()
irequestPermissions()
/onRequestPermissionsResult()
w Fragment zostały wycofane. Użyj interfejsów Activity Result API. (aosp/1290887) - Zmiany w wersji Activity
1.2.0-alpha04
: nazwa metodyprepareCall()
została zmieniona naregisterForActivityResult()
. (aosp/1278717)
Poprawki błędów
- Funkcja
getViewLifecycleOwner()
fragmentu jest teraz zatrzymana przed wywołaniem funkcjionSaveInstanceState()
, co odzwierciedla zachowanie cyklu życia fragmentu. (b/154645875) - Wywołanie funkcji
setMenuVisibility(false)
w fragmentach teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. (b/153593580) - Rozwiązaliśmy problem z
illegalStateException
podczas dodawania fragmentu do hierarchii widokuDialogFragment
za pomocąFragmentContainerView
. (b/154366601) - Metoda
getDefaultViewModelProviderFactory()
w fragmentach nie ulega już awarii, gdy fragmenty są hostowane poza aktywnością. (b/153762914)
Wersja 1.3.0-alpha03
1 kwietnia 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
i androidx.fragment:fragment-testing:1.3.0-alpha03
są dostępne. Wersja 1.3.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Metody
prepareCall
wFragment
to terazfinal
. (b/152439361)
Poprawki błędów
- Rozwiązaliśmy regresję wprowadzoną w Fragment
1.3.0-alpha02
podczas używaniaBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - Usunięto błąd powodujący awarię po zmianie konfiguracji podczas używania funkcji
prepareCall
z fragmentu. (b/152137004) - Rozwiązaliśmy problem, który powodował, że podczas korzystania z elementu współdzielonego i przejść wyjściowych były ignorowane.
setTargetFragment()
(b/152023196) - Zmiana Fragment
1.2.4
: zaktualizowano reguły Fragment ProGuard, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338) - Z Fragmentu
1.2.4
: wyłączono regułę lintFragmentLiveDataObserve
w klasachDialogFragment
, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co pozwala bezpiecznie używaćthis
lubviewLifecycleOwner
podczas wywoływaniaobserve
. (b/151765086)
Zmiany w zależnościach
- Fragmenty zależą od Activity
1.2.0-alpha03
, w którym wprowadzono znaczące ulepszenia interfejsu Activity Result API wprowadzone w Activity1.2.0-alpha02
.
Wersja 1.3.0-alpha02
18 marca 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
i androidx.fragment:fragment-testing:1.3.0-alpha02
są dostępne. Wersja 1.3.0-alpha02 zawiera te commity.
Nowe funkcje
- Dodano obsługę interfejsu
ActivityResultRegistry
API wprowadzonego w aktywności1.2.0-alpha02
, aby obsługiwać przepływystartActivityForResult()
+onActivityResult()
irequestPermissions()
+onRequestPermissionsResult()
bez zastępowania metod w Twoim fragmencie, a także stworzyć uchwyty do testowania tych przepływów. Zapoznaj się z aktualną wersją artykułu Uzyskiwanie wyniku z aktywności. (b/125158199)
Zmiany w interfejsie API
DialogFragment
udostępnia teraz konstruktor, który przyjmuje parametr@LayoutRes
określający układ, któryonCreateView()
powinien napompować domyślnie. (b/150327080)- Metoda
onActivityCreated()
została wycofana. Kod dotyczący widoku fragmentu powinien być umieszczony w funkcjionViewCreated()
(która jest wywoływana bezpośrednio przed funkcjąonActivityCreated()
), a inny kod inicjowania powinien znajdować się w funkcjionCreate()
. Aby otrzymywać wywołania zwrotne, gdyonCreate()
aktywności jest zakończona, należy zarejestrowaćLifeCycleObserver
wLifecycle
aktywności wonAttach()
i usunąć go po otrzymaniu wywołania zwrotnegoonCreate()
. (b/144309266)
Poprawki błędów
- Z Fragmentu
1.2.3
: naprawiliśmy błąd wDialogFragment
, który powodowałStackOverflowError
podczas wywoływaniagetLayoutInflater()
z poziomuonCreateDialog()
. (b/117894767, aosp/1258664) - W Fragment
1.2.3
: zredukowano zakres dołączonych reguł ProGuarda w Fragment, aby można było usunąć nieużywane klasy Fragment. (b/149665169) - Zmiana w Fragment
1.2.3
: naprawiono fałszywie pozytywne wyniki w sprawdzaniu LintUseRequireInsteadOfGet
, gdy używano nazwy zmiennej lokalnej, która zaciemniała nazwę właściwości Kotlin. (b/149891163) - W Fragment
1.2.3
:FragmentContainerView
nie powoduje już błęduUnsupportedOperationException
z powodu użycia nieprawidłowego konstruktora w podglądzie układu. (b/149707833)
Znane problemy
- Aplikacja
BottomSheetDialogFragment
nie prawidłowo umieszcza okna dialogowego na ekranie. (b/151652127)
Wersja 1.3.0-alpha01
4 marca 2020 r.
Funkcje androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
i androidx.fragment:fragment-testing:1.3.0-alpha01
są dostępne. Wersja 1.3.0-alpha01 zawiera te commity.
Nowe funkcje
- Dodano obsługę interfejsu
ViewTreeLifecycleOwner.get(View)
dodanego w cyklu życia2.3.0-alpha01
, tak aby zwracał onviewLifecycleOwner
fragmentu jakoLifecycleOwner
dla wszystkich widoków zwracanych przezonCreateView()
. (aosp/1182955)
Zmiany w interfejsie API
- Metoda
setRetainInstance()
w Fragments została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do przechowywania stanu, który może być powiązany z aktywnościami, fragmentami i grafami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, niezachowywanego fragmentu i utrzymywać w oddzieleniu stan, który ma być przechowywany, unikając przy tym częstego źródła wycieków i zachowując przydatne właściwości pojedynczego tworzenia i usuwania stanu przechowywanego (czyli konstruktoraViewModel
i otrzymywanego przez niego wywołaniaonCleared()
). (b/143911815) - Wraz z wydaniem ViewPager2
1.0.0
klasyFragmentPagerAdapter
iFragmentStatePagerAdapter
służące do interakcji zViewPager
zostały wycofane. Zobacz Migracja z ViewPager do ViewPager2. (b/145132715)
Poprawki błędów
- Reguły Fragment ProGuarda poprawnie zachowują teraz tylko domyślne konstruktory klas
Fragment
, które są używane, a nie wszystkie instancjeFragment
, co naprawia regresję wprowadzoną w Fragment1.2.1
. (b/149665169 - Reguły Lint
require___()
dodane w Fragment1.2.2
nie dają już fałszywie pozytywnego wyniku w przypadku zmiennych lokalnych, które mają tę samą nazwę co zaciemnione nazwy właściwości Kotlina (np.view
). (b/149891163) - Podczas korzystania z podglądu układu w Android Studio funkcja
FragmentContainerView
nie powoduje już błęduUnsupportedOperationException
. (b/149707833) - Rozwiązaliśmy problem polegający na tym, że zachowane fragmenty, które zostały dodane po zapisaniu stanu, nie były stale tworzone i usuwane po każdej zmianie konfiguracji. (b/145832397)
Wersja 1.2.5
Wersja 1.2.5
10 czerwca 2020 r.
Funkcje androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
i androidx.fragment:fragment-testing:1.2.5
są dostępne. Wersja 1.2.5 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
getViewLifecycleOwner()
fragmentu jest teraz zatrzymana przed wywołaniem funkcjionSaveInstanceState()
, co odzwierciedla zachowanie cyklu życia fragmentu. Ten fragment został wcześniej opublikowany w Fragment1.3.0-alpha04
. (b/154645875) - Wywołanie funkcji
setMenuVisibility(false)
w fragmentach teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. Ten fragment został wcześniej opublikowany w Fragment1.3.0-alpha04
. (b/153593580)
Wersja 1.2.4
Wersja 1.2.4
1 kwietnia 2020 r.
Funkcje androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
i androidx.fragment:fragment-testing:1.2.4
są dostępne. Wersja 1.2.4 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano reguły Fragment ProGuard, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338)
- Wyłączono regułę lint
FragmentLiveDataObserve
w klasachDialogFragment
, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co pozwala bezpiecznie używać w funkcjiobserve
albothis
, alboviewLifecycleOwner
. (b/151765086)
Wersja 1.2.3
Wersja 1.2.3
18 marca 2020 r.
Funkcje androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
i androidx.fragment:fragment-testing:1.2.3
są dostępne. Wersja 1.2.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd w
DialogFragment
, który powodowałStackOverflowError
podczas wywoływaniagetLayoutInflater()
z poziomuonCreateDialog()
. (b/117894767, aosp/1258665) - Zmniejszono zakres reguł ProGuard uwzględnionych w Fragment, aby można było usuwać nieużywane klasy Fragment. (b/149665169)
- Rozwiązano problem z fałszywie dodatnimi wynikami w sprawdzaniu Lint
UseRequireInsteadOfGet
, gdy używano nazwy zmiennej lokalnej, która zaciemnia nazwę właściwości Kotlin. (b/149891163) - Funkcja
FragmentContainerView
nie powoduje już błęduUnsupportedOperationException
w przypadku użycia nieprawidłowego konstruktora w podglądzie układu. (b/149707833)
Wersja 1.2.2
Wersja 1.2.2
19 lutego 2020 r.
Funkcje androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
i androidx.fragment:fragment-testing:1.2.2
są dostępne. Wersja 1.2.2 zawiera te zatwierdzenia.
Nowe kontrole Lint
- Lint sugeruje użycie
viewLifecycleOwner
jakoLifecycleOwner
do wywołaniaOnBackPressedDispatcher
w plikachonCreateView()
,onViewCreated()
ionActivityCreated()
. (b/142117657) - Dodano nową kontrolę Lint, która potwierdza, że używasz prawidłowej wersji
debugImplementation
, gdy używasz artefaktufragment-testing
. (b/141500106) - Fragmenty sugerują teraz używanie powiązanych metod
require___()
, aby wyświetlać bardziej opisowe komunikaty o błędach, zamiast metodcheckNotNull(get___())
,requireNonNull(get___())
lubget___()!!
we wszystkich interfejsach Fragment API, które zawierają zarówno metodyget
, jak irequire
. (aosp/1202883)
Poprawki błędów
- Poprawiono pliki ProGuard Fragment, aby uniknąć ostrzeżeń R8 (b/148963981)
- Ulepszony został dotychczasowy test Lint, który sugeruje używanie
viewLifecycleOwner
podczas korzystania zobserve
, aby obsługiwać też wersję metody rozszerzenialivedata-ktx
wobserve
. (b/148996309) - Naprawiono formatowanie wielu kontroli Lint (aosp/1157012)
Wkład zewnętrzny
- Dziękujemy Zacowi Sweersowi za udostępnienie
require___()
kontroli składni w imieniu Slacka. (aosp/1202883)
Wersja 1.2.1
Wersja 1.2.1
5 lutego 2020 r.
Funkcje androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
i androidx.fragment:fragment-testing:1.2.1
są dostępne. Wersja 1.2.1 zawiera te zatwierdzenia
Poprawki błędów
- Fragmenty dodane za pomocą metod
add
ireplace
, które przyjmują instancjęClass
(lub zrefaktoryzowane wersje w Kotlinie), mają teraz konstruktor domyślny zachowany przez ProGuard. (b/148181315) - Metody
FragmentStatePagerAdapter
iFragmentPagerAdapter
nie przechwytują już wyjątków wyrzucanych przez metodęFragmentManager
podczas wykonywania metodyfinishUpdate()
. (aosp/1208711) - Rozwiązaliśmy problem polegający na tym, że funkcja
FragmentManager.findFragment()
nie działała w przypadku fragmentów dodanych za pomocą tagu<fragment>
. (b/147784323) - Fragmenty utworzone za pomocą tagu
<fragment>
są teraz zawsze wywoływane w układzie przed wywołaniemonInflate()
.onCreate()
(aosp/1215856) - Wywołanie metody
toString()
w instancjiFragmentManager
nie powoduje już błęduNullPointerException
, gdy aktywność została już zniszczona. (b/148189412)
Zmiany w zależnościach
- Fragmenty
1.2.1
są teraz zależne od stanów zapisanych Lifecycle ViewModel2.2.0
.
Wersja 1.2.0
Wersja 1.2.0
22 stycznia 2020 r.
Funkcje androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
i androidx.fragment:fragment-testing:1.2.0
są dostępne. Wersja 1.2.0 zawiera te zatwierdzenia
Ważne zmiany od wersji 1.1.0
- FragmentContainerView: element
FragmentContainerView
to zalecany kontener do dynamicznie dodawanych fragmentów, który zastępuje użycie elementuFrameLayout
lub innych układów. Obsługuje też te same parametryclass
,android:name
i opcjonalnieandroid:tag
co tag<fragment>
, ale do dodania tego początkowego fragmentu używa zwykłego taguFragmentTransaction
zamiast ścieżki niestandardowego kodu używanej przez tag<fragment>
. onDestroyView()
czas: fragmenty czekają teraz na zakończenie animacji wyjścia, przejść w ramach frameworka i przejść AndroidX (w przypadku użycia Przejścia1.3.0
) przed wywołaniemonDestroyView()
.- Funkcje
add()
ireplace()
oparte na klasie: dodano nowe przeciążenia funkcjiadd()
ireplace()
w funkcjiFragmentTransaction
, które przyjmują argumentClass<? extends Fragment>
i opcjonalnieBundle
. Te metody używają obiektuFragmentFactory
do utworzenia wystąpienia Fragmentu, który ma zostać dodany. Dofragment-ktx
zostały też dodane rozszerzenia Kotlina, które korzystają z typów kwalifikowanych (np.fragmentTransaction.replace<YourFragment>(R.id.container)
). - Łączenie Lifecycle ViewModel z SavedState:
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną podczas korzystania zby viewModels()
,by activityViewModels()
, konstruktoraViewModelProvider
lubViewModelProviders.of()
z Fragmentem. - Nowe kontrole Lint: dodaliśmy nową kontrolę Lint, która sprawdza, czy podczas obserwowania
LiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
używaszgetViewLifecycleOwner()
. - Wycofanie metody
getFragmentManager()
: metodygetFragmentManager()
irequireFragmentManager()
w klasie Fragment zostały wycofane i zastąpione jedną metodągetParentFragmentManager()
, która zwraca niepustą wartośćFragmentManager
, do której dodano fragment (możesz użyć metodyisAdded()
, aby sprawdzić, czy można ją bezpiecznie wywołać). FragmentManager.enableDebugLogging()
wycofanie: statyczna metodaFragmentManager.enableDebugLogging
została wycofana. FragmentManager uwzględnia teraz wartośćLog.isLoggable()
dla taguFragmentManager
, co umożliwia włączenie rejestrowaniaDEBUG
lubVERBOSE
bez konieczności ponownego kompilowania aplikacji.
Znane problemy
- Fragmenty, do których odwołuje się tylko atrybut
class
lubandroid:name
w elementachFragmentContainerView
, nie są automatycznie przechowywane przez ProGuard, dlatego musisz ręcznie dodać regułę przechowywania dla każdej klasy fragmentów. (b/142601969) - Podczas dodawania
NavHostFragment
za pomocąclass
lubandroid:name
w pliku XML zFragmentContainerView
nie możesz używaćfindNavController()
wonCreate()
aktywności. (b/142847973)
Wersja 1.2.0-rc05
8 stycznia 2020 r.
Funkcje androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
i androidx.fragment:fragment-testing:1.2.0-rc05
są dostępne. Wersja 1.2.0-rc05 zawiera te zatwierdzenia:
Poprawki błędów
- Rozwiązaliśmy problem z cofaniami w fragmentach kodu
1.2.0-rc04
podczas używania tagu<fragment>
, który powodował nieprawidłowe wywołanie funkcjionViewCreated()
podczas usuwania aktywności. (b/146290333) - Fragmenty dodane za pomocą tagu
<fragment>
mają teraz prawidłowo wyczyszczone ustawienia niestandardowe, nawet jeśli występują tylko czasami w układzie (np. tylko w układzie poziomym). W rezultacie te fragmenty są teraz prawidłowo przenoszone doCREATED
nawet wtedy, gdy nie znajdują się w Twoim układzie, zamiast być tworzone, ale nigdy nie przechodzą przez żadne metody cyklu życia. (b/145769287)
Wersja 1.2.0-rc04
18 grudnia 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
i androidx.fragment:fragment-testing:1.2.0-rc04
są dostępne. Wersja 1.2.0-rc04 zawiera te zatwierdzenia
Poprawki błędów
- Aby uniknąć problemów wizualnych, dostosowaliśmy animacje w przypadku
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
. (b/145468417)
Wersja 1.2.0-rc03
4 grudnia 2019
Funkcje androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
i androidx.fragment:fragment-testing:1.2.0-rc03
są dostępne. Wersja 1.2.0-rc03 zawiera te zatwierdzenia
Poprawki błędów
- Usunięto niezamierzone zmiany zachowania, które powodowały, że usuwane fragmenty były nadal zwracane przez funkcję
findFragmentById()
/findFragmentByTag()
, podczas gdy ich animacje wyjścia lub przejścia były odtwarzane. (b/143982969, aosp/1167585) - Fragmenty podrzędne są teraz prawidłowo zatrzymywane przed fragmentami nadrzędnymi, gdy zawierające je aktywności wywołują funkcję
onSaveInstanceState()
. (b/144380645) - Rozwiązaliśmy problem polegający na tym, że po wygenerowaniu ukrytego fragmentu widoki były nieprawidłowo oznaczane jako
INVISIBLE
. (b/70793925) - Przejścia elementów udostępnionych fragmentów obsługują teraz widoki, które zostały obrócone, przeskalowane itp. (b/142835261)
Aktualizacje dokumentacji
- Doprecyzowano dokumentację dotyczącą wycofania
setUserVisibleHint()
. (b/143897055) - Ulepszona dokumentacja funkcji
setFragmentFactory()
igetFragmentFactory()
, aby lepiej wskazywać, że ustawienieFragmentFactory
będzie miało wpływ również na podrzędne obiekty FragmentManager. (aosp/1170095)
Zmiany w zależnościach
- Fragmenty zależą teraz od Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
i Activity1.1.0-rc03
.
Wersja 1.2.0-rc02
7 listopada 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
i androidx.fragment:fragment-testing:1.2.0-rc02
są dostępne. Wersja 1.2.0-rc02 zawiera te zatwierdzenia:
Poprawki błędów
- W Kotlinie poprawka LintFix dotycząca używania
getViewLifecycleOwner()
podczas obserwowaniaLiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
(wprowadzona w Fragment1.2.0-rc01
) używa teraz składni dostępu do właściwości KotlinviewLifecycleOwner
zamiastgetViewLifecycleOwner()
. (aosp/1143821)
Wersja 1.2.0-rc01
23 października 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
i androidx.fragment:fragment-testing:1.2.0-rc01
są dostępne. Wersja 1.2.0-rc01 zawiera te zatwierdzenia:
Nowe funkcje
- Tag
FragmentContainerView
obsługuje teraz atrybutclass
oprócz atrybutuandroid:name
, co odzwierciedla funkcjonalność tagu<fragment>
. (b/142722242) - Dodano nową kontrolę lintowania, która sprawdza, czy podczas obserwowania
LiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
używaszgetViewLifecycleOwner()
. (b/137122478)
Poprawki błędów
- W przypadku funkcji
onDismiss
ionCancel
w obiekcieDialogFragment
gwarantuje się, że przekazana im wartośćDialogInterface
jest różna od null, a funkcjagetDialog()
zwraca wartość nierówną null. (b/141974033) - Funkcja
FragmentContainerView
dodaje teraz fragment zdefiniowany przez funkcjęclass
lubandroid:name
w ramach napełniania, dzięki czemu funkcjefindFragmentById()
ifindFragmentByTag()
działają natychmiast po jej wykonaniu. (b/142520327) - Naprawiono błąd
IllegalStateException
w plikuFragmentContainerView
z powodu zapisa stanu. (b/142580713) - Usunęliśmy błąd
UnsupportedOperationException
wFragmentContainerView
, gdy klasaFragmentContainerView
jest zaciemniona. (b/142657034)
Znane problemy
- Fragmenty, do których odwołuje się tylko atrybut
class
lubandroid:name
w elementachFragmentContainerView
, nie są automatycznie przechowywane przez ProGuard, dlatego musisz ręcznie dodać regułę przechowywania dla każdej klasy fragmentów. Wyłączyliśmy regułę lint, która sugeruje przejście naFragmentContainerView
, dopóki nie zostanie ona naprawiona za pomocąaapt2
. (b/142601969)
Wersja 1.2.0-beta02
11 października 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
i androidx.fragment:fragment-testing:1.2.0-beta02
są dostępne. Wersja 1.2.0-beta02 zawiera te zatwierdzenia:
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że fragmenty
onInflate()
nie otrzymywały odpowiednich atrybutów zFragmentContainerView
, co powodowało nieprawidłowe działanie funkcji takich jakNavHostFragment
. (b/142421837)
Wersja 1.2.0-beta01
9 października 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
i androidx.fragment:fragment-testing:1.2.0-beta01
są dostępne. Wersja 1.2.0-beta01 zawiera te zatwierdzenia:
Nowe funkcje
FragmentContainerView
umożliwia dodawanie początkowego fragmentu z dodatkową obsługą atrybutów XMLandroid:name
i opcjonalnych atrybutówandroid:tag
. W przeciwieństwie do tagu<fragment>
tagFragmentContainerView
używa normalnego taguFragmentTransaction
, aby dodać początkowy fragment, co umożliwia dalsze operacjeFragmentTransaction
naFragmentContainerView
i użycie w tym celu mechanizmu View Binding. (b/139830628, b/141177981)- Fragmenty zawierają teraz ostrzeżenie Lint, które oferuje szybkie rozwiązanie polegające na zastąpieniu
<fragment>
wartościąFragmentContainerView
. (b/139830056)
Poprawki błędów
- Usunęliśmy błąd
ClassCastException
występujący podczas używaniaandroidx.transition
. (b/140680619) - Gdy używasz Przejścia
1.3.0-beta01
, fragmenty czekają teraz na zakończenie przejśćandroidx.transition
(oprócz przejść i animacji frameworku, które zostały odpowiednio naprawione w Fragment1.2.0-alpha03
i Fragment1.2.0-alpha02
), zanim przekażą daneonDestroyView()
. (aosp/1119841) - Gdy używasz Przejścia
1.3.0-beta01
, fragmenty będą teraz prawidłowo anulowaćandroidx.transition
przejścia przed rozpoczęciem nowych przejść lub animacji w tym samym kontenerze. (aosp/1119841) - Rozwiązaliśmy problem występujący w wersji interfejsu API 17 i starszych, gdy podczas korzystania z elementu
FragmentContainerView
w widoku okna głównego Fragmentu występują przejściaandroidx.transition
. (b/140361893) - Element
fragment-testing
zależy teraz od testu AndroidX1.2.0
, co rozwiązuje problem z niezgodnością z najnowszą wersją Espresso 3.2.0. (b/139100149) - Usunięto
Log.w
w FragmentManager. (aosp/1126468)
Znane problemy
- Fragmenty
onInflate()
nie otrzymują prawidłowych atrybutów z elementuFragmentContainerView
, co powoduje błędy w przypadkach takich jakNavHostFragment
. (b/142421837)
Wersja 1.2.0-alpha04
18 września 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
i androidx.fragment:fragment-testing:1.2.0-alpha04
są dostępne. Wersja 1.2.0-alpha04 zawiera te zatwierdzenia:
Zmiany w interfejsie API
- Metody
getFragmentManager()
irequireFragmentManager()
klasyFragment
zostały wycofane i zastąpione jedną metodągetParentFragmentManager()
, która zwraca niepustą wartośćFragmentManager
, do której dodano fragment (możesz użyć metodyisAdded()
, aby sprawdzić, czy można ją bezpiecznie wywołać). (b/140574496) - Statyczna metoda
FragmentManager.enableDebugLogging
została wycofana. FragmentManager uwzględnia teraz parametrLog.isLoggable()
dla taguFragmentManager
, co umożliwia włączenie rejestrowaniaDEBUG
lubVERBOSE
bez ponownego kompilowania aplikacji. (aosp/1116591)
Poprawki błędów
- Fragmenty są teraz prawidłowo usuwane podczas odtwarzania animacji wyjścia w innych fragmentach. (b/140574199)
- Rozwiązaliśmy problem, który powodował, że fragmenty wywoływały funkcję
Activity.findViewById()
, gdy wcześniej tego nie robiły. (aosp/1116431)
Wersja 1.2.0-alpha03
5 września 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
i androidx.fragment:fragment-testing:1.2.0-alpha03
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
FragmentContainerView
to terazfinal
. (b/140133091)
Poprawki błędów
FragmentContainerView
teraz prawidłowo odwraca kolejność rysowania podczas usuwania fragmentów ze stosu. (b/139104187)- Rozwiązaliśmy problem polegający na tym, że podczas dodawania nowego fragmentu i usuwania fragmentu jednocześnie uruchamiana była niewłaściwa animacja. (b/111659726)
- Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, które zostały naprawione w Fragment
1.2.0-alpha02
) przed wysłaniemonDestroyView()
. (b/138741697)
Wersja 1.2.0-alpha02
7 sierpnia 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
i androidx.fragment:fragment-testing:11.2.0-alpha02
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną podczas korzystania z funkcjiby viewModels()
,by activityViewModels()
, konstruktoraViewModelProvider
lubViewModelProviders.of()
z opcjąFragment
. (b/135716331)- Domyślne animacje podczas korzystania z
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
zsetTransition
naFragmentTransaction
zostały zaktualizowane, aby pasowały do animacji używanych przez czynności na urządzeniach z Androidem 10. (aosp/1012812, aosp/1014730)
Zmiany w interfejsie API
- Wprowadza element
FragmentContainerView
jako zalecany kontener dla dynamicznie dodawanych fragmentów, zastępując m.in. elementFrameLayout
, ponieważ rozwiązuje problemy z kolejnością animacji i przesyłanie wstawek okna do fragmentów. (b/37036000, aosp/985243, b/136494650) - Dodano stałą metodę
FragmentManager.findFragment(View)
, która umożliwia pobieranie z widoku wypełnionego przez fragment fragmentu zawierającego. Rozszerzenie Kotlin jest też dostępne w językufragment-ktx
. (aosp/1090757) - Dodaliśmy nowe przeciążenia funkcji
add()
ireplace()
w funkcjiFragmentTransaction
, które przyjmują argumentyClass<? extends Fragment>
i opcjonalnieBundle
. Te metody używają obiektuFragmentFactory
do utworzenia wystąpienia Fragmentu, który ma zostać dodany. Dofragment-ktx
zostały też dodane rozszerzenia w Kotlinie, które korzystają z typów zmaterializowanych (np.fragmentTransaction.replace<YourFragment>(R.id.container)
). (b/126124987) - Do wywołań zwrotnych cyklu życia
Fragment
dodano adnotacje@MainThread
. (b/127272564) - Interfejsy API dotyczące tytułu nawigacji w
FragmentTransaction
iFragmentManager.BackStackEntry
zostały wycofane. (b/138252944) - Metoda
setTransitionStyle
w elementachFragmentTransaction
została wycofana. (aosp/1011537) - Wiele metod w
FragmentManager
nie jest jużabstract
. ElementFragmentManager
pozostaje elementemabstract
i nie powinien być bezpośrednio instancjonowany ani rozszerzany. Nadal należy pobierać tylko istniejące wystąpienie z elementugetSupportFragmentManager()
,getChildFragmentManager()
itp.
Poprawki błędów
- Zmiany w Fragment
1.1.0-rc04
: fragmenty są teraz prawidłowo anulowane w przypadku opóźnionych przejść w fragmentach. (b/138251858) - Z Fragmentu
1.1.0-rc03
: rozwiązaliśmy problem polegający na tym, że wywołaniepostponeEnterTransition()
z czasem oczekiwania więcej niż raz nie anulowało poprzednich czasów oczekiwania. (b/137797118) - Z Fragmentu
1.1.0-rc02
: rozwiązano problem awarii w funkcjachFragmentPagerAdapter
iFragmentStatePagerAdapter
podczas usuwania bieżącego elementu. (b/137209870) - Fragmenty czekają teraz na zakończenie animacji, zanim przekażą
onDestroyView()
. (b/136110528) - Animacje fragmentów pochodzące z fragmentów podrzędnych i ich elementów potomnych są teraz prawidłowo obsługiwane podczas animacji fragmentu nadrzędnego. (b/116675313)
- Rozwiązaliśmy błąd
NullPointerException
występujący podczas korzystania z przejść elementów współdzielonych i łączenia operacji pop i add. (b/120507394) - Dodano obejście problemu z testami
IllegalStateException
, gdy w testach Robolectric są używane żądaniaFragmentPagerAdapter
iFragmentStatePagerAdapter
. (b/137201343)
Wersja 1.2.0-alpha01
2 lipca 2019 r.
Funkcje androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
i androidx.fragment:fragment-testing:1.2.0-alpha01
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- FragmentManager wywołuje teraz funkcję
requestApplyInsets()
po dołączeniu widoku fragmentu i bezpośrednio przed wywołaniem funkcjionViewCreated()
, aby zapewnić prawidłowe wstawienia w widoku. (b/135945162)
Poprawki błędów
- Rozwiązano błąd
NullPointerException
występujący podczas wyjmowaniaFragmentTransaction
, który używałsetPrimaryNavigationFragment()
przedreplace()
. (b/134673465)
Wersja 1.1.0
Wersja 1.1.0
5 września 2019 r.
Funkcje androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
i androidx.fragment:fragment-testing:1.1.0
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Ważne zmiany od wersji 1.0.0
- fragment-testing: artefakt
fragment-testing
udostępnia klasęFragmentScenario
do testowania fragmentu w izolacji. Więcej informacji znajdziesz w dokumentacji dotyczącej testowania fragmentów aplikacji. - FragmentFactory: teraz możesz ustawić
FragmentFactory
wFragmentManager
, aby zarządzać tworzeniem instancji fragmentu, co eliminuje rygorystyczne wymaganie konstruktora bez argumentów. - Obsługa właściwości w Kotlinie dla ViewModels: artefakt
fragment-ktx
zawiera teraz 2 obsługi właściwości w Kotlinie:by viewModels()
umożliwiającą dostęp do ViewModels powiązanych z poszczególnymi fragmentami orazby activityViewModels()
umożliwiającą dostęp do ViewModels ograniczonych do aktywności. - Maksymalny cykl życia: możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję
setMaxLifecycle()
w obiekcieFragmentTransaction
. Zastępuje ona wycofany protokółsetUserVisibleHint()
.FragmentPagerAdapter
iFragmentStatePagerAdapter
mają nowego konstruktora, który umożliwia przejście na nowe działanie. - Konstruktor FragmentActivity LayoutId: podklasy
FragmentActivity
mogą teraz opcjonalnie wywoływać konstruktor wFragmentActivity
, który przyjmuje identyfikatorR.layout
, wskazując układ, który powinien zostać ustawiony jako widok treści, jako alternatywę dla wywołaniasetContentView()
wonCreate()
. Nie zmienia to jednak wymagań dotyczących konstruktora bez argumentów w podklasie. - Konstruktor Fragment LayoutId: podklasy klasy
Fragment
mogą teraz opcjonalnie wywoływać konstruktor klasyFragment
, który przyjmuje identyfikatorR.layout
, wskazując układ, którego należy użyć w przypadku tego fragmentu, zamiast zastępowaćonCreateView()
. Rozwinięty układ można skonfigurować wonViewCreated()
. - Opóźnienie z czasem oczekiwania: dodano nowe przeciążenie
postponeEnterTransition()
, które powoduje przerwę w obsługiwaniu zapytania.
Wersja 1.1.0-rc04
7 sierpnia 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
i androidx.fragment:fragment-testing:1.1.0-rc04
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Fragmenty są teraz prawidłowo anulowane w przypadku opóźnionych przejść w przypadku fragmentów, które zostały wyświetlone. (b/138251858)
Wersja 1.1.0-rc03
19 lipca 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
i androidx.fragment:fragment-testing:1.1.0-rc03
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że wywołanie funkcji
postponeEnterTransition()
z czasem oczekiwania więcej niż raz nie anulowało poprzednich czasów oczekiwania. (b/137797118)
Wersja 1.1.0-rc02
17 lipca 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
i androidx.fragment-testing:fragment:1.1.0-rc02
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Naprawiliśmy błąd powodujący awarię w funkcjach
FragmentPagerAdapter
iFragmentStatePagerAdapter
podczas usuwania bieżącego elementu. (b/137209870)
Wersja 1.1.0-rc01
2 lipca 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
i androidx.fragment:fragment-testing:1.1.0-rc01
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Fragmenty są teraz prawidłowo aktualizowane pod względem widoczności podczas wykonywania operacji
show()
lubhide()
w trakcie trwania przejścia. (b/133385058) - Rozwiązano błąd
NullPointerException
występujący podczas wyjmowaniaFragmentTransaction
, który używałsetPrimaryNavigationFragment()
przedreplace()
. (b/134673465)
Wersja 1.1.0-beta01
5 czerwca 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
i androidx.fragment:fragment-testing:1.1.0-beta01
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- wywołania
androidx.lifecycle.Lifecycle
(szczególnie te związane z funkcjamiSTARTED
,RESUMED
,PAUSED
,STOPPED
iDESTROYED
) w zagnieżdżonych fragmentach są teraz prawidłowo zagnieżdżone. (b/133497591) - instancje
OnBackPressedCallback
zarejestrowane wonCreate()
fragmentu mają teraz prawidłowo pierwszeństwo przed podrzędnym FragmentManagerem. (b/133175997) - Fragmenty podrzędne nie są już animowane, gdy ich fragment nadrzędny jest zastępowany. (b/121017790)
- Animacje i przejścia fragmentów są teraz ignorowane podczas korzystania z
animateLayoutChanges="true"
. Rozwiązaliśmy problem polegający na tym, że fragmenty nie były prawidłowo usuwane. (b/116257087)
Wersja 1.1.0-alpha09
16 maja 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
i androidx.fragment:fragment-testing:1.1.0-alpha09
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Gdy fragment nawigacji podstawowej ulegnie zmianie, fragmenty będą teraz otrzymywać wywołanie zwrotne do nowej metody
onPrimaryNavigationFragmentChanged(boolean)
. aosp/960857
Poprawki błędów
- Elementy menu utworzone przez element podrzędny są teraz prawidłowo usuwane, gdy usuniesz element nadrzędny. b/131581013
Wersja 1.1.0-alpha08
7 maja 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
i androidx.fragment:fragment-testing:1.1.0-alpha08
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Ta wersja jest niezgodna z Preferences 1.1.0-alpha01 do 1.1.0-alpha04. Jeśli używasz tej wersji Fragments, zaktualizuj Preferencje do wersji 1.1.0-alpha05.
Nowe funkcje
- Dodano nową przeciążenie funkcji
postponeEnterTransition()
, która po przekroczeniu limitu czasu automatycznie wywołuje funkcjęstartPostponedEnterTransition()
b/120803208
Zmiany w interfejsie API
- Zmiana wprowadzająca nowe zachowanie: wycofana wcześniej metoda
FragmentFactory
instantiate
, która przyjmowała argumentBundle
, została usunięta. aosp/953856 - Zmiana powodująca przerwanie działania: stałe
RESUME_ONLY_CURRENT_FRAGMENT
iUSE_SET_USER_VISIBLE_HINT
w funkcjachFragmentPagerAdapter
iFragmentStatePagerAdapter
zostały odpowiednio przemianowane naBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
iBEHAVIOR_SET_USER_VISIBLE_HINT
. aosp/954782
Poprawki błędów
- Fragmenty, których cykl życia został ograniczony za pomocą
setMaxLifecycle()
, nie są już wznawiane przed osiągnięciem ich ostatecznego stanu. b/131557151 - Gdy używasz
setMaxLifecycle(Lifecycle.State.CREATED)
, widok fragmentów zostanie prawidłowo usunięty. aosp/954180
Wersja 1.1.0-alpha07
25 kwietnia 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
i androidx.fragment:fragment-testing:1.1.0-alpha07
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję
setMaxLifecycle()
w obiekcieFragmentTransaction
. Zastępuje ona wycofany protokółsetUserVisibleHint()
.FragmentPagerAdapter
iFragmentStatePagerAdapter
mają nowego konstruktora, który umożliwia przejście na nowe działanie. (b/129780800)
Zmiany w interfejsie API
- Metoda
moveToState(STARTED)
wFragmentScenario
może być teraz wywoływana tylko na urządzeniach z poziomem interfejsu API 24 lub nowszym. (b/129880016)
Zmiany w zachowaniu
- W efekcie (b/129907905) fragmenty na stosie nie będą otrzymywać wywołania do
onCreateView()
, gdy zostanie ponownie utworzona aktywność hosta. FunkcjaonCreateView()
będzie teraz wywoływana tylko wtedy, gdy fragment stanie się widoczny (czyli zostanie odrzucony element z poziomu stosu).
Poprawki błędów
- Naprawiliśmy błąd związany z używaniem w XML tagu
<fragment>
i konstruktoracontentLayoutId
klasyFragmentActivity
lubAppCompatActivity
. (b/129907905) - Rozwiązaliśmy problem, który powodował, że fragmenty na stosie nie były przenoszone do co najmniej
CREATED
po zmianie konfiguracji, co powodowało, że nie można było prawidłowo usunąć widoków ViewModel i podrzędnych fragmentów. (b/129593351) - Rozwiązaliśmy problem z zawieszaniem się
restoreSaveState
spowodowany przez rozbieżność zachowanych fragmentów po zapisaniu stanu instancji. (b/130433793) (aosp/947824) - Rozwiązaliśmy problemy, które powodowały, że funkcja
OnBackPressedCallback
dodana za pomocą cyklu życia fragmentu nie była wywoływana, jeśliFragmentManager
miała podwójną pamięć podręczną. Więcej informacji znajdziesz w androidx.activity 1.0.0-alpha07. (aosp/948209) - Fragmenty nie wymagają już
LAYER_TYPE_HARDWARE
w przypadku animacji. Jeśli potrzebujesz animacji warstwy sprzętowej, ustaw ją jako część animacji. (b/129486478)
Wersja 1.1.0-alpha06
3 kwietnia 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
i androidx.fragment:fragment-testing:1.1.0-alpha06
są dostępne. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Wyjątki zgłaszane przez FragmentManager zawierają teraz w komunikacie nazwę fragmentu. (b/67759402)
Zmiany w interfejsie API
Fragment
iFragmentActivity
zawierają teraz drugi konstruktor, który przyjmuje parametr@LayoutRes int
. Zastępuje on poprzednie zachowanie polegające na adnotowaniu klasy za pomocą@ContentView
. To podejście działa zarówno w przypadku modułów aplikacji, jak i bibliotek. (b/128352521)- Metoda
onActivityResult()
klasy FragmentActivity jest teraz prawidłowo oznaczona jako@CallSuper
. (b/127971684) - Metoda FragmentFactory
instantiate
, która przyjmuje argument Bundle, została wycofana. Aplikacje powinny używać nowego przeciążeniainstantiate
, które nie przyjmuje argumentu Bundle. (b/128836103) - Metody
FragmentScenario
są teraz odpowiednio oznaczone za pomocą@StyleRes
. (aosp/924193) - Środowisko wykonawcze
FragmentTabHost
zostało wycofane. (b/127971835) - Metoda
getThemedContext()
klasy FragmentActivity została usunięta. (aosp/934078)
Poprawki błędów
- Naprawiliśmy regresję w wersji 1.1.0-alpha05, która powodowała miganie na ekranie przychodzącego fragmentu. (b/129405432)
- Rozwiązaliśmy problem polegający na tym, że główny fragment nawigacji był tracony po serii operacji popBackStack+replace+popBackStack. (b/124332597)
- Rozwiązaliśmy problem z użyciem konstruktorów
@ContentView
w Twojej aktywności podczas przywracania stanu fragmentu. (b/127313094) - Poprawiliśmy logikę funkcji
setTargetFragment()
, gdy zastępuje ona istniejący docelowy fragment kodem Fragment, który nie jest jeszcze dołączony do FragmentManagera. (aosp/932156)
Wersja 1.1.0-alpha05
13 marca 2019 r.
Funkcje androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
i androidx.fragment:fragment-testing:1.1.0-alpha05
są dostępne. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.
Nowe funkcje
- wyszukiwania adnotacji
@ContentView
są teraz przechowywane w pamięci podręcznej (b/123709449).
Zmiany w zachowaniu
- Wywoływanie funkcji
remove()
,hide()
,show()
,detach()
isetPrimaryNavigationFragment()
z Fragmentem dołączonym do innego FragmentManagera powoduje teraz wyjątekIllegalStateException
, a nie milczące niepowodzenie (aosp/904301)
Poprawki błędów
- Element
onNewIntent
w profiluFragmentActivity
jest teraz prawidłowo oznaczony jako@CallSuper
(b/124120586) - Rozwiązanie problemu polegającego na tym, że funkcja
onDismiss()
wDialogFragment
mogła zostać wywołana dwukrotnie podczas korzystania z funkcjigetDialog().dismiss()
lubgetDialog().cancel()
(b/126563750)
Wersja 1.1.0-alpha04
7 lutego 2019 r.
Funkcje androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
i androidx.fragment:fragment-testing 1.1.0-alpha04
są dostępne.
Nowe funkcje
- Dodaliśmy obsługę adnotacji klasy
@ContentView
, która umożliwia wskazanie, który plik XML układu należy napompować jako alternatywę dla zastąpieniaonCreateView()
. Zalecamy wyświetlanie powiązanych prac wonViewCreated()
. (aosp/837619) fragment-testing
zależy teraz od stabilnej wersjiandroidx.test:core-ktx
1.1.0 (b/121209673).- Możesz teraz używać
openActionBarOverflowOrOptionsMenu
zFragmentScenario
, aby testować menu opcji hostowanych w fragmentach (b/121126668).
Zmiany w interfejsie API
- Dodano metodę
requireArguments()
, która zwraca@NonNull Bundle
lub rzuca wyjątekIllegalStateException
(b/121196360). - Dodano informację, że parametry
getLifecycle()
,getViewLifecycleOwner()
igetViewLifecycleOwnerLiveData()
nie powinny być zastępowane i będą ostateczne w przyszłej wersji. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880714) - Dodano informację, że
getViewModelStore()
nie powinno być zastępowane i zostanie ostatecznie zastąpione w przyszłej wersji. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880713) - Wyeliminowano problem ze zgodnością binarną z poprzednimi wersjami Fragments. (aosp/887877) (aosp/889834)
Poprawki błędów
- Fragmenty docelowe są prawidłowo usuwane, gdy przekazujesz
null
dosetTargetFragment()
. (aosp/849969) - Rozwiązaliśmy problem polegający na tym, że elementy docelowego Fragmentu niekiedy były niedostępne w ramach lub po
onDestroy()
. (b/122312935) - Metoda onDismiss() fragmentu DialogFragment jest teraz wywoływana przed
onDestroy()
. (aosp/874133) (aosp/890734)
Wersja 1.1.0-alpha03
17 grudnia 2018 r.
Nowe funkcje
- Fragment implementuje teraz
BundleSavedStateRegistryOwner
i jest zależny od nowo wydanej biblioteki SavedState [aosp/824380] - Dodano obiekt delegowany
by activityViewModels
w usłudze Kotlin, aby pobierać modele ViewModel powiązane z zawierającą je aktywnością [b/119050253] - Delegat właściwości
by viewModels
w Kotlinie został rozszerzony o opcjonalną metodę lambda służącą do uzyskiwania wartościViewModelStoreOwner
. Dzięki temu możesz przekazywać fragment nadrzędny lub inną niestandardową wartośćViewModelStoreOwner
za pomocą kodu takiego jakval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
Zmiany w interfejsie API
FragmentScenario
pozwala teraz określić motyw, np.Theme.AppCompat
[b/119054431]. To jest zmiana powodująca niezgodność.- Dodano metodę
requireView()
, która zwraca@NonNull View
lub rzuca wyjątekIllegalStateException
[b/120241368] - Dodano metodę
requireParentFragment()
, która zwraca@NonNull Fragment
lub rzuca wyjątekIllegalStateException
[b/112103783]
Poprawki błędów
- Naprawiono błąd IllegalStateException: Failure saving state b/120814739
- Fragmenty przywracane ze stanu zapisanej instancji będą teraz zawsze zawierać niezerową wartość
Bundle
[b/119794496] - Usuwane fragmenty nie używają ponownie obiektu
Lifecycle
, jeśli zostanie on ponownie dodany [b/118880674]
Wersja 1.1.0-alpha02
3 grudnia 2018 r.
Nowe funkcje
- Rozszerzenia Kotlina dla FragmentScenario umożliwiają teraz używanie funkcji lambda do tworzenia fragmentów zamiast przekazywania instancji
FragmentFactory
. (aosp/812913)
Poprawki błędów
- Usunięto błąd IllegalStateException podczas używania zagnieżdżonych fragmentów na stosie wstecz (b/119256498).
- Usunięto awarię występującą podczas używania funkcji
FragmentScenario.recreate()
z funkcjąFragmentFactory
(aosp/820540). - Rozwiązaliśmy problem polegający na tym, że po usunięciu fragmentu nie można było uzyskać dostępu do docelowych fragmentów (aosp/807634).
Wersja 1.1.0-alpha01
5 listopada 2018 r.
To pierwsza wersja artefaktu fragment-testing
i interfejsu FragmentScenario
, który jest oparty na interfejsach androidx.test:core. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją dotyczącą testowania fragmentów.
Nowe funkcje
- Nowa klasa FragmentScenario do testowania fragmentów w pojedynkę.
- Możesz teraz ustawić
FragmentFactory
w dowolnymFragmentManager
, aby kontrolować sposób tworzenia nowych instancji fragmentu. - Dodaliśmy nowy obiekt
by viewModels()
, który jest delegatem właściwości w Kotlinie i służy do pobierania widoków modelu z fragmentu. - Oczekujące zdarzenia wejściowe (np. kliknięcia) są teraz anulowane w elementach
onStop()
fragmentu.
Zmiany w interfejsie API
- znacznie rozszerzyliśmy adnotacje dotyczące możliwości wystąpienia wartości null w interfejsie Fragment API.
Poprawki błędów
- Rozwiązano problem, który powodował niepowodzenia operacji fragmentów w LiveData.(b/77944637)
Znane problemy
- Po usunięciu fragmentu z FragmentManagera nie można uzyskać dostępu do elementów docelowych.
- Wartość
fragment-testing
zależy od wartościandroidx.test:core:1.0.0-beta01
, a nie od prawidłowej wartościandroidx.test:core:1.0.0
.