Fragment
Najnowsza aktualizacja | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
24 lipca 2024 r. | 1.8.2 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od fragmentu, musisz dodać repozytorium Google Maven do swojego w projektach AI. Zapoznaj się z repozytorium Google Maven. .
Dodaj zależności artefaktów, których potrzebujesz w pliku build.gradle
aplikacji lub modułu:
Odlotowe
dependencies { def fragment_version = "1.8.2" // 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.2" // 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ć Jetpack. Daj nam znać, jeśli odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.
Zobacz dokumentację narzędzia Issue Tracker. .
Wersja 1.8
Wersja 1.8.2
24 lipca 2024 r.
Usługa androidx.fragment:fragment-*:1.8.2
została zwolniona. Wersja 1.8.2 zawiera te zatwierdzenia.
Poprawki błędów
AndroidFragment
teraz prawidłowo obsługuje przypadki, w których fragment nadrzędny został umieszczony na stosie części z fragmentami z tyłu, co pozwala uniknąć komunikatu „Nie znaleziono widoku dla identyfikatora”. problemów przy powrocie do danego fragmentu. (I94608)- Fragmenty dodane za pomocą metody
FragmentTransaction.add
, która wymagaViewGroup
, czekają teraz naonContainerAvailable
, zanim przejdą doonStart()
. Dotyczy to użytkowników tego interfejsu API, takiego jakAndroidFragment
, który teraz czeka, ażAndroidFragment
ponownie włączy kompozycję, zanim przesunie ją przezonStart()
. (I94608)
Wersja 1.8.1
26 czerwca 2024 r.
Usługa androidx.fragment:fragment-*:1.8.1
została zwolniona. Wersja 1.8.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że przy uruchamianiu gestu przewidywania tekstu wstecznego fragmenty bez kontenera miały stan
DESTROYED
. Teraz są w stanieCREATED
do czasu zakończenia gestu. (If6b83, b/345244539)
Wersja 1.8.0
12 czerwca 2024 r.
Usługa androidx.fragment:fragment-*:1.8.0
została zwolniona. Wersja 1.8.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.7.0
- Artefakt
fragment-compose
zawiera teraz elementComposable
AndroidFragment
, który umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentów. Automatycznie obsługuje zapisywanie i przywracanie stanu fragmentu. Powinno to być bezpośrednie zastąpienie wcześniej zalecanego sposobu korzystania z funkcjiAndroidViewBinding
do rozszerzania fragmentu kodu. - Wywołanie zwrotne
onBackStackChangeCancelled
w interfejsieOnBackStackChangedListener
interfejsuFragmentManager
jest teraz uruchamiane w ramach operacji wykonywania wFragmentManager
. Jego ruch jest przybliżony do czasu wywołania zwrotnegoonBackStackChangeCommitted
.
Wersja 1.8.0-rc01
29 maja 2024 r.
Usługa androidx.fragment:fragment-*:1.8.0-rc01
została zwolniona. Wersja 1.8.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Wywołanie zwrotne
onBackStackChangeCancelled
w interfejsieFragmentManagers OnBackStackChangedListener
jest teraz uruchamiane w ramach operacji wykonywania wFragmentManager
, przybliżając je zgodnie z czasem wywołania zwrotnegoonBackStackChangeCommitted
. (I5ebfb, b/332916112)
Wersja 1.8.0-beta01
14 maja 2024 r.
Usługa androidx.fragment:fragment-*:1.8.0-beta01
została zwolniona. Wersja 1.8.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Od fragmentu
1.7.1
: prognozowanie wstecz będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają przejście w postaci animacji lub przewijania Androidx. Rozwiązano problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie czarnego ekranu. (I43037, b/339169168)
Wersja 1.8.0-alpha02
17 kwietnia 2024 r.
Usługa androidx.fragment:fragment-*:1.8.0-alpha02
została zwolniona. Wersja 1.8.0-alfa02 zawiera te zatwierdzenia.
Poprawki błędów
- Z fragmentu
1.7.0-rc02
: dodano logi wskazujące, dlaczego ustawieniesharedElement
bez innych przejść nie uda się uruchomić. (Iec48e). - Z fragmentu
1.7.0-rc02
: naprawiliśmy błąd polegający na tym, że w przypadku dodania niewidocznego udostępnionego elementu do transakcji, w których można było przewijać wszystkie pozostałe przejścia, dochodziło do awarii. Teraz transakcja będzie słusznie uznawana za nieoczekiwaną. (I18ccd)
Wersja 1.8.0-alpha01
3 kwietnia 2024 r.
Usługa androidx.fragment:fragment-*:1.8.0-alpha01
została zwolniona. Wersja 1.8.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Nowa funkcja
AndroidFragment
Composable
umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentów. Automatycznie obsługuje zapisywanie i przywracanie stanu fragmentu. Można go użyć jako bezpośredniego zamiennika obiektu AndroidViewBindingComposable
.(b/312895363, Icf841).
Zmiany w dokumentacji
- Zaktualizowaliśmy dokumentację interfejsów API
OnBackStackChangedListener
, aby wskazać, kiedy są one wywoływane i jak należy ich używać. (I0bfd9)
Aktualizacja zależności
- Fragment jest teraz zależny od instalatora profilu 1.3.1.
Wersja 1.7
Wersja 1.7.1
14 maja 2024 r.
Usługa androidx.fragment:fragment-*:1.7.1
została zwolniona. Wersja 1.7.1 zawiera te zatwierdzenia.
Poprawki błędów
- Przewidywanie wsteczne będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają Animator lub Seekable Przejście z Androida. Rozwiązano problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie pustego ekranu. (I43037, b/339169168)
Wersja 1.7.0
1 maja 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0
została zwolniona. Wersja 1.7.0 zawiera te zatwierdzenia.
Przewidywanie gestów pleców
- Fragmenty kodu obsługują teraz przewidywanie reklam w aplikacji, gdy korzystasz z
Animator
lub przejścia z AndroidaX w wersji 1.5.0. Dzięki temu użytkownik może użyć gestu cofania, aby zobaczyć poprzedni fragment. Wystarczy, że przewiniesz animację lub przejście, zanim zdecyduje się zrealizować transakcję przez wykonanie gestu lub anulowanie.
System przenoszenia | Zasób XML | Obsługuje predykcyjne plecy |
---|---|---|
Animation |
R.anim |
Nie |
Animator |
R.animator |
Tak |
Platforma Transition |
R.transition |
Nie |
AndroidX Transition z przejściem na wersję 1.4.1 lub starszą |
R.transition |
Nie |
AndroidX Transition z przejściem na wersję 1.5.0 |
R.transition |
Tak |
Jeśli po włączeniu gestu przewidywania tekstu wstecznego zauważysz problemy z obsługą funkcji przewidywania tekstu Wstecz w fragmentach kodu we fragmentach, zgłoś problem dotyczący fragmentu, dołączając przykładowy projekt, który odzwierciedla Twój problem. Aby wyłączyć prognozowanie wsteczne, użyj funkcji FragmentManager.enabledPredictiveBack(false)
w sekcji onCreate()
aktywności.
FragmentManager.OnBackStackChangedListener()
udostępnia teraz funkcje onBackStackChangeProgressed()
i onBackStackChangeCancelled()
do otrzymywania odpowiednio zdarzeń związanych z przewidywanym postępem wstecznym i zdarzeń anulowanych.
Fragment kodu tworzenia wiadomości
Wprowadziliśmy nowy artefakt fragment-compose
skupiający się na obsłudze aplikacji, które są w trakcie przechodzenia z architektury opartej na fragmentach na architekturę w pełni opartą na Compose.
Pierwszą funkcją dostępną w tym nowym artefaktie jest metoda rozszerzenia content
w Fragment
. Jej celem jest ułatwienie korzystania z funkcji tworzenia wiadomości w interfejsie użytkownika danego fragmentu przez utworzenie dla Ciebie ComposeView
i ustawienie właściwej wartości ViewCompositionStrategy
.
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Wersja 1.7.0-rc02
17 kwietnia 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0-rc02
została zwolniona. Wersja 1.7.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Dodaliśmy logi wskazujące, dlaczego ustawienie zasady
sharedElement
bez żadnych innych przeniesień nie uda się uruchomić. (Iec48e). - Naprawiono błąd polegający na tym, że w przypadku dodania niewyszukanego udostępnionego elementu do transakcji, w których można było przewijać wszystkie pozostałe przejścia, powodowała się awaria. Teraz transakcja będzie słusznie uznawana za nieoczekiwaną. (I18ccd)
Wersja 1.7.0-rc01
3 kwietnia 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0-rc01
została zwolniona. Wersja 1.7.0-rc01 zawiera te zatwierdzenia.
Aktualizacja zależności
- Fragment jest teraz zależny od instalatora profilu 1.3.1.
Wersja 1.7.0-beta01
20 marca 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0-beta01
została zwolniona. Wersja 1.7.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Funkcja
FragmentHostCallback
jest teraz pisana w Kotlin tak, aby wartość null typu ogólnego typu hosta odpowiadała dopuszczalności wartości null zwracanego typuonGetHost()
. (I40af5).
Poprawki błędów
- Naprawiono błąd, który powodował, że w przypadku wykonania gestu przewidywania tekstu wstecz w przypadku fragmentu, który nie znajduje się w kontenerze, taki fragment nigdy nie został zniszczony. Fragment zostanie natychmiast przeniesiony do stanu ostatecznego. (Ida0d9).
- Naprawiono błąd we fragmentach „Fragmenty”, który powodował, że przerywanie przychodzących przejść gestem przewidywania skutkowało zniszczeniem widoku wejściowego i pozostawaniem pustego ekranu. (Id3f22, b/319531491)
Wersja 1.7.0-alpha10
7 lutego 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha10
została zwolniona. Wersja 1.7.0-alfa10 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono znany błąd w poprzedniej wersji fragmentu, w którym przy korzystaniu z obsługi prognozowanej wstecznie fragmentu w
Animator
lub AndroidX były zgłaszane żądaniaNullPointerException
zhandleOnBackProgressed
, jeśli za pomocąaddOnBackStackChangedListener
nie dodano żadnego elementuFragmentManager.OnBackStackChangedListener
. (I7c835)
Wersja 1.7.0-alpha09
24 stycznia 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha09
została zwolniona. Wersja 1.7.0-alpha09 zawiera te zatwierdzenia.
Fragment kodu tworzenia wiadomości
Wprowadziliśmy nowy artefakt fragment-compose
skupiający się na obsłudze aplikacji, które są w trakcie przechodzenia z architektury opartej na fragmentach na architekturę w pełni opartą na Compose.
Pierwszą funkcją dostępną w tym nowym artefaktie jest metoda rozszerzenia content
w Fragment
. Jej celem jest ułatwienie korzystania z funkcji tworzenia wiadomości w interfejsie użytkownika danego fragmentu przez utworzenie dla Ciebie ComposeView
i ustawienie właściwej wartości ViewCompositionStrategy
. (561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Nowe funkcje
FragmentManager.OnBackStackChangedListener()
udostępnia teraz funkcjeonBackStackChangeProgressed()
ionBackStackChangeCancelled()
do otrzymywania odpowiednio zdarzeń związanych z przewidywanym postępem wstecznym i zdarzeń anulowanych. (214b87)
Znany problem
- Gdy używasz obsługi prognozowania Wstecz z użyciem fragmentu kodu
Animator
lub przejścia z AndroidaX, fragment kodu zgłaszaNullPointerException
zhandleOnBackProgressed
, jeśli waddOnBackStackChangedListener
nie dodano jeszcze żadnego elementuFragmentManager.OnBackStackChangedListener
. Ręczne dodanie detektora rozwiąże problem. Poprawka dla tego problemu będzie dostępna w następnej wersji fragmentu kodu.
Wersja 1.7.0-alpha08
10 stycznia 2024 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha08
została zwolniona. Wersja 1.7.0-alfa08 zawiera te zatwierdzenia.
Czyszczenie danych
- Usunięto obejście biblioteki przenoszenia, która została naprawiona w przeniesieniu
1.5.0-alpha06
. (I04356)
Wersja 1.7.0-alpha07
29 listopada 2023 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha07
została zwolniona. Wersja 1.7.0-alfa07 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono
NullPointerException
powodowany przez ustawienie przejścia dla udostępnianego elementu oraz brak możliwości ustawienia wejścia/wyjścia. (I8472b) - Z fragmentu
1.6.2
: gdy fragment koduFragmentContainerView
jest zawyżony, jego stany, takie jakFragmentManager
, Host i identyfikator, są teraz dostępne w wywołaniu zwrotnymonInflate
. (I1e44c, b/307427423) - Z fragmentu
1.6.2
: jeśli używaszclearBackStack
do usunięcia zestawu fragmentów, wszystkie fragmentyViewModel
zagnieżdżonego fragmentu zostaną wyczyszczone po wyczyszczeniuViewModels
fragmentu nadrzędnego. (I6d83c, b/296173018)
Wersja 1.7.0-alpha06
4 października 2023 roku
Usługa androidx.fragment:fragment-*:1.7.0-alpha06
została zwolniona. Wersja 1.7.0-alfa06 zawiera te zatwierdzenia.
Aktualizacja zależności
- Fragmenty kodu zostały zaktualizowane, aby korzystać z nowego interfejsu API
animateToStart
dodanego w przejściu1.5.0-alpha04
.
Wersja 1.7.0-alpha05
20 września 2023 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha05
została zwolniona. Wersja 1.7.0-alfa05 zawiera te zatwierdzenia.
Nowe funkcje
- Fragmenty umożliwiają teraz korzystanie z prognozowania podczas korzystania z przejścia Androidax. Dzięki temu możesz użyć gestu cofania, aby przewinąć do poprzedniego fragmentu przy użyciu własnego przejścia Androidx, zanim zdecydujesz się zatwierdzić lub anulować transakcję za pomocą ukończonego gestu. Aby włączyć tę funkcję, musisz polegać na przeniesieniu
1.5.0-alpha03
. (Ib49b4, b/285175724)
Znane problemy
- Obecnie występuje problem, który polega na tym, że po jednorazowym anulowaniu gestu cofnięcia z przejściem następnym razem, gdy uruchomisz gest cofania, przejście nie zostanie wykonane, przez co ekran stanie się pusty. Może to być spowodowane problemem w bibliotece przejść. (b/300157785). Jeśli zauważysz ten problem, zgłoś problem dotyczący fragmentu kodu Fragment, podając przykładowy projekt, który go odtwarza. Aby wyłączyć prognozowanie wsteczne, użyj funkcji
FragmentManager.enabledPredictiveBack(false)
w sekcjionCreate()
aktywności.
Wersja 1.7.0-alpha04
6 września 2023 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha04
została zwolniona. Wersja 1.7.0-alfa04 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z anulowaniem gestu przewidywania tekstu wstecznego, który powodował, że fragment kodu nie zapewniał prawidłowego stanu cyklu życia. (I7cffe, b/297379023)
- Naprawiono regresje, w przypadku których można było uruchamiać animacje z przejściami. (I59f36)
- Naprawiono błąd polegający na tym, że w przypadku fragmentów z prognozowaniem wstecznym próbą cofnięcia się w krótkich odstępach czasu od drugiego do ostatniego fragmentu z tylnego stosu prowadziła do awarii. (Ifa1a4).
Wersja 1.7.0-alpha03
23 sierpnia 2023 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha03
została zwolniona. Wersja 1.7.0-alfa03 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z fragmentami z fragmentami z powrotem, który powodował, że pierwszy fragment w stosunku wstecznym menedżera fragmentów był pomijany, a działanie kończyło się w przypadku powrotu do systemu za pomocą 3 przycisków lub gestu przewidywania. (I0664b, b/295231788)
Wersja 1.7.0-alpha02
9 sierpnia 2023 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha02
została zwolniona. Wersja 1.7.0-alfa02 zawiera te zatwierdzenia.
Poprawki błędów
- Jeśli używasz fragmentów z funkcją przewidywania gestów Wstecz z interfejsu API 34, a korzystasz z systemu przejścia, który nie obsługuje przewijania (
Animations
,Transitions
) lub nie obsługuje żadnych przejść, przed wykonaniem działania cofania fragmenty czekają teraz na zakończenie gestu. (I8100C)
Wersja 1.7.0-alpha01
7 czerwca 2023 r.
Usługa androidx.fragment:fragment-*:1.7.0-alpha01
została zwolniona. Ta wersja jest opracowana w gałęzi wewnętrznej.
Nowe funkcje
- Fragmenty kodu obsługują teraz prognozowanie w aplikacji przy korzystaniu z funkcji
Animator
. Dzięki temu możesz użyć gestu cofania, aby zobaczyć poprzedni fragment w niestandardowym animatorze, zanim zdecydujesz, czy chcesz zrealizować transakcję za pomocą ukończonego gestu, czy ją anulować. Możesz też wyłączyć to nowe zachowanie, korzystając z eksperymentuenablePredictiveBack()
i przekazywania w celufalse
.
Wersja 1.6
Wersja 1.6.2
1 listopada 2023 roku
Usługa androidx.fragment:fragment-*:1.6.2
została zwolniona. Wersja 1.6.2 zawiera te zatwierdzenia.
Poprawki błędów
- Gdy fragment kodu
FragmentContainerView
jest zawyżony, jego stany, takie jakFragmentManager
, Host i identyfikator, są teraz dostępne w wywołaniu zwrotnymonInflate
. (I1e44c, b/307427423) - Jeśli używasz elementu
clearBackStack
do usunięcia zestawu fragmentów, wszystkie elementyViewModel
zagnieżdżonego fragmentu zostaną wyczyszczone, gdy wyczyszczonoViewModels
fragmentu nadrzędnego. (I6d83c, b/296173018)
Wersja 1.6.1
26 lipca 2023 r.
Usługa androidx.fragment:fragment-*:1.6.1
została zwolniona. Wersja 1.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że zapisany stan, gdy aktywność została zatrzymana, ale nie została zniszczona, był niewłaściwie buforowany nawet po przywróceniu wystąpienia fragmentu do stanu
RESUMED
. Spowodowałoby to ponowne użycie stanu z pamięci podręcznej, jeśli wystąpienie fragmentu znajdowało się w stosie wstecznym podczas korzystania z interfejsu API wielu stosów wstecznych do zapisywania i przywracania tego fragmentu. (I71288, b/246289075)
Aktualizacja zależności
- Fragment jest teraz zależny od Aktywności 1.7.2. Rozwiązano problem, który powodował, że użytkownicy Kotlin nie mogli rozszerzyć możliwości korzystania z
ComponentDialog
bez wyraźnej zależności od aktywności. (b/287509323)
Wersja 1.6.0
7 czerwca 2023 r.
Usługa androidx.fragment:fragment-*:1.6.0
została zwolniona. Wersja 1.6.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.5.0
- Zapisane stany
Fragment
zasobów zostały w całości podzielone między stan biblioteki prywatnej (niestandardowe klasyParcelable
) i stan podany przez dewelopera. Teraz jest on zawsze zapisywany w elemencieBundle
, który umożliwia dokładne określenie, skąd dokładnie pochodzi stan fragmentu. - Interfejs
FragmentManager.OnBackStackChangedListener
został rozszerzony o 2 dodatkowe wywołania zwrotneonBackStackChangeStarted
ionBackStackChangeCommitted
, które są wywoływane z każdym elementemFragment
tuż przed dodaniem ich do stosu fragmentów lub z nich bezpośrednio po zatwierdzeniu transakcji. - Operator
FragmentStrictMode
dodał nową wartośćWrongNestedHierarchyViolation
, która wykrywa, że fragment podrzędny jest zagnieżdżony w hierarchii widoków jej elementu nadrzędnego, ale nie został dodany do jego elementuchildFragmentManager
. - Interfejsy API
Fragment
iFragmentManager
, które przyjmująIntent
lubIntentSender
, są teraz odpowiednio oznaczone adnotacjami@NonNull
. Zapobiega to przekazywaniu wartości null jako wartości null, które zawsze powodowałyby natychmiastową awarię odpowiednich interfejsów API platformy Androida, do których wywoływały te metody. DialogFragment
zapewnia teraz dostęp do bazowego źródła danychComponentDialog
za pomocą interfejsu APIrequireComponentDialog()
.- Fragment zależy teraz od cyklu życia
2.6.1
. - Fragment korzysta teraz z parametru SavedState
1.2.1
. - Fragment jest teraz zależny od instalatora profili
1.3.0
. Artefakt
fragment-testing-manifest
oddziela wpisy manifestu od pozostałych komponentów do testowania fragmentów. Oznacza to, że możesz:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Pozwala to uniknąć konfliktów z powodu odchylenia wersji między
fragment-testing
aandroidx.test
Wersja 1.6.0-rc01
10 maja 2023 r.
Usługa androidx.fragment:fragment-*:1.6.0-rc01
została zwolniona. Wersja 1.6.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że w przypadku kilku kolejnych żądań
startActivityForResult
wysyłano żądaniaActivityResult
z nieprawidłowym kodem żądania. (If0b9d, b/249519359) - Rozwiązaliśmy problem, który powodował, że wywołania zwrotne
onBackStackChangeListener
były wysyłane w przypadku transakcji, które w rzeczywistości nie zmieniały tylnego stosu, jeśli były pomieszane z transakcjami, które tak robią. (I0eb5c, b/279306628)
Wersja 1.6.0-beta01
19 kwietnia 2023 r.
Usługa androidx.fragment:fragment-*:1.6.0-beta01
została zwolniona. Wersja 1.6.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Użycie elementu
postponeEnterTransition
z określonym czasem oczekiwania, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku przełożonego fragmentu. (I2ec7d, b/276375110) - Nowe wywołania zwrotne
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.
Usługa androidx.fragment:fragment-*:1.6.0-alpha09
została zwolniona. Wersja 1.6.0-alfa09 zawiera te zatwierdzenia.
Zmiany interfejsu API
DialogFragment
zapewnia teraz dostęp do bazowego źródła danychComponentDialog
za pomocą interfejsu APIrequireComponentDialog()
. (I022e3, b/234274777)- Fragmenty
commitNow()
,executePendingTransactions()
ipopBackStackImmediate()
API zostały oznaczone adnotacjami@MainThread
, co oznacza, że teraz wszystkie będą generować błędy kompilacji, jeśli nie zostaną wywołane z wątku głównego, i nie będą czekać na błąd w czasie działania. (IC9665, b/236538905)
Poprawki błędów
- Naprawiliśmy błąd w
FragmentManager
, który powodował, że zapisywanie i przywracanie w tej samej ramce mogło powodować awarię. (Ib36af, b/246519668) - Wywołania zwrotne
OnBackStackChangedListener
onBackStackChangeStarted
ionBackStackChangeCommitted
są teraz wykonywane tylko po zmianie stosu wstecznegoFragmentManager
. (I66055, b/274788957)
Wersja 1.6.0-alpha08
22 marca 2023 r.
Usługa androidx.fragment:fragment-*:1.6.0-alpha08
została zwolniona. Wersja 1.6.0-alfa08 zawiera te zatwierdzenia.
Zmiana działania
- Czas wywołania zwrotnego
OnBackStackChangedListener.onBackStackChangeCommited
został dostosowany tak, aby był wykonywany przed wykonaniem operacji na fragmentach. Dzięki temu wywołanie zwrotne nigdy nie zostanie przekazane odłączony fragment. (I66a76, b/273568280)
Poprawki błędów
- Z fragmentu
1.5.6
: naprawiliśmy problem polegający na tym, że wywołanieclearFragmentResultListener
w elemenciesetFragmentResultListener
nie działało, jeśliLifecycle
miał już wartośćSTARTED
, a wynik był już dostępny. (If7458).
Aktualizacje zależności
- Fragment zależy teraz od cyklu życia
2.6.1
. (586fe7) - Fragment korzysta teraz z parametru SavedState
1.2.1
. (078e4e) - Fragment jest teraz zależny od instalatora profili
1.3.0
. (3fc05b)
Wersja 1.6.0-alpha07
8 marca 2023 r.
Usługa androidx.fragment:fragment-*:1.6.0-alpha07
została zwolniona. Wersja 1.6.0-alfa07 zawiera te zatwierdzenia.
Poprawki błędów
- Z fragmentu
1.5.6
: naprawiliśmy problem polegający na tym, że usunięcie dowolnego fragmentu, niezależnie od tego, czy dodano do niego pozycje menu, skutkowało unieważnieniem menu aktywności. (50f098, b/244336571)
Wersja 1.6.0-alpha06
22 lutego 2023 roku
Usługa androidx.fragment:fragment-*:1.6.0-alpha06
została zwolniona. Wersja 1.6.0-alfa06 zawiera te zatwierdzenia.
Zmiana w działaniu
- Nowe wywołanie zwrotne
onBackStackChangedStarted
dla metodyonBackStackChangedListener
użytkownikaFragmentManager
będzie teraz wykonywane, zanim fragmenty zaczną przechodzić do stanów docelowych. (I34726)
Wersja 1.6.0-alpha05
8 lutego 2023 r.
Usługa androidx.fragment:fragment-*:1.6.0-alpha05
została zwolniona. Wersja 1.6.0-alfa05 zawiera te zatwierdzenia.
Nowe funkcje
- Interfejs
FragmentManager.OnBackStackChagnedListener
oferuje teraz 2 dodatkowe wywołania zwrotne,onBackStackChangeStarted
ionBackStackChangeCommitted
, które pozwalają uzyskać dodatkowe informacje i kontrolować czas wystąpienia zmian stosu wstecznego wFragmentManager
. (Ib7ce5, b/238686802)
Zmiany interfejsu API
- Interfejsy API
Fragment
iFragmentManager
, które przyjmują wartościIntent
lubIntentSender
, są teraz odpowiednio oznaczone adnotacjami@NonNull
. Zapobiega to przekazywaniu wartości null jako wartości null, które zawsze powodowałyby natychmiastową awarię odpowiednich interfejsów API platformy Androida, do których wywoływały te metody. (I06fd4)
Wersja 1.6.0-alpha04
7 grudnia 2022 r.
Usługa androidx.fragment:fragment-*:1.6.0-alpha04
została zwolniona. Wersja 1.6.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
- Operator
FragmentStrictMode
dodał nowy elementWrongNestedHierarchyViolation
, który wykrywa, że fragment podrzędny jest zagnieżdżony w hierarchii widoków jej elementu nadrzędnego, ale nie został dodany do jego elementuchildFragmentManager
. (I72521, b/249299268)
Zmiany w działaniu
- Fragmenty przywracają teraz stan
SavedStateRegistry
przedonAttach()
, dzięki czemu są dostępne ze wszystkich metod cyklu życia zwiększającego popularność. (I1e2b1).
Zmiany interfejsu API
- Artefakt
fragment-testing-manifest
oddziela wpisy manifestu od pozostałych komponentów do testowania fragmentów. Oznacza to, że możesz:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Pozwala to uniknąć konfliktów z powodu zniekształcenia wersji między fragment-testing
a androidx.test
.(I8e534, b/128612536)
Poprawki błędów
- Z fragmentu
1.5.5
: fragmenty nie będą już nieprawidłowo zapisywać stanuViewModel
w ramach stanu zapisanego rejestru widoków. (I10d2b, b/253546214)
Wersja 1.6.0-alpha03
5 października 2022 r.
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
i androidx.fragment:fragment-testing:1.6.0-alpha03
zostały udostępnione. Wersja 1.6.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Klasy z rozszerzeniem
DialogFragment
będą teraz musiały wywoływać funkcję Super w zastąpieniach typuonDismiss()
. (I14798, b/238928865)
Poprawki błędów
- Usunięto regresje spowodowane przez integrację nowych interfejsów wywołań zwrotnych nowego dostawcy (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
), aby fragmenty otrzymywały prawidłowe wywołania zwrotne. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
Wersja 1.6.0-alpha02
24 sierpnia 2022 r.
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
i androidx.fragment:fragment-testing:1.6.0-alpha02
zostały udostępnione. Wersja 1.6.0-alfa02 zawiera te zatwierdzenia.
Poprawki błędów
- Z fragmentu
1.5.2
: naprawiliśmy błąd polegający na tym, że jednoczesne wykonanie transakcjipopBackStack()
ireplace()
mogło powodować uruchamianie nieprawidłowych fragmentówAnimation
/Animator
podczas wyjścia. (Ib1c07, b/214835303)
Wersja 1.6.0-alpha01
27 lipca 2022 roku
androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
i androidx.fragment:fragment-testing:1.6.0-alpha01
zostały udostępnione. Wersja 1.6.0-alfa01 zawiera te zatwierdzenia.
Zmiany w działaniu
- Zapisane stany
Fragment
zasobów zostały w całości podzielone między stan biblioteki prywatnej (niestandardowe klasyParcelable
) i stan podany przez dewelopera. Teraz jest on zawsze zapisywany w elemencieBundle
, który umożliwia dokładne określenie, skąd dokładnie pochodzi stan fragmentu. (b/207158202)
Poprawki błędów
- Z fragmentu
1.5.1
: napraw regresję wDialogFragmentCallbacksDetector
, w której użycie wersji lint pakietu z pakietem AGP 7.4 powodowało awarię lint. (B/237567009)
Aktualizacja zależności
- Z Fragmentu
1.5.1
: biblioteka z fragmentami kodu korzysta teraz z cyklu życia2.5.1
. (Id204c). - Od Fragmentu
1.5.1
: biblioteka z fragmentami z krzyżykiem korzysta teraz z aktywności1.5.1
. (I10f07)
Wersja 1.5
Wersja 1.5.7
19 kwietnia 2023 r.
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
i androidx.fragment:fragment-testing:1.5.7
zostały udostępnione. Wersja 1.5.7 zawiera te zatwierdzenia.
Poprawki błędów
- Użycie elementu
postponeEnterTransition
z określonym czasem oczekiwania, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku przełożonego fragmentu. (I2ec7d, b/276375110)
Wersja 1.5.6
22 marca 2023 r.
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
i androidx.fragment:fragment-testing:1.5.6
zostały udostępnione. Wersja 1.5.6 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że usunięcie fragmentu (niezależnie od tego, czy dodano pozycje w menu, czy nie) skutkowało unieważnieniem menu aktywności. (50f098, b/244336571)
- Rozwiązaliśmy problem, który powodował, że wywołanie
clearFragmentResultListener
w elemenciesetFragmentResultListener
nie działało, jeśliLifecycle
miał już wartośćSTARTED
, a wynik był już dostępny. (If7458).
Wersja 1.5.5
7 grudnia 2022 r.
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
i androidx.fragment:fragment-testing:1.5.5
zostały udostępnione. Wersja 1.5.5 zawiera te zatwierdzenia.
Poprawki błędów
- Fragmenty nie będą już nieprawidłowo zapisywać stanu
ViewModel
w ramach stanu zapisanego rejestru widoków. (I10d2b, b/253546214)
Wersja 1.5.4
24 października 2022 r.
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
i androidx.fragment:fragment-testing:1.5.4
zostały udostępnione. Wersja 1.5.4 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd polegający na tym, że użycie niestandardowego elementu
FragmentController
z hostem bez implementacji interfejsu wywołania zwrotnego dostawcy (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) i wywołanie wycofanej funkcji wysyłania nie powodowało wysłania wiadomości do fragmentów podrzędnych. (I9B380)
Wersja 1.5.3
21 września 2022 r.
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
i androidx.fragment:fragment-testing:1.5.3
zostały udostępnione. Wersja 1.5.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że fragmenty stosu tylnego otrzymywały wywołania zwrotne
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
ionConfigurationChanged()
. (I34581, I8dfe6, b/242570955) - Zagnieżdżone fragmenty podrzędne nie będą już otrzymywać wielu wywołań zwrotnych
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
anionConfigurationChanged()
. (I690b3, Id0096, If9d6b, I2cba2)
Wersja 1.5.2
10 sierpnia 2022 r.
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
i androidx.fragment:fragment-testing:1.5.2
zostały udostępnione. Wersja 1.5.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że jednoczesne wykonanie transakcji
popBackStack()
ireplace()
mogło powodować, że fragmenty wyjściowe uruchamiały nieprawidłowyAnimation
/Animator
. (Ib1c07, b/214835303)
Wersja 1.5.1
27 lipca 2022 roku
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
i androidx.fragment:fragment-testing:1.5.1
zostały udostępnione. Wersja 1.5.1 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw regresję w
DialogFragmentCallbacksDetector
, w której użycie wersji lint pakietu z pakietem AGP 7.4 powodowało awarię lint. (B/237567009)
Aktualizacja zależności
- Biblioteka fragmentów kodu korzysta teraz z cyklu życia
2.5.1
. (Id204c). - Biblioteka fragmentów kodu korzysta teraz z aktywności
1.5.1
. (I10f07)
Wersja 1.5.0
29 czerwca 2022 r.
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
i androidx.fragment:fragment-testing:1.5.0
zostały udostępnione. Wersja 1.5.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.4.0
- Integracja dodatków do tworzenia –
Fragment
może teraz udostępniać bezstanoweViewModelProvider.Factory
za pomocą funkcjiCreationExtras
w cyklu życia2.5.0
. - Integracja okna dialogowego komponentu –
DialogFragment
używa teraz elementuComponentDialog
w ramach Aktywności1.5.0
jako domyślnego okna dialogowego zwracanego przez aplikacjęonCreateDialog()
. - Refaktoryzacja stanu zapisanej instancji – fragmenty zaczęły zmieniać sposób zapisywania stanu instancji. Ma to pomóc w jasnym zidentyfikowaniu stanu zapisanego we fragmencie oraz jego źródła. Bieżące zmiany obejmują:
FragmentManager
zapisuje teraz zapisany stan instancji wBundle
, a nie bezpośrednio w niestandardowymParcelable
.- Wyniki ustawione przez
Fragment Result APIs
, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznegoFragmentManager
. - Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego
FragmentManager
, co pozwala skorelować ilość zapisanego stanu powiązanego z poszczególnym fragmentem z unikalnymi identyfikatorami występującymi w logowaniu debugowaniaFragment
.
Inne zmiany
FragmentStrictMode
umożliwia teraz prywatnym fragmentom innych firm omijanie określonych kar za naruszenie zasad dzięki użyciuallowViolation()
z nazwą klasy.- Interfejsy API z fragmentami z krzyżykiem służące do dostarczania menu do sekcji
ActionBar
Twojej aktywności zostały wycofane. Interfejsy APIMenuHost
iMenuProvider
dodane w Aktywności1.4.0
udostępniają możliwą do przetestowania, zgodną z cyklem życia równoważną powierzchnię interfejsu API, której powinny używać fragmenty.
Wersja 1.5.0-rc01
11 maja 2022 roku
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
i androidx.fragment:fragment-testing:1.5.0-rc01
zostały udostępnione. Wersja 1.5.0-rc01 zawiera te zatwierdzenia.
Refaktoryzacja stanu zapisanej instancji
- Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego
FragmentManager
, co pozwala skorelować ilość zapisanego stanu powiązanego z poszczególnym fragmentem z unikalnymi identyfikatorami występującymi w rejestrowaniu debugowania fragmentów. (A153e0, b/207158202)
Wersja 1.5.0-beta01
20 kwietnia 2022 r.
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
i androidx.fragment:fragment-testing:1.5.0-beta01
zostały udostępnione. Wersja 1.5.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Funkcja
DialogFragment
dodała nową metodędismissNow
, która używacommitNow
w celu zapewnienia spójności z funkcjąshowNow
. Pamiętaj, że nie spowoduje to natychmiastowego zamknięcia obiektuDialog
– spowoduje to tylko synchroniczną aktualizację stanu elementuFragmentManager
. (I15c36, b/72644830)
Refaktoryzacja stanu zapisanej instancji
FragmentManager
zapisuje teraz zapisany stan instancji wBundle
, a nie bezpośrednio w niestandardowymParcelable
. To pierwszy krok na drodze do uzyskania dodatkowego wglądu w to, co faktycznie jest zapisywane przez fragmenty. (I93807, b/207158202)- Wyniki ustawione przez interfejsy Fragment Result API, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznego
FragmentManager
. Dzięki temu uzyskasz lepszy wgląd w wyniki, które są zapisywane w ramach stanu zapisanej instancji. (I6ea12, b/207158202)
Wersja 1.5.0-alpha05
6 kwietnia 2022 roku
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
i androidx.fragment:fragment-testing:1.5.0-alpha05
zostały udostępnione. Wersja 1.5.0-alfa05 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Pole
setHasOptionsMenu()
usługiFragment
zostało wycofane. Do zarządzania menu i ich pozycjami menu należy używać nowych interfejsów API menu zgodnie z informacjami o wersji Fragment1.5.0-alpha04
. (I7b4b4, b/226438239)
Wersja 1.5.0-alpha04
23 marca 2022 r.
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
i androidx.fragment:fragment-testing:1.5.0-alpha04
zostały udostępnione. Wersja 1.5.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Interfejsy API z fragmentami z krzyżykiem służące do tworzenia menu sekcji
ActionBar
Twojej aktywności zostały wycofane, ponieważ ściśle wiążą Twój fragment z Twoją aktywnością i nie można ich testować w oddzielnym trybie. Interfejsy APIMenuHost
iMenuProvider
dodane w Aktywności1.4.0-alpha01
udostępniają możliwą do przetestowania, zgodną z cyklem życia równoważną powierzchnię interfejsu API, której powinny używać fragmenty. (I50a59, I20758)
Poprawki błędów
SavedStateViewFactory
obsługuje teraz korzystanie zCreationExtras
nawet wtedy, gdy zostało zainicjowane za pomocąSavedStateRegistryOwner
. Jeśli podano dodatki, zainicjowane argumenty są ignorowane. (I6c43b, b/224844583)
Wersja 1.5.0-alpha03
23 lutego 2022 r.
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
i androidx.fragment:fragment-testing:1.5.0-alpha03
zostały udostępnione. Wersja 1.5.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Możesz teraz przekazać
CreationExtras
użytkownikomby viewModels()
iby activityViewModels()
– funkcje. (Ibefe7, b/217601110)
Zmiany w działaniu
- Aplikacja
DialogFragment
używa terazComponentDialog
jako domyślnej okno dialogowe zwrócone przezonCreateDialog()
. (If3784, b/217618170)
Wersja 1.5.0-alpha02
9 lutego 2022 r.
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
i androidx.fragment:fragment-testing:1.5.0-alpha02
zostały udostępnione. Wersja 1.5.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
FragmentStrictMode
umożliwia teraz prywatnym fragmentom innych firm omijanie określonych kar za naruszenie zasad dzięki użyciuallowViolation()
z nazwą klasy. (I8f678)
Wersja 1.5.0-alpha01
26 stycznia 2022 r.
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
i androidx.fragment:fragment-testing:1.5.0-alpha01
zostały udostępnione. Wersja 1.5.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Interfejs
Fragment
integruje się teraz z dodatkami do tworzenia modeli widoku danych, wprowadzonych w ramach cyklu życia2.5.0-alpha01
. (I3060b, b/207012585)
Poprawki błędów
- Od fragmentu
1.4.1
:FragmentContainerView
nie zgłasza już niedozwolonego stanu Wyjątek, gdy identyfikatory widoków wygenerowane na podstawie pliku XML mają wartości ujemne. (Ic185b, b/213086140) - Z fragmentu
1.4.1
: gdy używasz niestandardowej funkcji lambdaownerProducer
z funkcją leniwąby viewModels()
, jeśli nie podano niestandardowego elementuViewModelProvider.Factory
, zamiast zawsze używać fabryki fragmentu, jeśli nie podano niestandardowego elementuViewModelProvider.Factory
.defaultViewModelProviderFactory
(I56170, b/214106513) - Rozwiązaliśmy problem, który powodował awarię, która powodowała pierwszy raz dostęp do elementu
ViewModel
z wywołania zwrotnegoregisterForActivityResult()
elementuFragment
. (IEa2b3).
Wersja 1.4
Wersja 1.4.1
26 stycznia 2022 r.
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
i androidx.fragment:fragment-testing:1.4.1
zostały udostępnione. Wersja 1.4.1 zawiera te zatwierdzenia.
Poprawki błędów
FragmentContainerView
nie zgłasza już niedozwolonego stanu Wyjątek, gdy identyfikatory widoków wygenerowane na podstawie pliku XML mają wartości ujemne. (Ic185b, b/213086140)- Gdy używasz niestandardowej funkcji lambda
ownerProducer
z funkcją leniwąby viewModels()
, będzie ona używaćdefaultViewModelProviderFactory
od tego właściciela, jeśli niestandardowa Zamiast zawsze używać identyfikatora fragmentu, nie podanoViewModelProvider.Factory
fabryki. (I56170, b/214106513)
Wersja 1.4.0
17 listopada 2021 r.
androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
i androidx.fragment:fragment-testing:1.4.0
zostały udostępnione. Wersja 1.4.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.3.0
- Interfejsy API
FragmentStrictMode
udostępniają testy środowiska wykonawczego, które pozwalają sprawdzić, czy aplikacja lub biblioteki, z których korzystasz, nie wywołują wycofanych interfejsów API z fragmentami. W przypadku wykrycia naruszenia zasad możesz wydrukować komunikat logu, aktywować własny detektor lub zawiesić aplikację. ElementFragmentStrictMode.Policy
kontrolujący, które kontrole są włączone i wprowadzane „kary”, można ustawić wFragmentManager
za pomocą nowej metodysetStrictModePolicy()
. Ta zasada obowiązuje w odniesieniu do tego elementuFragmentManager
i przechodni do wszystkich podrzędnych menedżerów fragmentów, które nie mają ustawionych własnych unikalnych zasad. Więcej informacji o fragmentach znajdziesz w sekcji StrictMode. FragmentContainerView
udostępnia teraz metodęgetFragment()
, która zwraca fragment, który został ostatnio dodany do kontenera. Wykorzystuje tę samą logikę cofindFragmentById()
z identyfikatoremFragmentContainerView
, ale umożliwia łańcuch wywołań.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
implementuje terazCloseable
, co pozwala na korzystanie z niej za pomocą metodyuse
Kotlina lub try-with-resources.Dodane
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
aby określić, czy włączyć standardową animację przejścia z motywu na podstawie fragmentu kodu.Eksperymentalny interfejs API
FragmentManager.enableNewStateManager(boolean)
został usunięty i obecnie jedyną dostępną opcją jest nowy menedżer stanu.
Wiele wstecznych stosów
FragmentManager
utrzymuje stos zaplecza złożony z transakcji obejmujących fragmenty, które korzystały z addToBackStack()
. Dzięki temu możesz skompletować te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywanie stanu z fragmentami, które umożliwiają odpowiednie przywracanie stanu fragmentów.
Ta wersja rozszerza te mechanizmy o 3 nowe interfejsy API usługi FragmentManager
: saveBackStack(String name)
, restoreBackStack(String name)
i clearBackStack(String name)
. Te interfejsy API używają tego samego identyfikatora name
co addToBackStack()
, aby zapisać stan elementu FragmentTransaction
i stan każdego fragmentu, który został dodany w tych transakcjach. Dzięki temu możesz później przywrócić te transakcje i ich fragmenty z niezmienionym stanem. Dzięki temu możesz skutecznie przełączać się między kilkoma stosami wstecznymi, zapisując bieżący stos i przywracając jeden z zapisanych.
Funkcja saveBackStack()
działa podobnie do popBackStack()
, ponieważ jest asynchroniczna i powoduje cofnięcie wszystkich transakcji dotyczących fragmentów z powrotem do tej konkretnej nazwy, a wszystkie dodane fragmenty do zniszczenia i usunięcia. Różni się jednak kilka istotnych aspektów:
- Pole
saveBackStack()
zawsze uwzględnia integrację społeczną. - W przeciwieństwie do funkcji
popBackStack()
, która powoduje, że wszystkie transakcje są umieszczane na stosie wstecznym, jeśli podana nazwa nie znajduje się w stosie wstecznym lub jeśli podana nazwa jest pusta,saveBackStack()
nie robi nic, jeśli nie zatwierdzono wcześniej transakcji z fragmentami za pomocąaddToBackStack()
z taką samą, niepustą nazwą. - Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że zapisywany jest stan wyświetlania każdego fragmentu, wywoływany jest
onSaveInstanceState()
każdego fragmentu i ten stan zostaje przywrócony, a wszystkie powiązane z nimi instancjeViewModel
są zachowywane (aonCleared()
nie jest dla nich wywoływane).
Transakcje związane z fragmentami, których można używać z funkcją saveBackStack()
, muszą spełniać określone kryteria:
- Aby transakcje mogły zostać przywrócone w ramach pojedynczej, niepodzielnej operacji, każda transakcja wykorzystująca fragment kodu musi korzystać z parametru
setReorderingAllowed(true)
. - Zapisane transakcje muszą być niezależne (tzn. nie mogąnie odnosić się bezpośrednio do żadnych fragmentów spoza tego zbioru transakcji), aby umożliwić ich przywrócenie w dowolnym momencie, bez względu na to, jakie zmiany zostały wprowadzone w stosie wstecznym.
- Żaden zapisany fragment nie może być zachowanym fragmentem lub mieć zachowany fragment w przechodnim zestawie fragmentów podrzędnych, aby mieć pewność, że po zapisaniu stosu wstecznego
FragmentManager
nie zwróci żadnych odwołań do zapisanych fragmentów.
Podobnie jak w przypadku zdarzeń saveBackStack()
, restoreBackStack()
i clearBackStack()
, które powodują przywrócenie wcześniej zapisanego stosu wstecznego lub usunięcie wcześniej zapisanego stosu, obie te działania nie mają żadnego działania, jeśli nie zostało przez Ciebie wcześniej wywołane saveBackStack()
o tej samej nazwie.
Więcej informacji znajdziesz w artykule Wiele wstecznych stosów: szczegółowa analiza.
Wersja 1.4.0-rc01
3 listopada 2021 r.
Wersja androidx.fragment:fragment:1.4.0-rc01
została opublikowana bez zmian z fragmentu w wersji 1.4.0-beta01. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.
Wersja 1.4.0-beta01
27 października 2021 roku
androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
i androidx.fragment:fragment-testing:1.4.0-beta01
zostały udostępnione. Wersja 1.4.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Fragmenty nadrzędne będą teraz wysyłać plik
onHiddenChanged()
w dół całą hierarchię, zanim uruchomi własne wywołanie zwrotne. (Iedc20, b/77504618) - Klawiatura zamknie się teraz automatycznie, kiedy przejdziesz fragment z otwartą klawiaturą do fragmentu z widokiem elementu recyklingu. (I8b842, b/196852211)
DialogFragment
używa teraz tej funkcjisetReorderingAllowed(true)
dla wszystkich transakcji który jest generowany, gdy wywołujeszshow()
,showNow()
, lubdismiss()
. (IE2c14).- Bardzo długie ostrzeżenie o przypadku licencji
DetachAndAttachFragmentInSameFragmentTransaction
zostało skrócone doDetachAndAttachSameFragment
. (E9Eca3).
Wersja 1.4.0-alpha10
29 września 2021 r.
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
i androidx.fragment:fragment-testing:1.4.0-alpha10
zostały udostępnione. Wersja 1.4.0-alfa10 zawiera te zatwierdzenia.
Lint
- Dodaliśmy ostrzeżenie dotyczące lintowania
DetachAndAttachFragmentInSameFragmentTransaction
w przypadku wykrycia wywoływania zarównodetach()
, jak iattach()
na tym samymFragment
w tej samejFragmentTransaction
. Ponieważ te uzupełniające operacje wykonują się wzajemnie w ramach tej samej transakcji, muszą zostać rozdzielone na osobne transakcje, aby można było wykonać jakieś działanie. (Aosp/1832956, b/200867930) - Dodano błąd lintowania
FragmentAddMenuProvider
w celu skorygowania użycia cyklu życia fragmentu do cyklu życia widoku fragmentu w przypadku korzystania z interfejsu APIaddMenuProvider
typuMenuHost
. (Aosp/1830457, b/200326272)
Aktualizacje dokumentacji
- Komunikat o wycofaniu interfejsów API obsługiwany teraz przez interfejsy Activity Result API (
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
ionRequestPermissionsResult
) został rozszerzony i zawiera więcej szczegółów. (CCE80F). - Wiadomość o wycofaniu usługi
onActivityCreated()
dotycząca zarówno wersjiFragment
, jak iDialogFragment
została uzupełniona o więcej informacji. (224db4).
Wersja 1.4.0-alpha09
15 września 2021 r.
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
i androidx.fragment:fragment-testing:1.4.0-alpha09
zostały udostępnione. Wersja 1.4.0-alfa09 zawiera te zatwierdzenia.
Nowe funkcje
- Możesz teraz dzwonić pod numer
clearBackStack(name)
do wyczyścić wszystkie stany zapisane wcześniej wsaveBackStack(name)
. (I70cd7)
Zmiany interfejsu API
- Zajęcia
FragmentContainerView
zostały przepisane w języku Kotlin zapewnienie, że funkcjagetFragment
będzie prawidłowo respektować dopuszczalna wartość null. (If694a, b/189629145) - FragmentMode jest teraz napisany w języku Kotlin (I11767, b/199183506)
Poprawki błędów
- Naprawiono błąd stanu fragmentu.
dodano za pomocą funkcji
setReorderingAllowed(true)
, a następnie natychmiast usunięte przed wykonaniem oczekujących transakcji nie zostaną odpowiednio oczyszczone. (I8ccb8)
Wersja 1.4.0-alpha08
1 września 2021 roku
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
i androidx.fragment:fragment-testing:1.4.0-alpha08
zostały udostępnione. Wersja 1.4.0-alfa08 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawiliśmy sprawdzanie lint w
UseRequireInsteadOfGet
, aby lepiej obsługiwać zbędne nawiasy. (I2d865) - Poprawiliśmy sprawdzanie licencji
UseGetLayoutInflater
, aby obsługiwać dodatkowe przypadki skrajne. (IE5423)
Wersja 1.4.0-alpha07
18 sierpnia 2021 r.
Wersje androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
i androidx.fragment:fragment-testing:1.4.0-alpha07
zostały udostępnione bez istotnych zmian. Wersja 1.4.0-alfa07 zawiera te zatwierdzenia.
Wersja 1.4.0-alpha06
4 sierpnia 2021 r.
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
i androidx.fragment:fragment-testing:1.4.0-alpha06
zostały udostępnione. Wersja 1.4.0-alfa06 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z kilkoma korpusami
stosy podczas szybkiego przechodzenia między stosami wstecznymi;
które wyglądają tak:
IllegalStateException
podczas przywracania elementuFragmentTransaction
lub jako pojawi się druga kopia fragmentu. (I9039f) - Rozwiązaliśmy problem, który powodował, że usługa
FragmentManager
zachowałaby wcześniej zapisaną kopię stanu przezsaveBackStack()
, nawet po tym stanie przywrócono. (Ied212). - Metoda
dismissAllowingStateLoss()
zDialogFragment
nie ulega już awarii, gdy dzwonisz go po zapisaniu stanu podczas dodawania fragment DialogFragment za pomocą funkcjishow(FragmentTransaction, String)
. (I84422)
Wersja 1.4.0-alpha05
21 lipca 2021 r.
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
i androidx.fragment:fragment-testing:1.4.0-alpha05
zostały udostępnione. Wersja 1.4.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów
- Z fragmentu
1.3.6
: widok fragmentu jest teraz prawidłowo ustawiony naGONE
, gdy używaszhide()
, gdy widok główny ma ustawionytransitionGroup=”true”
. (aosp/1766655, b/193603427) - Od Fragmentu
1.3.6
:FragmentActivity
jest teraz zawsze odblokowywany zapisano stan jako pierwszą operację w cyklu życia zastępuje go. (I6db7a)
Aktualizacja zależności
- Z fragmentu
1.3.6
: fragmenty zależą teraz od aktywności1.2.4
(I3a66c).
Wersja 1.4.0-alpha04
30 czerwca 2021 r.
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
i androidx.fragment:fragment-testing:1.4.0-alpha04
zostały udostępnione. Wersja 1.4.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
FragmentManager
używa teraz modułuSavedStateRegistry
dla zaawansowanych, aby zapisać swój stan. MetodysaveAllState()
irestoreSavedState()
zostały również wycofane w metodzieFragmentController
. Jeśli używaszFragmentController
do hostowania fragmentów pozaFragmentActivity
, musisz mieć implementacjęFragmentHostCallbacks
SavedStateRegistryOwner
(Iba68e, b/188734238)
Poprawki błędów
- Naprawiono błąd połączenia z numerem
saveBackStack()
jako część zabezpieczenia kieszonki stosów zawiodą, gdy zostaną wykonane w tym samym czasie co z systememFragmentTransaction
, na którym użytoreplace()
. (I73137) - Naprawiono błąd
NullPointerException
, który ma miejsce po ręcznym przywróceniu zapisanego stos wsteczny zawierający wiele transakcji w przypadku korzystania z interfejsu APIrestoreBackStack()
na plecach. To też rozwiązało problem, w którymsetReorderingAllowed(true)
nie został sprawdzony dla wszystkich transakcji. (I8C593) - Rozwiązaliśmy problem, który powodował, że usługa
FragmentManager
nieprawidłowo kontynuuj, aby przywrócić wcześniej zapisany stan fragmentów nawet po ich usunięciu zFragmentManager
, powodując zapisanie stanu nieustannie rosnąć. (I1fb8e)
Wersja 1.4.0-alpha03
16 czerwca 2021 r.
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
i androidx.fragment:fragment-testing:1.4.0-alpha03
zostały udostępnione. Wersja 1.4.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Wszystkie klasy Fragment StrictMode
Violation
zostały zaktualizowane o bardziej szczegółowe komunikaty o błędach, które wyjaśniają szczegóły naruszenia. (b/187871638)FragmentTagUsageViolation
zawiera teraz więcej szczegółowy komunikat o błędzie zawierający kontener nadrzędny do którego fragment zostałby dodany. (IC33a7).WrongFragmentContainerViolation
ma teraz więcej szczegółowy komunikat o błędzie zawierający kontener, do którego właśnie dodano fragment. (IB55f8).- Klasy przypadków użycia funkcji
TargetFragmentUsageViolation
zawierają teraz bardziej szczegółowe komunikaty o błędach z uwzględnieniem fragmentu naruszającego zasady oraz inne zawarte informacje. (Icc6ac). - Zajęcia z okresu
RetainInstanceUsageViolation
zawierają teraz bardziej szczegółowe komunikaty o błędach zawierające fragment które spowodował naruszenie zasad. (I6bd55) FragmentReuseViolation
ma teraz więcej szczegółowy komunikat o błędzie zawierający poprzednią identyfikator fragmentu. (I28ce2).SetUserVisibleHintViolation
ma teraz więcej szczegółowy komunikat o błędzie zawierający opis ustawiona była widoczna wskazówka. (Ib2d5f)
Zmiany w działaniu
- Cofnięto ograniczenie nawiązywania połączeń z użytkownikiem
fitsSystemWindows
na urządzeniuFragmentContainerView
. Nie powoduje to już awarii aplikacji. (6b8ddd, b/190622202)
Poprawki błędów
- Z fragmentu
1.3.5
: naprawiono regresję w przejściach elementów udostępnionych wprowadzonych we Fragmentie1.3.4
przez aosp/1679887. Fragmenty kodu teraz prawidłowo obsługują grupy przejścia (ustawiane bezpośrednio przeztransitionGroup="true"
lub pośrednio przeztransitionName
lubbackground
) oraz udostępnione elementy nie będą już generować elementówIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304) FragmentManager
nie będzie już ulegać awarii, gdy spróbujesz ukryć usuwany fragment. (I573dd, b/183634730)- Sprawdzanie lintowania
OnCreateDialogIncorrectCallback
nie będzie awarii podczas oceny zmiennej najwyższego poziomu. (0a9efa, b/189967522)
Wersja 1.4.0-alpha02
2 czerwca 2021 r.
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
i androidx.fragment:fragment-testing:1.4.0-alpha02
zostały udostępnione. Wersja 1.4.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- Gdy logowanie jest włączone przez
FragmentManager
,FragmentStrictMode
zawsze będzie rejestrować naruszenia, niezależnie od bieżącej zasady trybu ścisłego. (I02df6, b/187872638) FragmentStrictMode
umożliwia teraz wykluczanie określonych klasFragment
z trybu ścisłegoViolation
, co pozwala tej klasie na pominięcie kar. (Ib4e5d, b/184786736)Klasa
FragmentStrictMode
Violation
została rozwinięta, aby dodać informacje o strukturze poszczególnych naruszeń. Pozwoli Ci to sprawdzić dokładnie, co spowodowało naruszenie zasad, a także fragment naruszający zasady (If5118, b/187871150), każdy elementViolation
ma następujące elementy:WrongFragmentContainerViolation
zawiera terazViewGroup
, do którego próbowano dodaćFragment
. (I83c75, b/187871150)- Aplikacja
TargetFragmentUsageViolation
została rozwinięta do:SetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
iGetTargetFragmentRequestCodeUsageViolation
, gdzieSetTargetFragmentUsageViolation
zawiera docelowy fragment i kod żądania. (I741b4, b/187871150) SetUserVisibleHintViolation
zawiera teraz wartość logiczną przekazywaną dosetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
zawiera teraz grupa widoków, do której tag<fragment>
próbował rozszerzyć fragment.(I5dbbc, b/187871150)FragmentReuseViolation
zawiera teraz unikalny identyfikator poprzedniego wystąpienia instancjiFragment
, która spowodowała naruszenie. (I0544d, b/187871150)RetainInstanceUsageViolation
to teraz abstrakcyjny i ma 2 podklasy,SetRetainInstanceUsageViolation
iGetRetainInstanceUsageViolation
, reprezentujące obie sieci ze względu na rodzaj naruszenia. (Ic81e5, b/187871150)
Zmiany w działaniu
FragmentContainerView
zgłasza teraz wyjątek podczas próby zmiany atrybutufitsSystemWindow
automatycznie lub za pomocą kodu XML. Wstawki powinny być obsługiwane przez widok poszczególnych fragmentów. (IE6651, b/187304502)
Wersja 1.4.0-alpha01
18 maja 2021 r.
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
i androidx.fragment:fragment-testing:1.4.0-alpha01
zostały udostępnione. Wersja 1.4.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
FragmentContainerView
udostępnia teraz metodęgetFragment()
, która zwraca fragment, który został ostatnio dodany do kontenera. Wykorzystuje tę samą logikę cofindFragmentById()
z identyfikatoremFragmentContainerView
, ale umożliwia łańcuch wywołań. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Dodane
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
aby określić, czy włączyć standardową animację przejścia z motywu na podstawie fragmentu kodu. (I46652)
Wiele wstecznych stosów
FragmentManager
utrzymuje stos zaplecza złożony z transakcji obejmujących fragmenty, które korzystały z addToBackStack()
. Dzięki temu możesz skompletować te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywanie stanu z fragmentami, które umożliwiają odpowiednie przywracanie stanu fragmentów.
W tej wersji rozszerzamy te mechanizmy o 2 nowe interfejsy API FragmentManager
: saveBackStack(String name)
i restoreBackStack(String name)
. Te interfejsy API używają tego samego identyfikatora name
co addToBackStack()
, aby zapisać stan elementu FragmentTransaction
i stan każdego fragmentu, który został dodany w tych transakcjach. Dzięki temu możesz później przywrócić te transakcje i ich fragmenty z niezmienionym stanem. Dzięki temu możesz skutecznie przełączać się między kilkoma stosami wstecznymi, zapisując bieżący stos i przywracając jeden z zapisanych.
Funkcja saveBackStack()
działa podobnie do popBackStack()
, ponieważ jest asynchroniczna i powoduje cofnięcie wszystkich transakcji dotyczących fragmentów z powrotem do tej konkretnej nazwy, a wszystkie dodane fragmenty do zniszczenia i usunięcia. Różni się jednak kilka istotnych aspektów:
- Pole
saveBackStack()
zawsze uwzględnia warunki. - W przeciwieństwie do funkcji
popBackStack()
, która powoduje, że wszystkie transakcje są umieszczane na stosie wstecznym, jeśli podana nazwa nie znajduje się w stosie wstecznym lub jeśli podana nazwa jest pusta,saveBackStack()
nie robi nic, jeśli nie zatwierdzono wcześniej transakcji z fragmentami za pomocąaddToBackStack()
z taką samą, niepustą nazwą. - Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że zapisywany jest stan wyświetlania każdego fragmentu, wywoływany jest
onSaveInstanceState()
każdego fragmentu i ten stan zostaje przywrócony, a wszystkie powiązane z nimi instancjeViewModel
są zachowywane (aonCleared()
nie jest dla nich wywoływane).
Transakcje związane z fragmentami, których można używać z funkcją saveBackStack()
, muszą spełniać określone kryteria:
- Aby transakcje mogły zostać przywrócone w ramach pojedynczej, niepodzielnej operacji, każda transakcja wykorzystująca fragment kodu musi korzystać z parametru
setReorderingAllowed(true)
. - Zapisane transakcje muszą być niezależne (tzn. nie mogąnie odnosić się bezpośrednio do żadnych fragmentów spoza tego zbioru transakcji), aby umożliwić ich przywrócenie w dowolnym momencie, bez względu na to, jakie zmiany zostały wprowadzone w stosie wstecznym.
- Żaden zapisany fragment nie może być zachowanym fragmentem lub mieć zachowany fragment w przechodnim zestawie fragmentów podrzędnych, aby mieć pewność, że po zapisaniu stosu wstecznego
FragmentManager
nie zwróci żadnych odwołań do zapisanych fragmentów.
Podobnie jak w przypadku funkcji saveBackStack()
, restoreBackStack()
nie robi nic, jeśli nie zostało przez Ciebie wcześniej wysłane połączenie z tą samą nazwą (saveBackStack()
). (B/80029773)
Fragment StrictMode
Interfejsy API FragmentStrictMode
udostępniają testy środowiska wykonawczego, które pozwalają sprawdzić, czy aplikacja lub biblioteki, z których korzystasz, nie wywołują wycofanych interfejsów API z fragmentami. W przypadku wykrycia naruszenia zasad możesz wydrukować komunikat logu, aktywować własny detektor lub zawiesić aplikację. Element FragmentStrictMode.Policy
kontrolujący, które kontrole są włączone i wprowadzane „kary”, można ustawić w FragmentManager
za pomocą nowej metody setStrictModePolicy()
. Ta zasada obowiązuje w odniesieniu do tego elementu FragmentManager
i przechodni do wszystkich podrzędnych menedżerów fragmentów, które nie mają ustawionych własnych unikalnych zasad. (nr 123, nr 131, #150, b/143774122)
- Funkcja
detectFragmentReuse()
wykrywa, czy wcześniej usunięte wystąpienieFragment
jest ponownie dodawane do instancjiFragmentManager
. Po zniszczeniu instancjiFragment
i usunięciu z niej odwołania doFragmentManager
nie należy nigdy wchodzić w interakcję z nią ani zachowywania do niej odwołania. (nr 142, b/153738653) detectFragmentTagUsage()
wykrywa, czy w pliku XML układu używasz tagu<fragment>
. Do rozszerzania fragmentów w ramach układu zawsze używaj elementuFragmentContainerView
. (nr 141, b/153738235)- Funkcja
detectWrongFragmentContainer()
wykrywa fragment, który został dodany do kontenera, który nie jest elementemFragmentContainerView
. Zawsze używajFragmentContainerView
jako kontenera dla fragmentów w układzie. (nr 146, b/181137036) detectRetainInstanceUsage()
wykrywa, kiedy używasz wycofanych interfejsów APIsetRetainInstance()
lubgetRetainInstance()
. (nr 140, b/153737954)detectSetUserVisibleHint()
wykrywa, że używasz wycofanego interfejsu APIsetUserVisibleHint()
. (#136, b/153738974)detectTargetFragmentUsage()
wykrywa, że używasz wycofanych interfejsów APIsetTargetFragment()
,getTargetFragment()
lubgetTargetRequestCode()
. (#139, b/153737745)
Zmiany interfejsu API
- Eksperymentalny interfejs API
FragmentManager.enableNewStateManager(boolean)
został usunięty i obecnie jedyną dostępną opcją jest nowy menedżer stanu. (I90036, b/162776418) FragmentScenario
implementuje terazCloseable
, co pozwala na korzystanie z niej za pomocą metodyuse
Kotlina lub try-with-resources. (#121, b/143774122)
Kontrola nowych licencji
- Funkcja sprawdzania licencji
UseGetLayoutInflater
ostrzega teraz, gdy używasz elementuLayoutInflater.from(Context)
w elemencieDialogFragment
. Aby uzyskać właściwą dla elementuLayoutInflater
, należy zawsze używać metodygetLayoutInflater()
fragmentu okna dialogowego. (nr 156, b/170781346) - Kontrola licencji
DialogFragmentCallbacksDetector
ostrzega teraz podczas wywoływania funkcjisetOnCancelListener
lubsetOnDismissListener
w metodzieonCreateDialog()
elementuDialogFragment
. Te detektory należą do samejDialogFragment
i należy zastąpić wartościonCancel()
ionDismiss()
, aby otrzymywać te wywołania zwrotne. (#171, b/181780047, b/187524311)
Poprawki błędów
- Z fragmentu 1.3.4: naprawiono regresję wprowadzoną we fragmentie
1.3.3
w przypadku korzystania z interfejsu APIViewTreeViewModelStoreOwner.get()
z poleceniemViewModelProvider
lub metody Jetpack Compose „viewModel()
” wewnątrz fragmentu. Te przypadki użycia teraz prawidłowo korzystają zViewModelProvider.Factory
podanego przez fragment, jeśli zastępuje ongetDefaultViewModelProviderFactory()
(tak jak w przypadku fragmentów z adnotacjami@AndroidEntryPoint
, gdy używasz Hilt). Jeśli nie zastąpisz tej metody, domyślna fabryka toSavedStateViewModelFactory
, który zapisuje i przywraca swój stan wraz z widokiem fragmentu. (I5cbfa, b/186097368) - Z Fragmentu 1.3.4: jeśli używasz
FragmentContainerView
w interfejsie API 29, wstawki nie będą dłuższy czas wysyłania bezterminowo, naprawiono problemy z instancjamiBottomNavigationBar
iFloatingActionButton
. (I1bb78, b/186012452) - Z Fragmentu 1.3.4: możesz teraz pobrać Parcelable z wyniku fragmentu pakietu po śmierci procesu. (I65932, b/187443158)
- Z Fragmentu 1.3.4: podczas przejścia wspólnego elementu w grupie widoków, jeśli tag
Ustawienie
transitionGroup
ViewGroup ma wartość Fałsz, teraz będzie działać prawidłowo przejścia. (I99675)
Treści tłumaczone przez użytkowników zewnętrznych
- Dziękujemy, simonschiller za umożliwienie użytkownikowi
FragmentScenario
wdrożeniaCloseable
. (#121, b/143774122) - Dziękujemy, simonschiller za dodanie całego interfejsu API
FragmentStrictMode
w tej wersji. - Dziękujemy tatocaster za dodanie czeków Lint
UseGetLayoutInflater
. (nr 156, b/170781346) - Dziękujemy tatocaster za dodanie czeków Lint
DialogFragmentCallbacksDetector
. (nr 171, b/181780047)
Wersja 1.3
Wersja 1.3.6
21 lipca 2021 r.
androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
i androidx.fragment:fragment-testing:1.3.6
zostały udostępnione. Wersja 1.3.6 zawiera te zatwierdzenia.
Poprawki błędów
- Od fragmentu
1.4.0-alpha03
: elementFragmentManager
nie będzie już ulegać awarii, gdy spróbujesz ukrywanie usuwanego fragmentu. (I573dd, b/183634730) - Widok fragmentu jest teraz ustawiony prawidłowo na
GONE
, gdy używasz zasadyhide()
, gdy widok główny zawiera wartośćtransitionGroup=”true”
. (aosp/1766655, b/193603427) - Urządzenie
FragmentActivity
jest teraz zawsze odblokowane zapisano stan jako pierwszą operację w cyklu życia zastępuje go. (I6db7a)
Aktualizacja zależności
- Z fragmentu
1.3.6
: fragmenty zależą teraz od aktywności1.2.4
(I3a66c).
Wersja 1.3.5
16 czerwca 2021 r.
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
i androidx.fragment:fragment-testing:1.3.5
zostały udostępnione. Wersja 1.3.5 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono regresję dotyczącą przejść elementów wspólnych wprowadzonych we Fragmentie
1.3.4
przez aosp/1679887. Fragmenty kodu teraz prawidłowo obsługują grupy przejścia (ustawiane bezpośrednio przeztransitionGroup="true"
lub pośrednio przeztransitionName
lubbackground
) oraz udostępnione elementy nie będą już generować elementówIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304)
Wersja 1.3.4
18 maja 2021 r.
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
i androidx.fragment:fragment-testing:1.3.4
zostały udostępnione. Wersja 1.3.4 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy regresję wprowadzoną we fragmencie
1.3.3
w przypadku korzystania z interfejsu APIViewTreeViewModelStoreOwner.get()
za pomocąViewModelProvider
lub metody Jetpack ComposeviewModel()
we fragmencie kodu podczas korzystania z Hilt. Te przypadki użycia teraz prawidłowo korzystają zViewModelProvider.Factory
podanego przez Twój fragment, jeśli zastępuje ongetDefaultViewModelProviderFactory()
(jak ma to miejsce w przypadku fragmentów z adnotacjami@AndroidEntryPoint
). Jeśli nie zastąpisz tej metody, domyślna fabryka toSavedStateViewModelFactory
, który zapisuje i przywraca swój stan wraz z widokiem fragmentu. (I5cbfa, b/186097368) - Jeśli używasz interfejsu
FragmentContainerView
w interfejsie API 29, wstawki nie będą dłuższy czas wysyłania bezterminowo, naprawiono problemy z instancjamiBottomNavigationBar
iFloatingActionButton
. (I1bb78, b/186012452) - Możesz teraz pobrać obiekt Parcelable z wyniku fragmentu pakietu po śmierci procesu. (I65932, b/187443158)
- Podczas przejścia wspólnego elementu w grupie widoków, jeśli
ViewGroup ma
transitionGroup
wartość false, teraz działa prawidłowo przejścia. (I99675)
Wersja 1.3.3
21 kwietnia 2021 r.
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
i androidx.fragment:fragment-testing:1.3.3
zostały udostępnione. Wersja 1.3.3 zawiera te zatwierdzenia.
Nowe funkcje
- Funkcja
SavedStateViewModelFactory
już działa gdy jest używany razem z funkcjąSavedStateRegistryOwner
zwróconą przez używającViewTreeSavedStateRegistryOwner.get()
z Widok fragmentu. (I21acf, b/181577191)
Poprawki błędów
- Naprawiliśmy regresję wprowadzoną we fragmentie
1.3.2
, która powodowała, że animacjepopEnter
nie były uruchamiane w przypadku wyskakującego żądaniaFragmentTransaction
zawierającego operacjęsetPrimaryNavFragment
, taką jak ta używana przezNavHostFragment
. (I38c87, b/183877426) FragmentContainerView
zapewnia teraz, że do każdego zbioru danychFragment
jest wysyłany nowy zestawWindowInsets
, dzięki czemu każdy fragment może teraz niezależnie przetwarzać wstawki. (I63f68, b/172153900)DialogFragment
teraz prawidłowo obsługuje przypadki, gdy fragment podrzędny jest dodawany do kontenera o tym samym identyfikatorze co kontener w niestandardowej klasieDialog
. Rozwiązujemy problemy z hierarchią widoków podczas ponownego wykorzystywania identyfikatorów, które są używane wewnętrznie w oknach takich jakBottomSheetDialog
. (IE6279, b/180021387)FragmentManager.dump()
prawidłowo dodaje teraz wcięcie do pierwszego fragmentu na liście aktywnych fragmentów. (If5c33, b/183705451)
Nowe poprawki błędów w ramach Menedżera stanu
- Nowy menedżer stanu fragmentów prawidłowo obsługuje teraz zdarzenia wyjściowe przejścia z operacjami ukrywania. (I9e4de, b/184830265)
Wersja 1.3.2
24 marca 2021 r.
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
i androidx.fragment:fragment-testing:1.3.2
zostały udostępnione. Wersja 1.3.2 zawiera te zatwierdzenia.
Nowe poprawki błędów w ramach Menedżera stanu
- W przypadku wykonywania operacji
popBackStack()
icommit()
ostatnia operacja ustawi teraz kierunek dla wszystkich zamiast używać kilku animacji popowych i elementów Enter, ani animacji. (I7072e, b/181142246) - Widoki w współdzielonej hierarchii elementów przestaną mieć wyczyszczono nazwę przejścia w przypadku przejścia z udostępnianego elementu. (I4d4a6, b/179934757)
Aktualizacje zależności
- Fragment jest teraz zależny od aktywności 1.2.2. Naprawiliśmy problem ze sprawdzaniem lintowania aktywności
InvalidFragmentVersionForActivityResult
, gdy używasz fragmentu w wersji 1.3.1 lub nowszej. - Fragment korzysta teraz z cyklu życia 2.3.1.
Wersja 1.3.1
10 marca 2021 r.
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
i androidx.fragment:fragment-testing:1.3.1
zostały udostępnione. Wersja 1.3.1 zawiera te zatwierdzenia.
Nowe funkcje
- Okna w elemencie
DialogFragment
mogą teraz uzyskać dostęp do ViewTree właścicieli za pomocą elementu DecorView, upewniając się, że usługaDialogFragment
może być używana z usługąComposeView
. (IB9290, b/180691023)
Poprawki błędów
- Fragmenty zostały powiększone do aktywności, która jest już
RESUMED
, za pomocą FragmentContainerView jest teraz prawidłowo wyświetlany po konfiguracji . (Ie14c8, b/180538371) - Na końcu fragmentu nie ma już dodatkowego elementu
}
toString()
(I54705, b/177761088) - Zastąpione metody we FragmentActivity teraz prawidłowo dziedziczą metodę Metoda podstawowa javaDoc (I736ce, b/139548782)
- Dokumentacja dla
setFragmentResult
isetFragmentResultListener
zaktualizowała dokumenty dotyczące parametrów, aby odzwierciedlić, że nie są już akceptowane wartości null (I990ba, b/178348386)
Nowe poprawki błędów w ramach Menedżera stanu
- Naprawiono wyciek pamięci we fragmentach spowodowany przez funkcję
mFocusedView
(Ib4e9e, b/179925887) - Fragmenty kodu teraz prawidłowo wywołują
onCreateOptionsMenu
, gdy używasz pokaż/ukryj transakcje (I8bce8, b/180255554) - Fragmenty podrzędne z przejściami rozpoczynającymi się przed określeniem fragmentu będą teraz prawidłowo uwzględniane
RESUMED
(IC11e6, b/180825150) - Fragmenty rozszerzone za pomocą tagu
<fragment>
będą teraz zawsze pojechać 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.
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
i androidx.fragment:fragment-testing:1.3.0
zostały udostępnione. Wersja 1.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.2.0
- Nowy menedżer stanu: znaczne przeredagowanie zasobów wewnętrznych
FragmentManager
rozwiązało wiele problemów z wysyłaniem zdarzeń cyklu życia, animacjami i przejściami oraz sposobem obsługi przełożonych fragmentów. Integracja interfejsu Activity Result API: dodaliśmy obsługę interfejsu API
ActivityResultRegistry
wprowadzonego w Aktywności1.2.0
do obsługi przepływówstartActivityForResult()
+onActivityResult()
irequestPermissions()
+onRequestPermissionsResult()
bez zastępowania metod we fragmencie kodu, a także zaoferowaliśmy punkty zaczepienia do testowania tych przepływów. Zobacz zaktualizowany artykuł Uzyskiwanie wyników z aktywności.- W tej wersji rozwiązaliśmy kilka problemów dotyczących nieprawidłowych kodów żądań i wysyłania próśb o uprawnienia, które uniemożliwiają działanie interfejsu Activity Result API w poprzednich wersjach
FragmentActivity
. Aby korzystać z interfejsów API wyników działań w kodzieFragmentActivity
lubAppCompatActivity
, musisz uaktualnić fragment kodu do wersji 1.3.0.
- W tej wersji rozwiązaliśmy kilka problemów dotyczących nieprawidłowych kodów żądań i wysyłania próśb o uprawnienia, które uniemożliwiają działanie interfejsu Activity Result API w poprzednich wersjach
Fragment Result API: dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w
FragmentManager
. Działa to w przypadku fragmentów hierarchii (nadrzędny/podrzędny), DialogFragments i fragmentów w Nawigacji. Zapewnia też, że wyniki są wysyłane tylko do Twojego fragmentu, gdy jego wartość wynosi co najmniejSTARTED
. Interfejsy API fragmentów docelowych zostały wycofane i zastąpione nowymi interfejsami. Zapoznaj się z sekcją Uzyskiwanie wyników za pomocą interfejsu Fragment Result API.FragmentOnAttachListener
: wywołanie zwrotneonAttachFragment()
dla adresówFragmentActivity
iFragment
zostało wycofane. Dodaliśmy nowy elementFragmentOnAttachListener
, który zapewnia bardziej elastyczną alternatywę, pozwalając detektorowionAttachFragment()
rozdzielać, które można przetestować, oraz obsługiwać dodawanie detektora do elementów FragmentManager innych niż bezpośredni podrzędny element FragmentManager.FragmentScenario
Ulepszenia: klasaFragmentScenario
z artefaktufragment-testing
została przeredagowana w Kotlin i otrzymał kilka ulepszeń:FragmentScenario
używa terazsetMaxLifecycle()
do implementacjimoveToState()
, co zapewnia spójne działanie na wszystkich poziomach interfejsu API i oddziela stan fragmentu od aktywności.FragmentScenario
obsługuje teraz ustawienie początkowej wartościLifecycle.State
, która obsługuje potwierdzanie stanu fragmentu przed pierwszym przeniesieniem do poszczególnych elementówLifecycle.State
.- Istnieje obecnie alternatywa dla
FragmentScenario
APIonFragment
w postaci metody Kotlin ulepszonego rozszerzeniawithFragment
, która umożliwia zwrócenie wartości. W szczególności odrzuca wyjątki zgłoszone w danym bloku.
Pomoc na poziomie
ViewTree
:Fragment
obsługuje teraz interfejsy APIViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
iViewTreeSavedStateRegistryOwner
dodane w cyklu życia2.3.0
i SavedState1.1.0
, tak aby zwracał fragment jakoViewModelStoreOwner
, aSavedStateRegistryOwner
iLifecycleOwner
powiązany z cyklem życia fragmentu, gdy używaszView
wFragment
.Zmiany animacji
TRANSIT_
: domyślne efekty fragmentów (TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
) są teraz używane w postaciAnimator
zamiastAnimation
. Zasoby użyte do stworzenia tych animacji są teraz prywatne.Wycofanie
setRetainInstance()
: metodasetRetainInstance()
w fragmentach kodu została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do zachowywania stanu, który można powiązać z działaniami, fragmentami i wykresami nawigacji. Pozwala to deweloperom używać normalnego, niezachowanego fragmentu i zachowywania konkretnego stanu, który chce zachować oddzielnie. Pozwala to uniknąć wspólnego źródła wycieków, a jednocześnie zachować przydatne właściwości pojedynczego utworzenia i zniszczenia zachowanego stanu (czyli konstruktoraViewModel
i otrzymanego przez niego wywołania zwrotnegoonCleared()
).Wycofanie adaptera ViewPager 1: wraz z udostępnieniem ViewPager2
1.0.0
klasyFragmentPagerAdapter
iFragmentStatePagerAdapter
do interakcji zViewPager
zostały wycofane. Zapoznaj się z sekcją Migracja z ViewPager do ViewPager2.
Wersja 1.3.0-rc02
27 stycznia 2021 r.
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
i androidx.fragment:fragment-testing:1.3.0-rc02
zostały udostępnione. Wersja 1.3.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że po zmianie konfiguracji element nadrzędny
DialogFragment
był wyświetlany nad podrzędnym kontemDialogFragment
. podrzędne fragmenty okien dialogowych są teraz zawsze wyświetlane nad nadrzędnym fragmentem okna dialogowego. (I30806, b/177439520) - Rozwiązaliśmy problem z wykonywaniem operacji
hide
za pomocą poleceniaAnimation
spowodowałoby miganie ukrywającego fragmentu na końcu animacji. (I57e22, b/175417675) - Fragmenty z przejściami dodanymi przed hierarchią widoku
podłączone teraz prawidłowo dotrzymuj do
RESUMED
. (I1fc1d, b/177154873)
Nowe poprawki błędów w ramach Menedżera stanu
- Widok
Lifecycle
fragmentu kodu obsługuje teraz przypadki, w których widok fragmentu zostaje zniszczony, zanimLifecycle
osiągnieCREATED
, unikając wyjątków stwierdzających „brak zdarzenia od INITIALIZED”. (EDa2bd, b/176138645) - Fragmenty z użyciem parametru
Animator
wyświetlają się teraz w odpowiedniej kolejności podczas korzystania z funkcjiFragmentContainerView
(Id9aa3, b/176089197)
Wersja 1.3.0-rc01
16 grudnia 2020 roku
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
i androidx.fragment:fragment-testing:1.3.0-rc01
zostały udostępnione. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Metoda
onPrepareOptionsMenu()
działa teraz tak samo jakonCreateOptionsMenu()
i nie jest już wywoływane, gdy fragment nadrzędny Wywołuje połączeniesetMenuVisibility(false)
. (Id7de8, b/173203654)
Nowe poprawki błędów w ramach Menedżera stanu
- Usunięto wyciek danych i artefakty wizualne podczas dodawania
fragment z
Animation
doFragmentContainerView
, a następnie przerwać to za pomocą operacji pop. (I952d8) - Naprawiono błąd, który powodował, że widok fragmentu
pozostają w hierarchii widoku, jeśli zostały zastąpione podczas
jej metody
onCreate()
lubonViewCreated()
. (I8a7d5) - Zaznaczenie jest teraz prawidłowo przywracane do widoków głównych fragmentów, gdy są wznawiane. (Ifc84b).
- Łączenie operacji pop i zastępowania w tym samym fragmencie transakcja wyświetla teraz odpowiednie animacje (Ifd4e4, b/170328691)
Wersja 1.3.0-beta02
Grudzień 2, 2020
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
i androidx.fragment:fragment-testing:1.3.0-beta02
zostały udostępnione. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.
Nowe funkcje
- Środowisko
FragmentScenario
zostało w pełni przekonwertowane na Kotlin przy zachowaniu zgodności źródła i binarnego przez wykorzystanie funkcjonalnych interfejsów Kotlin 1.4 dlaFragmentAction
. (I19d31)
Zmiany w działaniu
- Obiekty FragmentContainerView, które nie rozszerzają fragmentu za pomocą atrybutu
class
lubandroid:name
, mogą być teraz używane pozaFragmentActivity
. (Id4397, b/172266337) - Próba ustawienia maksymalnego cyklu życia fragmentu na
DESTROYED
spowoduje wysłanie żądaniaIllegalArgumentException
(Ie7651, b/170765622) - Inicjowanie przykładowego scenariusza ze stanem
DESTROYED
spowoduje teraz wysłanie żądaniaIllegalArgumentException
(I73590, b/170765622)
Nowe poprawki błędów w ramach Menedżera stanu
- Rozwiązaliśmy problem, który powodował, że widok nie osiągał końcowego stanu, jeśli zakłóciłeś przejście fragmentu, które używało jednej z opcji
Animator
lub jednej z opcjiTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Rozwiązaliśmy problem, który uniemożliwiał prawidłowe zniszczenie fragmentów z wyjściem
Animation
. (I83d65) - Fragmenty końcowe, których efekty zostały teraz cofnięte poprawnie anulować i uruchomić ponownie z odpowiednim efektem. (I62226, b/167092035)
- Rozwiązaliśmy problem, który powodował, że nie można było uruchomić wyjścia
Animator
elementuhide()
. (Id7ffe). - Fragmenty prawidłowo wyświetlają się teraz po przełożeniu i zaczynaniu od razu. (IE713b, b/170022857)
- Fragmenty, które usuwają ostrość podczas animacji, nie będą już próbowały przywrócić fokusu do odłączonego widoku, gdy osiągną wartość
RESUMED
(I38c65, b/172925703).
Treści tłumaczone przez użytkowników zewnętrznych
FragmentFactory
buforuje teraz klasy fragmentów oddzielnie dla poszczególnych instancjiClassLoader
. Dzięki Simon Schiller. (#87, b/113886460)
Wersja 1.3.0-beta01
1 października 2020 roku
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
i androidx.fragment:fragment-testing:1.3.0-beta01
zostały udostępnione. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
setMaxLifecycle()
umożliwia teraz ustawianie stanuLifecycle
naINITIALIZING
, o ile fragment nie został przeniesiony doCREATED
. (b/159662173)
Zmiany interfejsu API
- Uaktualnij Androidax, by używał Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Zmiany w działaniu
- Pliki zasobów z fragmentem zostały prawidłowo oznaczone jako prywatne. (Aosp/1425237).
Poprawki błędów
- Fragmenty rozszerzone za pomocą tagu
<fragment>
będą teraz działać prawidłowo poczekaj, aż ich widoki zostaną dodane do kontenera, zanim przejdziesz do sekcji STARTED (I02f4c) - Fragmenty, które są widoczne, a następnie od
setMaxLifecycle()
doCREATED
, teraz prawidłowo uruchamiają efekty wyjścia. (B/165822335) - Usunięcie odłączonego fragmentu, który nie został dodany do stosu wstecznego, nie powoduje już wycieku pamięci. Dzięki uprzejmości Nicklasa Ansmana Giertza! (b/166489383)
- Aktywne fragmenty mają teraz atrybut
FragmentManager
o wartości innej niż null, a fragmenty z wartościąFragmentManager
inną niż null zawsze będą uważane za aktywne. (Aosp/1422346). - Domyślne efekty fragmentów,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, są teraz używane jakoAnimator
zamiastAnimation
. (B/166155034)
Nowe poprawki błędów w ramach Menedżera stanu
- Fragmenty kodu teraz prawidłowo przywracają stan skupienia z tuż przed rozpoczęciem animacji. (ICC256)
- Fragmenty, które mają teraz tylko wspólne przejście elementu poprawnie dobierać efekty specjalne, tj. w odpowiedni sposób ich stan końcowy (Iaebc7, b/166658128).
- Wyświetlenia fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876).
- Nowy menedżer stanu konsekwentnie usuwa teraz wyjście widoku fragmentów przed dodaniem wpisanego. (I41a6e)
- Jawne zmiany w widoczności widoku fragmentów są teraz respektowane przez nowego menedżera stanu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu wprowadzającego na
INVISIBLE
, pozostanie on niewidoczny. (b/164481490) - Fragmenty mają teraz wyższy priorytet
Animators
niżAnimations
, co oznacza, że fragment z oboma funkcjami będzie uruchamiać tylko tagAnimator
i zignorowaćAnimation
. (b/167579557) - Nowy menedżer stanu nie sprawia już, że fragmenty podczas wprowadzania animacji nie migają. (b/163084315)
Znany problem
Jeśli podczas korzystania z nowego menedżera stanu naciśniesz Wstecz w trakcie wprowadzania efektu specjalnego, zamiast wracać do poprzedniego fragmentu, stary fragment nie zostanie nigdy ponownie dodany, co skutkuje pustym ekranem. (b/167259187, b/167092035, b/168442830)
Wersja 1.3.0-alfa08
19 sierpnia 2020 r.
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
i androidx.fragment:fragment-testing:1.3.0-alpha08
zostały udostępnione. Wersja 1.3.0-alfa08 zawiera te zatwierdzenia.
Nowy menedżer stanowy
Ta wersja zawiera znaczną refaktoryzację wewnętrznego zarządzania stanem FragmentManager
, co wpływa na wysyłanie metod cyklu życia, animacji i przejść oraz sposób obsługi przełożonych transakcji. Ta opcja jest domyślnie włączona. Więcej informacji znajdziesz w artykule Fragmenty: odbudowywanie kodu wewnętrznego (w języku angielskim). (b/139536619, b/147749580)
- Eksperymentalny interfejs API w języku
FragmentManager.enableNewStateManager(boolean)
może być używany do określania, czy FragmentManager ma używać nowego menedżera stanu. (I7b6ee).
Te problemy rozwiązuje się tylko wtedy, gdy korzystasz z nowego menedżera stanu:
- Poprzedni fragment operacji
replace
został prawidłowo zatrzymany przed uruchomieniem nowego fragmentu. (B/161654580) - Fragmenty kodu uniemożliwiają teraz wyświetlanie kilku konkurujących animacji w przypadku tych samych fragmentów, co pozwala uniknąć sytuacji, w której element
Animation
zastąpiłby wszystkie efektyTransition
lubAnimator
iTransition
w pojedynczym fragmencie. (b/149569323) enterTransition
iexitTranstion
wszystkich fragmentów wchodzących i wychodzących są teraz uruchamiane, a nie tylko ostatni fragment wchodzący i pierwszy fragment wyjściowy. (b/149344150)- Przełożone fragmenty nie blokują się już w stanie
CREATED
, ale są przenoszone doSTARTED
z innymi fragmentami. (b/129035555) - Rozwiązaliśmy problem, który powodował, że usługa
FragmentManager
uruchamiała operacje w niezgodności z transakcją w przełożonym zamówieniu i transakcji w innym zamówieniu. (b/147297731) - Przesunięcie wielu fragmentów jednocześnie nie będzie już powodować tymczasowego wyświetlania fragmentów pośrednich podczas odkładania fragmentów. (B/37140383)
- Funkcja
FragmentManager
zwraca teraz prawidłowe fragmenty podczas wywoływania funkcjifindFragmentById()
lubfindFragmentByTag()
z poziomu wywołania zwrotnegoonAttachFragment()
. (b/153082833) - Fragmenty nie wywołują już funkcji
onCreateView()
w przypadku zniszczenia fragmentów, gdy fragment, który je zastępuje, zostanie przełożony. (b/143915710) - Komunikat o błędzie przy próbie połączenia instancji platformy
Transition
iTransition
AndroidaX zawiera teraz fragment z nieprawidłowym przejściem. (b/155574969)
Zmiany w działaniu
- Możesz teraz wywoływać funkcję
launch()
w elemencieActivityResultLauncher
w metodzie cyklu życiaonCreate()
danego fragmentu. (b/161464278) - Wywołanie
registerForActivityResult()
poonCreate()
powoduje teraz wyjątek informujący o tym, że jest to niedozwolone. Wyjątkiem jest dyskretne niedostarczenie wyników po zmianie konfiguracji. (b/162255449) FragmentActivity
używa teraz interfejsu APIOnContextAvailableListener
wprowadzonego w sekcji Aktywność1.2.0-alpha08
do przywrócenia stanuFragmentManager
. Wszystkie detektory dodane do podklasFragmentActivity
będą uruchamiane po tym detektorze. (I513da).
Poprawki błędów
- Reguły
ActivityOptions
przekazywane podczas korzystania z funkcjistartIntentSenderForResult()
są teraz respektowane. (b/162247961)
Znany problem
- W przypadku korzystania z nowego menedżera stanu bezpośrednie ustawienie widoczności widoku głównego fragmentu po
onViewCreated()
i przedonResume()
spowoduje, że ustawiona przez Ciebie widoczność zostanie zastąpiona przez ustawienieFragmentManager
, które kontroluje widoczność widoku głównego. Aby obejść ten problem, zmień widoczność fragmentu za pomocą operacjihide()
ishow()
. (b/164481490)
Wersja 1.3.0-alpha07
22 lipca 2020 r.
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
i androidx.fragment:fragment-testing:1.3.0-alpha07
zostały udostępnione. Wersja 1.3.0-alfa07 zawiera te zatwierdzenia.
Nowe funkcje
FragmentScenario
umożliwia teraz ustawianie początkowych elementów Stan cyklu życiaCREATED
,STARTED
lubRESUMED
zamiast zawsze przenosić fragment doRESUMED
stanu. (B/159662750)- Do interfejsu API
FragmentScenario
onFragment
dodaliśmy alternatywę w postaci zmodyfikowanej metody rozszerzeniawithFragment
Kotlin, która umożliwia zwracanie wartości. W szczególności odrzuca wyjątki zgłoszone w danym bloku. (b/158697631)
Zmiany w działaniu
FragmentScenario
używa terazsetMaxLifecycle()
do implementacjimoveToState()
, co zapewnia spójne działanie na wszystkich poziomach interfejsu API i oddziela stan fragmentu od aktywności. (B/156527405)- Pole
SavedStateRegistryOwner
zwrócone przezViewTreeSavedStateRegistryOwner
jest teraz powiązane z cyklem życia widoku fragmentu. Dzięki temu stan elementu zostanie zapisany i przywrócony jednocześnie z widokiem fragmentu. (B/158503763)
Poprawki błędów
- Fragmenty czekają teraz na dołączenie widoku fragmentu przed wywołaniem funkcji
ViewCompat.requestApplyInsets()
. Pozwala to uniknąć sytuacji, w których żądanie wstawienia zostało odrzucone. (b/158095749) - Wywołanie
clearFragmentResultListener
powoduje teraz prawidłowe usunięcie lub obserwatora cyklu życia. (b/159274993)
Wersja 1.3.0-alpha06
10 czerwca 2020 r.
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
i androidx.fragment:fragment-testing:1.3.0-alpha06
zostały udostępnione. Wersja 1.3.0-alfa06 zawiera te zatwierdzenia.
Nowe funkcje
- Wywołanie zwrotne
onAttachFragment()
włączone UsługiFragmentActivity
iFragment
zostały wycofane. Dodano nowe urządzenieFragmentOnAttachListener
do zapewni bardziej elastyczną alternatywę, umożliwiając przekazywanie dostępu zonAttachFragment()
, aby oddzielić detektorów możliwych do przetestowania i obsługę dodawania detektora do FragmentManagers. inny niż bezpośredni podrzędny element FragmentManager. (I06d3d)
Poprawki błędów
- Fragmenty nadrzędne są teraz wyświetlane przed fragmentami podrzędnymi. Rozwiązano problem z wizualną kolejnością po zmianie konfiguracji, gdy element
DialogFragment
wyświetlał inny elementDialogFragment
jako fragment podrzędny. (b/157195715) - Rozwiązaliśmy problem, który powodował, że kontrola licencji
UseRequireInsteadOfGet
nie obsługiwała prawidłowo łańcuchowych przypadków użycia operatorów?.
i!!
. (b/157677616)
Wersja 1.3.0-alpha05
20 maja 2020 r.
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
i androidx.fragment:fragment-testing:1.3.0-alpha05
zostały udostępnione. Wersja 1.3.0-alfa05 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano obsługę funkcji
ViewTreeViewModelStoreOwner
z cyklu życia2.3.0-alpha03
iViewTreeSavedStateRegistryOwner
z SavedState1.1.0-alpha01
w przypadku używania parametruView
wFragment
. (aosp/1297993, aosp/1300264)
Zmiany interfejsu API
- Interfejsy API
setFragmentResult()
isetFragmentResultListener()
przyjmują teraz odpowiednio niepuste wartościBundle
iFragmentResultListener
. Aby wyraźnie wyczyścić wcześniej ustawiony wynik lub detektor, użyj nowych metodclearFragmentResult()
iclearFragmentResultListener()
. (b/155416778) - Rozszerzenia Kotlin (
setFragmentResultListener()
), które korzystają z metody lambda, są teraz oznaczone jakoinline
. (b/155323404)
Zmiany w działaniu
- Wcześniej wycofane
startActivityForResult()
,startIntentSenderForResult()
irequestPermissions
w systemieFragment
używają teraz wewnętrznie parametruActivityResultRegistry
, dzięki czemu nie trzeba ograniczać używania w kodach żądań tylko dolnych bitów (poniżej0xFFFF
) w przypadku kodów żądań podczas korzystania z tych interfejsów API. (b/155518741)
Aktualizacje dokumentacji
- Rozszerzyliśmy dokumentację konstruktorów
Fragment(@LayoutRes int)
iDialogFragment(@LayoutRes int)
, aby wyjaśnić, że powinny być one wywoływane z konstruktora bez argumentów podklas, gdy używany jest domyślnyFragmentFactory
. (b/153042497)
Wersja 1.3.0-alfa04
29 kwietnia 2020 roku
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
i androidx.fragment:fragment-testing:1.3.0-alpha04
zostały udostępnione. Wersja 1.3.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w
FragmentManager
. Działa to w przypadku fragmentów hierarchii (nadrzędny/podrzędny), DialogFragments i fragmentów w Nawigacji. Zapewnia też, że wyniki są wysyłane tylko do Twojego fragmentu, gdy jego wartość wynosi co najmniejSTARTED
. (b/149787344)
Zmiany interfejsu API
- Interfejsy API fragmentów docelowych zostały wycofane. Do przekazywania danych między fragmentami należy używać nowych interfejsów API Fragment Result API. (b/149787344)
- Interfejsy API
startActivityForResult()
/onActivityResult()
irequestPermissions()
/onRequestPermissionsResult()
dla fragmentu kodu zostały wycofane. Użyj interfejsów Activity Result API. (Aosp/1290887). - Zmiana niezgodność z Aktywności
1.2.0-alpha04
: nazwa metodyprepareCall()
została zmieniona naregisterForActivityResult()
. (Aosp/1278717)
Poprawki błędów
- Element
getViewLifecycleOwner()
fragmentu jest teraz zatrzymany przed wywołaniem funkcjionSaveInstanceState()
, co odzwierciedla zachowanie cyklu życia danego fragmentu. (B/154645875) - Wywołanie
setMenuVisibility(false)
we fragmencie powoduje teraz prawidłową zmianę widoczności menu dostarczanych przez jego fragmenty podrzędne. (b/153593580) - Naprawiono błąd
illegalStateException
, który występował podczas dodawania fragmentu do hierarchii widoków elementuDialogFragment
za pomocąFragmentContainerView
. (B/154366601) - Metoda
getDefaultViewModelProviderFactory()
we fragmentach nie ulega już awarii, gdy hostujesz fragmenty poza aktywnością. (b/153762914)
Wersja 1.3.0-alfa03
Kwiecień 1, 2020
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
i androidx.fragment:fragment-testing:1.3.0-alpha03
zostały udostępnione. Wersja 1.3.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Metody
prepareCall
wFragment
są terazfinal
. (b/152439361)
Poprawki błędów
- Naprawiono regresję wprowadzoną we fragmentie
1.3.0-alpha02
podczas korzystania zBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - Naprawiono poważny błąd związany z korzystaniem z pola
prepareCall
z fragmentu po zmianie konfiguracji. (B/152137004) - Rozwiązaliśmy problem, który powodował, że przejścia z udostępnianego elementu i wyjścia były ignorowane w przypadku korzystania z funkcji
setTargetFragment()
. (b/152023196) - Z fragmentu
1.2.4
: zaktualizowano reguły ProGuard fragmentów z fragmentami, aby umożliwić zaciemnianie przechowywanych fragmentów. (b/151605338) - Z fragmentu
1.2.4
: wyłączono regułęFragmentLiveDataObserve
Lint w klasachDialogFragment
, ponieważ ich cykl życia i cykl życia wyświetlania są zawsze zsynchronizowane, dzięki czemu można bezpiecznie używaćthis
lubviewLifecycleOwner
przy wywoływaniu funkcjiobserve
. (B/151765086)
Zmiany zależności
- Fragmenty kodu zależą od aktywności
1.2.0-alpha03
, w przypadku której wprowadziliśmy istotne ulepszenia w interfejsie Activity Result API w aplikacji1.2.0-alpha02
.
Wersja 1.3.0-alfa02
18 marca 2020 r.
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
i androidx.fragment:fragment-testing:1.3.0-alpha02
zostały udostępnione. Wersja 1.3.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę interfejsu API
ActivityResultRegistry
wprowadzonego w aktywności1.2.0-alpha02
w celu obsługi przepływówstartActivityForResult()
+onActivityResult()
irequestPermissions()
+onRequestPermissionsResult()
bez zastępowania metod we fragmencie, a także dodatkowe punkty zaczepienia do testowania tych przepływów. Zobacz zaktualizowany artykuł Uzyskiwanie wyników z aktywności. (b/125158199)
Zmiany interfejsu API
DialogFragment
udostępnia teraz konstruktor@LayoutRes
wskazujący układ, któryonCreateView()
powinien domyślnie zwiększać. (B/150327080)- Metoda
onActivityCreated()
została wycofana. Kod łączący widok fragmentu powinien zostać wykonany w językuonViewCreated()
(który jest wywoływany bezpośrednio przedonActivityCreated()
), a inny kod inicjujący – w językuonCreate()
. Aby można było otrzymać wywołanie zwrotne po zakończeniu działaniaonCreate()
aktywności, zdarzenieLifeCycleObserver
powinno być zarejestrowane wLifecycle
aktywności wonAttach()
i usunięte po otrzymaniu wywołania zwrotnegoonCreate()
. (b/144309266)
Poprawki błędów
- Z fragmentu
1.2.3
: naprawiliśmy błąd w funkcjiDialogFragment
, który powodował, że podczas wywoływaniagetLayoutInflater()
z aplikacjionCreateDialog()
występował błądStackOverflowError
. (b/117894767, Aosp/1258664) - Od Fragmentu
1.2.3
: zmniejszono zakres uwzględnionych reguł ProGuard fragmentu, aby mieć pewność, że nieużywane klasy Fragment mogą być usuwane. (b/149665169) - Z fragmentu
1.2.3
: naprawiono fałszywe trafienia w sprawdzaniu licencjiUseRequireInsteadOfGet
w przypadku użycia nazwy zmiennej lokalnej, która zastąpiła nazwę właściwości Kotlin. (b/149891163) - Z fragmentu
1.2.3
:FragmentContainerView
nie wysyła już żądaniaUnsupportedOperationException
za użycie nieprawidłowego konstruktora w podglądzie układu. (b/149707833)
Znane problemy
BottomSheetDialogFragment
nie wyświetla już prawidłowo swojego okna na ekranie. (b/151652127)
Wersja 1.3.0-alpha01
Marzec 4, 2020
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
i androidx.fragment:fragment-testing:1.3.0-alpha01
zostały udostępnione. Wersja 1.3.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę interfejsu API
ViewTreeLifecycleOwner.get(View)
w cyklu życia2.3.0-alpha01
, tak aby w przypadku wszystkich wyświetleń zwracanych przezonCreateView()
zwracał onviewLifecycleOwner
fragmentu jakoLifecycleOwner
. (Aosp/1182955).
Zmiany interfejsu API
- Metoda
setRetainInstance()
w przypadku fragmentów kodu została wycofana. Dzięki wprowadzeniu ViewModels deweloperzy mają specjalny interfejs API do zachowywania stanu, który można powiązać z działaniami, fragmentami i wykresami nawigacji. Pozwala to deweloperom używać normalnego, niezachowanego fragmentu i zachowywania konkretnego stanu, który chce zachować oddzielnie. Pozwala to uniknąć wspólnego źródła wycieków, a jednocześnie zachować przydatne właściwości pojedynczego utworzenia i zniszczenia zachowanego stanu (czyli konstruktoraViewModel
i otrzymanego przez niego wywołania zwrotnegoonCleared()
). (b/143911815) - Wraz z udostępnieniem ViewPager2
1.0.0
klasyFragmentPagerAdapter
iFragmentStatePagerAdapter
do interakcji zViewPager
zostały wycofane. Zapoznaj się z sekcją Migracja z ViewPager do ViewPager2. (b/145132715)
Poprawki błędów
- Reguły ProGuard z fragmentów kodu poprawnie zachowują teraz tylko używane domyślne klasy konstruktorów
Fragment
, a nie wszystkie używane instancjeFragment
. Poprawia to regresję wprowadzoną we fragmencie1.2.1
. (b/149665169 - Reguły Lint
require___()
dodane we fragmencie1.2.2
nie są już fałszywie dodatnie w przypadku zmiennych lokalnych o tej samej nazwie co powielane nazwy właściwości Kotlin (np.view
). (b/149891163) FragmentContainerView
nie zgłasza jużUnsupportedOperationException
podczas korzystania z podglądu układu w Android Studio. (b/149707833)- Naprawiono błąd polegający na tym, że zachowane fragmenty, które zostały dodane po zapisaniu stanu, nie były stale odtwarzane i niszczone po każdej zmianie konfiguracji. (b/145832397)
Wersja 1.2.5
Wersja 1.2.5
10 czerwca 2020 r.
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
i androidx.fragment:fragment-testing:1.2.5
zostały udostępnione. Wersja 1.2.5 zawiera te zatwierdzenia.
Poprawki błędów
- Element
getViewLifecycleOwner()
fragmentu jest teraz zatrzymany przed wywołaniem funkcjionSaveInstanceState()
, co odzwierciedla zachowanie cyklu życia danego fragmentu. Zostało to wcześniej opublikowane we Fragmentie1.3.0-alpha04
. (B/154645875) - Wywołanie
setMenuVisibility(false)
we fragmencie powoduje teraz prawidłową zmianę widoczności menu dostarczanych przez jego fragmenty podrzędne. Zostało to wcześniej opublikowane we Fragmentie1.3.0-alpha04
. (b/153593580)
Wersja 1.2.4
Wersja 1.2.4
Kwiecień 1, 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
i androidx.fragment:fragment-testing:1.2.4
zostały udostępnione. Wersja 1.2.4 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano reguły ProGuard dotyczące fragmentów, aby umożliwić zaciemnianie przechowywanych fragmentów. (b/151605338)
- Wyłączono regułę Lint
FragmentLiveDataObserve
w klasachDialogFragment
, ponieważ ich cykl życia i cykl życia wyświetlania są zawsze zsynchronizowane, dzięki czemu można bezpiecznie używaćthis
lubviewLifecycleOwner
przy wywoływaniuobserve
. (B/151765086)
Wersja 1.2.3
Wersja 1.2.3
18 marca 2020 r.
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
i androidx.fragment:fragment-testing:1.2.3
zostały udostępnione. Wersja 1.2.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd w funkcji
DialogFragment
, który powodował błądStackOverflowError
podczas wywoływania funkcjigetLayoutInflater()
w aplikacjionCreateDialog()
. (b/117894767, Aosp/1258665) - Ograniczyliśmy zakres uwzględnionych reguł ProGuard fragmentu, aby umożliwić usuwanie nieużywanych klas fragmentów kodu. (b/149665169)
- Naprawiono błędy fałszywie pozytywne w kontroli licencji
UseRequireInsteadOfGet
w przypadku użycia nazwy zmiennej lokalnej, która zastąpiła nazwę właściwości Kotlin. (b/149891163) FragmentContainerView
nie wysyła już żądaniaUnsupportedOperationException
za użycie nieprawidłowego konstruktora w podglądzie układu. (b/149707833)
Wersja 1.2.2
Wersja 1.2.2
19 lutego 2020 r.
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
i androidx.fragment:fragment-testing:1.2.2
zostały udostępnione. Wersja 1.2.2 zawiera te zatwierdzenia.
Kontrola nowych licencji
- Lint zaleca użycie interfejsu
viewLifecycleOwner
jakoLifecycleOwner
do nawiązywania połączeń z interfejsemOnBackPressedDispatcher
w usługachonCreateView()
,onViewCreated()
ionActivityCreated()
. (b/142117657) - Dodaliśmy nowy sprawdzanie licencji, które potwierdza, że podczas korzystania z artefaktu
fragment-testing
używasz właściwegodebugImplementation
. (B/141500106) - W przypadku fragmentów kodu sugerujemy teraz użycie powiązanych metod
require___()
w celu uzyskania bardziej opisowych komunikatów o błędach zamiastcheckNotNull(get___())
,requireNonNull(get___())
lubget___()!!
w przypadku wszystkich interfejsów API fragmentów, które zawierają odpowiednikiget
irequire
. (Aosp/1202883).
Poprawki błędów
- Naprawiono pliki z fragmentami ProGuard, aby uniknąć ostrzeżeń R8 (b/148963981).
- Poprawiliśmy obecny mechanizm sprawdzania linta z sugerowaniem użycia metody
viewLifecycleOwner
, gdy używasz zasadyobserve
do obsługi również wersji metody rozszerzenialivedata-ktx
systemuobserve
. (b/148996309) - Poprawiono formatowanie wielu testów Lint (aosp/1157012).
Treści publikowane przez użytkowników zewnętrznych
- Dziękujemy Zac Sweers za przesłanie
require___()
testów Lint w imieniu Slack. (Aosp/1202883).
Wersja 1.2.1
Wersja 1.2.1
5 lutego 2020 r.
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
i androidx.fragment:fragment-testing:1.2.1
zostały udostępnione. Wersja 1.2.1 zawiera te zatwierdzenia.
Poprawki błędów.
- Fragmenty dodane za pomocą metod
add
ireplace
, które przyjmują instancjęClass
(lub wersje zmodyfikowane przez Kotlin), mają teraz domyślny konstruktor zachowywany przez ProGuard. (b/148181315) - Reguły
FragmentStatePagerAdapter
iFragmentPagerAdapter
nie wychwytują już wyjątków zgłoszonych przez metodęFragmentManager
podczas uruchamiania funkcjifinishUpdate()
. (Aosp/1208711) - Rozwiązaliśmy problem, który powodował, że usługa
FragmentManager.findFragment()
nie działała z fragmentami dodanymi za pomocą tagu<fragment>
. (b/147784323) - Fragmenty, które zostały poszerzone za pomocą tagu
<fragment>
, zawsze otrzymują wywołanieonInflate()
przedonCreate()
, gdy są w układzie. (Aosp/1215856). - Wywołanie
toString()
w wystąpieniuFragmentManager
nie powoduje już wywołaniaNullPointerException
, jeśli aktywność została już zniszczona. (b/148189412)
Zmiany zależności
- Fragmenty
1.2.1
korzystają teraz z tagu ViewModel SavedState cyklu życia2.2.0
.
Wersja 1.2.0
Wersja 1.2.0
Styczeń 22, 2020
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
i androidx.fragment:fragment-testing:1.2.0
zostały udostępnione. Wersja 1.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.1.0
- FragmentContainerView:
FragmentContainerView
to zdecydowanie zalecany kontener dla dynamicznie dodawanych fragmentów kodu. Zastępuje on użycie elementówFrameLayout
lub innych układów. Obsługuje również te same elementyclass
,android:name
i opcjonalnyandroid:tag
co tag<fragment>
, ale do dodania tego początkowego fragmentu używa normalnego ciąguFragmentTransaction
zamiast niestandardowej ścieżki kodu używanej przez<fragment>
. - Czas
onDestroyView()
: fragmenty czekają teraz na zakończenie animacji wyjść, przejścia platformy wyjściowej i przejścia AndroidaX (w przypadku przejścia1.3.0
) przed wywołaniem funkcjionDestroyView()
. add()
ireplace()
oparte na klasach: wFragmentTransaction
dodano nowe przeciążenia wartościadd()
ireplace()
, które przyjmująClass<? extends Fragment>
i opcjonalnyBundle
argumentów. Te metody używająFragmentFactory
do utworzenia wystąpienia fragmentu do dodania. Rozszerzenia Kotlin, które korzystają ze zmienionych typów (np.fragmentTransaction.replace<YourFragment>(R.id.container)
), zostały też dodane dofragment-ktx
.- Integracja z zapisanym modelem widoku cyklu życia:
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną w przypadku korzystania z konstruktoraby viewModels()
,by activityViewModels()
, konstruktoraViewModelProvider
lubViewModelProviders.of()
z fragmentem kodu. - Nowe testy Linta: dodaliśmy nowy proces sprawdzania Lint, który zapewnia, że do obserwacji
LiveData
w usługachonCreateView()
,onViewCreated()
ionActivityCreated()
używaszgetViewLifecycleOwner()
. - Wycofanie
getFragmentManager()
: metodygetFragmentManager()
irequireFragmentManager()
dotyczące fragmentu zostały wycofane i zastąpione pojedynczą metodągetParentFragmentManager()
, która zwraca wartość niepustąFragmentManager
, do której został dodany fragment (możesz użyćisAdded()
, aby określić, czy można je wywołać). - Wycofanie
FragmentManager.enableDebugLogging()
: statyczna metodaFragmentManager.enableDebugLogging
została wycofana. FragmentManager respektuje terazLog.isLoggable()
dla taguFragmentManager
, co umożliwia włączenie logowaniaDEBUG
lubVERBOSE
bez ponownego kompilowania aplikacji.
Znane problemy
- Fragmenty, do których odwołuje się tylko atrybut
class
lubandroid:name
w tabeliFragmentContainerView
, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania do każdej klasy fragmentu. (b/142601969) - Gdy dodajesz element
NavHostFragment
za pomocą parametruclass
lubandroid:name
w pliku XML z parametremFragmentContainerView
, nie możesz używaćfindNavController()
wonCreate()
aktywności. (B/142847973)
Wersja 1.2.0-rc05
Styczeń 8, 2020
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
i androidx.fragment:fragment-testing:1.2.0-rc05
zostały udostępnione. Wersja 1.2.0-rc05 zawiera te zatwierdzenia.
Poprawki błędów.
- Naprawiono regresję we fragmencie
1.2.0-rc04
w przypadku użycia tagu<fragment>
, przez co funkcjaonViewCreated()
była nieprawidłowo wywoływana podczas zniszczenia aktywności. (B/146290333) - Fragmenty dodane z tagiem
<fragment>
są teraz prawidłowo usuwane z innych ustawień, nawet jeśli występują tylko czasami w układzie (tzn. tylko w układzie poziomym). W rezultacie fragmenty są teraz prawidłowo przenoszone doCREATED
nawet wtedy, gdy nie ma ich w Twoim układzie, zamiast ich instancji, ale nigdy nie przechodzą przez żadne metody cyklu życia. (b/145769287)
Wersja 1.2.0-rc04
18 grudnia 2019 r.
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
i androidx.fragment:fragment-testing:1.2.0-rc04
zostały udostępnione. Wersja 1.2.0-rc04 zawiera te zatwierdzenia.
Poprawki błędów.
- Dostosowaliśmy animacje dla elementów
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, aby uniknąć problemów z obrazem. (b/145468417)
Wersja 1.2.0-rc03
4 grudnia 2019
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
i androidx.fragment:fragment-testing:1.2.0-rc03
zostały udostępnione. Wersja 1.2.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów.
- Poprawiliśmy niezamierzoną zmianę działania, w wyniku której usunięte fragmenty kodu nadal były zwracane przez funkcje
findFragmentById()
/findFragmentByTag()
podczas uruchamiania animacji/przejść zdarzeń wyjściowych. (b/143982969, Aosp/1167585) - Fragmenty podrzędne są teraz prawidłowo zatrzymywane przed elementami nadrzędnymi, gdy powiązana aktywność wywołuje
onSaveInstanceState()
. (B/144380645) - Naprawiono błąd polegający na tym, że wyświetlenia były błędnie oznaczane jako
INVISIBLE
po wyświetleniu ukrytego fragmentu. (b/70793925) - Przejścia elementów udostępnionych fragmentów obejmują teraz wyświetlenia, które zostały obrócone, przeskalowane itp. (b/142835261)
Aktualizacje dokumentacji
- Doprecyzowaliśmy dokumentację dotyczącą wycofywania aplikacji
setUserVisibleHint()
. (B/143897055) - Poprawiono dokumentację dotyczącą
setFragmentFactory()
igetFragmentFactory()
, aby lepiej wskazać, że ustawienieFragmentFactory
będzie miało również wpływ na podrzędne elementy FragmentManager. (Aosp/1170095).
Zmiany zależności
- Fragmenty kodu zależą teraz od Cykl życia
2.2.0-rc03
, SavedState modelu cyklu życia1.0.0-rc03
i aktywności1.1.0-rc03
.
Wersja 1.2.0-rc02
7 listopada 2019 r.
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
i androidx.fragment:fragment-testing:1.2.0-rc02
zostały udostępnione. Wersja 1.2.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów.
- W przypadku Kotlin narzędzie LintFix używane do używania
getViewLifecycleOwner()
do obserwacjiLiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
(zaprezentowane w fragmentu1.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.
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
i androidx.fragment:fragment-testing:1.2.0-rc01
zostały udostępnione. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.
Nowe funkcje
- Oprócz atrybutu
android:name
FragmentContainerView
obsługuje teraz atrybutclass
, co odzwierciedla działanie tagu<fragment>
. (b/142722242) - Dodano nowy sprawdzanie licencji, które zapewnia, że używasz
getViewLifecycleOwner()
do obserwowania zdarzeńLiveData
z usługonCreateView()
,onViewCreated()
ionActivityCreated()
. (b/137122478)
Poprawki błędów.
- Wywołania zwrotne
onDismiss
ionCancel
funkcjiDialogFragment
gwarantują teraz, że przekaz do nichDialogInterface
nie ma wartości null, a polegetDialog()
zwraca wartość inną niż null po ich wykonaniu. (B/141974033) FragmentContainerView
dodaje teraz fragment zdefiniowany przezclass
lubandroid:name
w ramach inflacji. Dzięki temufindFragmentById()
ifindFragmentByTag()
działają natychmiast po tym działaniu. (b/142520327)- Naprawiono
IllegalStateException
wFragmentContainerView
z powodu zapisywania stanu. (B/142580713) - Naprawiono błąd
UnsupportedOperationException
w elemencieFragmentContainerView
, gdy klasaFragmentContainerView
ma zaciemniony kod. (B/142657034)
Znane problemy
- Fragmenty, do których odwołuje się tylko atrybut
class
lubandroid:name
w tabeliFragmentContainerView
, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania do każdej klasy fragmentu. Do czasu rozwiązania tego problemu poprzezaapt2
wyłączyliśmy regułę Lint sugerującą przejście do:FragmentContainerView
. (b/142601969)
Wersja 1.2.0-beta02
11 października 2019 r.
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
i androidx.fragment:fragment-testing:1.2.0-beta02
zostały udostępnione. Wersja 1.2.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów.
- Naprawiono błąd, który powodował, że fragment
onInflate()
nie otrzymywał prawidłowych atrybutów zFragmentContainerView
, takich jakNavHostFragment
. (b/142421837)
Wersja 1.2.0-beta01
9 października 2019 r.
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
i androidx.fragment:fragment-testing:1.2.0-beta01
zostały udostępnione. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- W
FragmentContainerView
można dodawać początkowy fragment z obsługą atrybutów XMLandroid:name
i opcjonalnychandroid:tag
. W przeciwieństwie do tagu<fragment>
FragmentContainerView
używa normalnego taguFragmentTransaction
znajdującego się poza infrastrukturą, aby dodać początkowy fragment. Umożliwia to dalsze operacjeFragmentTransaction
w elemencieFragmentContainerView
i umożliwia korzystanie z powiązania widoku dla układu. (b/139830628, b/141177981) - Fragmenty zawierają teraz ostrzeżenie o Lnt i zawierają szybką poprawkę, która pozwala zastąpić
<fragment>
elementemFragmentContainerView
. (B/139830056)
Poprawki błędów.
- Naprawiono błąd
ClassCastException
w przypadku użycia funkcjiandroidx.transition
. (B/140680619) - Jeśli używasz przejścia
1.3.0-beta01
, fragmenty czekają teraz na zakończenie przejśćandroidx.transition
(oprócz przejść między elementami platformy i animacji, które zostały naprawione odpowiednio w fragmentach1.2.0-alpha03
i fragmentie1.2.0-alpha02
) przed wysłaniemonDestroyView()
. (Aosp/1119841) - Jeśli używasz przejścia
1.3.0-beta01
, fragmenty kodu prawidłowo zamykają teraz przejścia typuandroidx.transition
przed rozpoczęciem nowych przejść / animacji w tym samym kontenerze. (Aosp/1119841) - Rozwiązaliśmy problem z interfejsem API w wersji 17 i starszych w przypadku używania przejść
androidx.transition
w widoku głównym fragmentu koduFragmentContainerView
. (B/140361893) - Artefakt
fragment-testing
korzysta teraz z testu AndroidX1.2.0
, naprawiamy niezgodność z najnowszą wersją Espresso 3.2.0. (B/139100149) - Usunięto użycie
Log.w
w usłudze FragmentManager. (Aosp/1126468).
Znane problemy
onInflate()
fragmentu nie otrzymuje prawidłowych atrybutów zFragmentContainerView
, przypadki awarii, takie jakNavHostFragment
. (b/142421837)
Wersja 1.2.0-alfa04
18 września 2019 r.
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
i androidx.fragment:fragment-testing:1.2.0-alpha04
zostały udostępnione. Wersja 1.2.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Metody
getFragmentManager()
irequireFragmentManager()
w tabeliFragment
zostały wycofane i zastąpione pojedynczą metodągetParentFragmentManager()
, która zwraca wartośćFragmentManager
inną niż zero, do której został dodany fragment (możesz użyćisAdded()
, aby określić, czy można je bezpiecznie wywołać). (b/140574496) - Metoda statyczna
FragmentManager.enableDebugLogging
została wycofana. FragmentManager respektuje terazLog.isLoggable()
dla taguFragmentManager
, co umożliwia włączenie logowaniaDEBUG
lubVERBOSE
bez ponownego kompilowania aplikacji. (Aosp/1116591)
Poprawki błędów.
- Fragmenty są teraz prawidłowo niszczone podczas uruchamiania animacji wyjścia dla innych fragmentów. (b/140574199)
- Naprawiono błąd, który powodował, że fragmenty kodu wywoływały
Activity.findViewById()
, gdy wcześniej nie były. (Aosp/1116431).
Wersja 1.2.0-alfa03
5 września 2019 r.
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
i androidx.fragment:fragment-testing:1.2.0-alpha03
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany interfejsu API
FragmentContainerView
to terazfinal
. (B/140133091)
Poprawki błędów.
FragmentContainerView
teraz prawidłowo odwraca kolejność rysowania podczas wysuwania fragmentów z tylnego stosu. (b/139104187)- Naprawiono błąd, który powodował, że w przypadku jednoczesnego wyskakującego fragmentu i dodawania nowego fragmentu była uruchamiana nieprawidłowa animacja. (b/111659726)
- Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, które zostały naprawione we Fragmentie
1.2.0-alpha02
) przed wysłaniem wiadomościonDestroyView()
. (b/138741697)
Wersja 1.2.0-alfa02
7 sierpnia 2019 r.
Wersje androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
i androidx.fragment:fragment-testing:11.2.0-alpha02
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną w przypadku używaniaby viewModels()
,by activityViewModels()
, konstruktoraViewModelProvider
lubViewModelProviders.of()
zFragment
. (b/135716331)- Domyślne animacje używane podczas korzystania z funkcji
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
z parametremsetTransition
na urządzeniuFragmentTransaction
zostały zaktualizowane, tak aby odpowiadały animowanym aktywnościom na urządzeniach z Androidem 10. (Aosp/1012812, Aosp/1014730)
Zmiany interfejsu API
- Wprowadza
FragmentContainerView
jako zdecydowanie zalecany kontener dla dynamicznie dodawanych fragmentów kodu. Zastępuje on użycie konstrukcjiFrameLayout
itp., ponieważ rozwiązuje problemy z układem kolejności animacji w animacji i wstawienia okien wysyłanych do fragmentów kodu. (b/37036000, Aosp/985243, b/136494650) - Dodano statyczną metodę
FragmentManager.findFragment(View)
do pobierania zawierającego fragment kodu z widoku powiększonego przez fragment. Rozszerzenie Kotlin jest również dostępne w językufragment-ktx
. (Aosp/1090757) - W systemie
FragmentTransaction
dodano nowe przeciążenia funkcjiadd()
ireplace()
, które przyjmują argumentyClass<? extends Fragment>
i opcjonalnieBundle
. Te metody używająFragmentFactory
do utworzenia wystąpienia fragmentu do dodania. Rozszerzenie Kotlin, które korzysta ze zmienionych typów (np.fragmentTransaction.replace<YourFragment>(R.id.container)
), zostało też dodane dofragment-ktx
. (b/126124987) - Adnotacje (
@MainThread
) zostały dodane doFragment
wywołań zwrotnych cyklu życia. (b/127272564) - Interfejsy API powiązane z tytułem menu nawigacyjnego w systemach
FragmentTransaction
iFragmentManager.BackStackEntry
zostały wycofane. (b/138252944) - Metoda
setTransitionStyle
w systemieFragmentTransaction
została wycofana. (Aosp/1011537). - Wiele metod w funkcji
FragmentManager
nie jest już typuabstract
. Sama regułaFragmentManager
pozostajeabstract
i nie powinna być bezpośrednio utworzona ani rozszerzana; należy kontynuować pobieranie tylko istniejącej instancji z instancjigetSupportFragmentManager()
,getChildFragmentManager()
itp.
Poprawki błędów.
- Od Fragmentu
1.1.0-rc04
: fragmenty kodu prawidłowo anulują odroczone przejścia dla fragmentów z fragmentami z fragmentami z krzyżykiem. (b/138251858) - Z fragmentu
1.1.0-rc03
: naprawiliśmy problem, który powodował, że wywołanie funkcjipostponeEnterTransition()
z większym czasem oczekiwania nie anuluje wcześniejszych limitów czasu. (b/137797118) - Z fragmentu
1.1.0-rc02
: naprawiono błąd, który występował wFragmentPagerAdapter
iFragmentStatePagerAdapter
podczas usuwania bieżącego elementu. (B/137209870) - Fragmenty czekają teraz na zakończenie animacji przed wysłaniem polecenia
onDestroyView()
. (B/136110528) - Animacje fragmentów podrzędnych z fragmentów podrzędnych i ich elementów potomnych są teraz prawidłowo obsługiwane podczas animowania nadrzędnego fragmentu. (B/116675313)
- Naprawiono błąd
NullPointerException
występujący podczas korzystania z przejść udostępnionych elementów oraz łączenia operacji wyskakujących i dodawania. (B/120507394) - Dodano obejście zabezpieczeń
IllegalStateException
w przypadku korzystania zFragmentPagerAdapter
iFragmentStatePagerAdapter
w testach Robolectric. (b/137201343)
Wersja 1.2.0-alpha01
2 lipca 2019 r.
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
i androidx.fragment:fragment-testing:1.2.0-alpha01
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- FragmentManager wywołuje teraz
requestApplyInsets()
po dołączeniu widoku fragmentu i bezpośrednio przed wywołaniemonViewCreated()
. Dzięki temu Twój widok zawsze ma prawidłowe wstawki. (b/135945162)
Poprawki błędów.
- Naprawiono błąd
NullPointerException
, który występował podczas wyświetlania parametruFragmentTransaction
, który używałsetPrimaryNavigationFragment()
przedreplace()
. (b/134673465)
Wersja 1.1.0
Wersja 1.1.0
5 września 2019 r.
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
i androidx.fragment:fragment-testing:1.1.0
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Ważne zmiany wprowadzone od wersji 1.0.0
- testowanie fragmentów: artefakt
fragment-testing
udostępnia klasęFragmentScenario
do izolowanego testowania fragmentu. Więcej informacji znajdziesz w artykule Testowanie fragmentów aplikacji. - FragmentFactory: możesz teraz ustawić
FragmentFactory
wFragmentManager
, aby zarządzać tworzeniem instancji z fragmentami. Nie ma już rygorystycznego wymogu używania konstruktora bez argumentu. - Przedstawiciele usługi Kotlin dla obiektów ViewModels: artefakt
fragment-ktx
zawiera teraz 2 delegacje właściwości Kotlin:by viewModels()
w celu uzyskania dostępu do modeli widoków powiązanych z poszczególnymi fragmentami iby activityViewModels()
na potrzeby dostępu do modeli ViewModel w zakresie działania. - Maksymalny cykl życia: możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując
setMaxLifecycle()
wFragmentTransaction
. Zastępuje ona wycofywaną zasadęsetUserVisibleHint()
.FragmentPagerAdapter
iFragmentStatePagerAdapter
mają nowy konstruktor, który umożliwia przełączenie się na nowe zachowanie. - Konstruktor FragmentActivity LayoutId: podklasy obiektu
FragmentActivity
mogą teraz opcjonalnie wywoływać konstruktor w elemencieFragmentActivity
, który przyjmuje identyfikatorR.layout
, co wskazuje układ, który należy ustawić jako widok treści zamiast wywoływaćsetContentView()
w elemencieonCreate()
. Nie zmienia to wymogu, że podklasa musi mieć konstruktor bez argumentu. - Konstruktor z fragmentem identyfikatora Układu: podklasy obiektu
Fragment
mogą teraz opcjonalnie wywoływać konstruktor w obiekcieFragment
, który przyjmuje identyfikatorR.layout
, co wskazuje układ, którego należy użyć dla tego fragmentu jako alternatywy dla zastąpieniaonCreateView()
. Układ powiększony można skonfigurować wonViewCreated()
. - Opóźnij z określonym limitem czasu: dodano nowe przeciążenie
postponeEnterTransition()
, które zajmuje więcej czasu.
Wersja 1.1.0-rc04
7 sierpnia 2019 r.
Wersje androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
i androidx.fragment:fragment-testing:1.1.0-rc04
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów.
- Fragmenty kodu z fragmentami z fragmentami z krzyżykiem prawidłowo anulować przełożone przejścia zostały w nich wycięte. (b/138251858)
Wersja 1.1.0-rc03
19 lipca 2019 r.
Wersje androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
i androidx.fragment:fragment-testing:1.1.0-rc03
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów.
- Rozwiązaliśmy problem, który powodował, że wywołanie funkcji
postponeEnterTransition()
z większym limitem czasu oczekiwania nie powodowało anulowania poprzednich limitów czasu oczekiwania. (b/137797118)
Wersja 1.1.0-rc02
17 lipca 2019 r.
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
i androidx.fragment-testing:fragment:1.1.0-rc02
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów.
- Naprawiono błąd związany z usuwaniem bieżącego elementu w
FragmentPagerAdapter
iFragmentStatePagerAdapter
. (B/137209870)
Wersja 1.1.0-rc01
2 lipca 2019 r.
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
i androidx.fragment:fragment-testing:1.1.0-rc01
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów.
- Fragmenty kodu teraz prawidłowo aktualizują swoją widoczność podczas wykonywania operacji
show()
lubhide()
podczas przejścia. (b/133385058) - Naprawiono błąd
NullPointerException
, który występował podczas wyświetlania parametruFragmentTransaction
, który używałsetPrimaryNavigationFragment()
przedreplace()
. (b/134673465)
Wersja 1.1.0-beta01
5 czerwca 2019 r.
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
i androidx.fragment:fragment-testing:1.1.0-beta01
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów.
- Wywołania zwrotne
androidx.lifecycle.Lifecycle
(w szczególności związane zSTARTED
,RESUMED
,PAUSED
,STOPPED
iDESTROYED
) dla zagnieżdżonych fragmentów są teraz prawidłowo zagnieżdżone. (b/133497591) - Instancje (
OnBackPressedCallback
) zarejestrowane w elemencieonCreate()
fragmentu kodu mają teraz prawidłowe pierwszeństwo przed podrzędnym tagiem FragmentManager. (b/133175997) - Fragmenty podrzędne nie są już animowane, gdy zastępowany jest ich fragment nadrzędny. (B/121017790)
- Animacje i przejścia z fragmentami kodu są teraz ignorowane podczas korzystania z funkcji
animateLayoutChanges="true"
. Naprawiamy problem polegający na tym, że fragmenty nie zostały prawidłowo zniszczone. (B/116257087)
Wersja 1.1.0-alpha09
16 maja 2019 r.
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
i androidx.fragment:fragment-testing:1.1.0-alpha09
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany interfejsu API
- Fragmenty otrzymują teraz wywołanie zwrotne do nowej metody
onPrimaryNavigationFragmentChanged(boolean)
w przypadku zmiany głównego fragmentu nawigacji. Aosp/960857
Poprawki błędów.
- Pozycje w menu, które zostały powiększone przez fragment podrzędny, są teraz prawidłowo usuwane po usunięciu fragmentu nadrzędnego. b/131581013
Wersja 1.1.0-alpha08
7 maja 2019 r.
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
i androidx.fragment:fragment-testing:1.1.0-alpha08
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Ta wersja jest niezgodna z preferencjami w wersjach od 1.1.0-alfa01 do 1.1.0-alfa. Jeśli używasz tej wersji fragmentów kodu, uaktualnij je do wersji 1.1.0-alfa05.
Nowe funkcje
- Dodano nowe przeciążenie obiektu
postponeEnterTransition()
, które wymaga czasu oczekiwania, po którym fragment będzie automatycznie wywoływałstartPostponedEnterTransition()
b/120803208
Zmiany interfejsu API
- Niezbędna zmiana: wycofaliśmy wcześniej wycofaną metodę
instantiate
FragmentFactory
, która wymagała użyciaBundle
. Aosp/953856 - Niezbędna zmiana: stałe
RESUME_ONLY_CURRENT_FRAGMENT
iUSE_SET_USER_VISIBLE_HINT
w funkcjachFragmentPagerAdapter
iFragmentStatePagerAdapter
zostały zmienione na odpowiednioBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
iBEHAVIOR_SET_USER_VISIBLE_HINT
. Aosp/954782
Poprawki błędów.
- Fragmenty, których cykl życia został ograniczony przez
setMaxLifecycle()
, nie są już wznawiane przed osiągnięciem ostatecznego stanu. b/131557151 - Jeśli używasz metody
setMaxLifecycle(Lifecycle.State.CREATED)
, widok fragmentów kodu zostanie zniszczony. Aosp/954180
Wersja 1.1.0-alpha07
25 kwietnia 2019 r.
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
i androidx.fragment:fragment-testing:1.1.0-alpha07
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Teraz możesz ustawić maksymalny stan cyklu życia fragmentu, wywołując funkcję
setMaxLifecycle()
wFragmentTransaction
. Zastępuje ona wycofywaną zasadęsetUserVisibleHint()
.FragmentPagerAdapter
iFragmentStatePagerAdapter
mają nowy konstruktor, który umożliwia przełączenie się na nowe zachowanie. (B/129780800)
Zmiany interfejsu API
- Funkcja
moveToState(STARTED)
w systemieFragmentScenario
można teraz wywoływać tylko na urządzeniach z interfejsem API w wersji 24 lub nowszej. (B/129880016)
Zmiany w działaniu
- W efekcie (b/129907905) fragmenty w stosie tylnym nie będą otrzymywać wywołania zwrotnego do
onCreateView()
po odtworzeniu aktywności hostującej. FunkcjaonCreateView()
będzie teraz wywoływana tylko wtedy, gdy fragment będzie widoczny (tj. tylny stos zostanie wysunięty).
Poprawki błędów.
- Naprawiono błąd związany z używaniem tagu
<fragment>
w pliku XML i konstruktoracontentLayoutId
FragmentActivity
lubAppCompatActivity
. (B/129907905) - Naprawiono błąd polegający na tym, że po zmianie konfiguracji fragmenty z tylnego stosu nie były przenoszone do co najmniej
CREATED
, co powodowało nieprawidłowe usuwanie modeli ViewModel i fragmentów przechowywanych w elementach podrzędnych. (b/129593351) - Naprawiliśmy awarię w
restoreSaveState
powodowaną desynchronizacją zachowanych fragmentów po zapisaniu stanu instancji. (b/130433793) (Aosp/947824) - Rozwiązaliśmy problemy, które powodowały, że funkcja
OnBackPressedCallback
dodana z cyklem życia fragmentów nie była wywoływana, jeśli obiektFragmentManager
miał stos wsteczny. Więcej informacji znajdziesz na stronie androidx.activity 1.0.0-alpha07. (Aosp/948209) - Fragmenty nie wymuszają już używania atrybutu
LAYER_TYPE_HARDWARE
w przypadku animacji. Jeśli potrzebujesz animacji w warstwie sprzętowej, ustaw ją jako część animacji. (b/129486478)
Wersja 1.1.0-alpha06
3 kwietnia 2019 r.
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
i androidx.fragment:fragment-testing:1.1.0-alpha06
zostały udostępnione. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Wyjątki zgłoszone przez funkcję FragmentManager zawierają teraz nazwę fragmentu w wiadomości. (B/67759402)
Zmiany interfejsu API
Fragment
iFragmentActivity
zawierają teraz drugi konstruktor, który wymaga@LayoutRes int
, co zastępuje poprzednie zachowanie polegające na dodaniu adnotacji do klasy przy użyciu metody@ContentView
. Ta metoda działa zarówno w modułach aplikacji, jak i biblioteki. (b/128352521)- Element
onActivityResult()
FragmentActivity jest teraz prawidłowo oznaczony jako@CallSuper
. (b/127971684) - Metoda
instantiate
w FragmentFactory, która przyjmuje argument „Pakiet”, została wycofana. Aplikacje powinny używać nowego przeciążeniainstantiate
, które nie zajmuje pakietu. (B/128836103) - Metody usługi
FragmentScenario
są teraz prawidłowo oznaczone za pomocą adnotacji@StyleRes
. (Aosp/924193) - Usługa
FragmentTabHost
została wycofana. (b/127971835) - Pole
getThemedContext()
FragmentActivity zostało usunięte. (Aosp/934078)
Poprawki błędów.
- Naprawiono regresję w zakresie 1.1.0-alfa05, która powodowała miganie przychodzącego fragmentu na ekranie. (b/129405432)
- Rozwiązaliśmy problem, który powodował, że główny fragment nawigacji był tracony po wykonaniu serii operacji popBackStack+replace+popBackStack. (b/124332597)
- Rozwiązaliśmy problem z używaniem konstruktorów
@ContentView
w aktywności podczas przywracania stanu fragmentu. (B/127313094) - Poprawiliśmy logikę
setTargetFragment()
podczas zastępowania istniejącego fragmentu docelowego fragmentem, który nie jest jeszcze podłączony do FragmentManager. (Aosp/932156)
Wersja 1.1.0-alpha05
13 marca 2019 r.
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
i androidx.fragment:fragment-testing:1.1.0-alpha05
zostały udostępnione. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.
Nowe funkcje
- Wyszukiwania adnotacji (
@ContentView
) są teraz przechowywane w pamięci podręcznej (b/123709449)
Zmiany w działaniu
- Wywołanie
remove()
,hide()
,show()
,detach()
isetPrimaryNavigationFragment()
z fragmentem dołączonym do innego elementu FragmentManager powoduje teraz wysłanieIllegalStateException
zamiast błędu (aosp/904301)
Poprawki błędów.
- Pole
onNewIntent
dla domenyFragmentActivity
jest teraz prawidłowo oznaczone symbolem@CallSuper
(b/124120586) - Rozwiązaliśmy problem, który powodował, że funkcja
onDismiss()
użytkownikaDialogFragment
mogła być wywoływana 2 razy przy użyciu funkcjigetDialog().dismiss()
lubgetDialog().cancel()
(b/126563750)
Wersja 1.1.0-alfa04
7 lutego 2019 r.
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
i androidx.fragment:fragment-testing 1.1.0-alpha04
zostały udostępnione.
Nowe funkcje
- Dodano obsługę adnotacji klasy
@ContentView
, która umożliwia wskazanie pliku XML układu, który należy wyświetlić jako alternatywę dla zastąpieniaonCreateView()
. Zalecamy wyświetlenie powiązanych prac w tym języku:onViewCreated()
. (Aosp/837619). fragment-testing
korzysta teraz ze stabilnej wersjiandroidx.test:core-ktx
1.1.0 (b/121209673)- Możesz teraz używać
openActionBarOverflowOrOptionsMenu
z zasadąFragmentScenario
, aby testować menu opcji hostowanych fragmentów (b/121126668)
Zmiany interfejsu API
- Dodano metodę
requireArguments()
, która zwraca@NonNull Bundle
lub zwracaIllegalStateException
(b/121196360). - Dodaliśmy uwagę, że zasad
getLifecycle()
,getViewLifecycleOwner()
igetViewLifecycleOwnerLiveData()
nie należy zastępować i zostaną one sfinalizowane w przyszłej wersji. Jeśli zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (Aosp/880714) - Dodaliśmy uwagę, że klasy
getViewModelStore()
nie należy zastępować – w przyszłej wersji zostaną one zmienione na wersję ostateczną. Jeśli zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (Aosp/880713) - Naprawiono problem ze zgodnością plików binarnych z poprzednimi wersjami fragmentów kodu. (Aosp/887877) (Aosp/889834)
Poprawki błędów.
- Fragmenty docelowe są prawidłowo czyszczone podczas przekazywania
null
dosetTargetFragment()
. (Aosp/849969) - Rozwiązaliśmy problem, który powodował, że docelowe fragmenty kodu były czasami niedostępne w
onDestroy()
lub później. (b/122312935) - Funkcja onOdrzuć() w DialogFragment jest teraz wywoływana przed
onDestroy()
. (Aosp/874133) (Aosp/890734)
Wersja 1.1.0-alfa03
17 grudnia 2018 r.
Nowe funkcje
- Fragment implementuje teraz
BundleSavedStateRegistryOwner
i zależy od nowo opublikowanej biblioteki SavedState [aosp/824380] - Delegat właściwości
by activityViewModels
Kotlin został dodany w celu pobierania modeli widoków danych powiązanych z aktywnością [b/119050253] - Delegat właściwości
by viewModels
Kotlin został rozszerzony, aby przyjąć opcjonalną metodę lambda do pobierania identyfikatoraViewModelStoreOwner
. Umożliwia to przekazywanie fragmentu nadrzędnego lub innego niestandardowego elementuViewModelStoreOwner
za pomocą kodu takiego jakval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
Zmiany interfejsu API
FragmentScenario
pozwala teraz określić motyw, na przykładTheme.AppCompat
[b/119054431]. To jest przełomowa zmiana.- Dodano metodę
requireView()
, która zwraca@NonNull View
lub zwraca błądIllegalStateException
[b/120241368] - Dodano metodę
requireParentFragment()
, która zwraca@NonNull Fragment
lub zwraca błądIllegalStateException
[b/112103783]
Poprawki błędów.
- Usunięto błąd IllegalStateException: niepowodzenie zapisu stanu b/120814739
- Fragmenty przywracane ze stanu zapisanej instancji zawsze będą otrzymywać niepustą wartość
Bundle
[b/119794496] - Usunięte fragmenty nie są już ponownie używane z obiektem
Lifecycle
po ponownym dodaniu [b/118880674]
Wersja 1.1.0-alfa02
3 grudnia 2018 r.
Nowe funkcje
- Rozszerzenia Kotlin w narzędziu FragmentInvoice umożliwiają teraz użycie funkcji lambda na potrzeby konstruowania fragmentu jako alternatywy dla przekazywania w instancji
FragmentFactory
. (Aosp/812913).
Poprawki błędów.
- Naprawiono wyjątek IllegalStateException, gdy używano zagnieżdżonych fragmentów w stosie tylnym (b/119256498).
- Naprawiono awarię występującą podczas korzystania z
FragmentScenario.recreate()
z urządzeniemFragmentFactory
(aosp/820540) - Naprawiono problem, który powodował, że docelowe fragmenty kodu były niedostępne po usunięciu fragmentu (aosp/807634).
Wersja 1.1.0-alpha01
5 listopada 2018 r.
To jest pierwsza wersja programu
fragment-testing
artefakt i FragmentScenario
, który jest zbudowany na
androidx.test:core. Więcej informacji znajdziesz w dokumentacji dotyczącej testowania fragmentów.
Nowe funkcje
- Nowa klasa Fragmentmożliwy do testowania odizolowanych fragmentów kodu.
- Możesz teraz ustawić
FragmentFactory
na dowolnym urządzeniuFragmentManager
, aby kontrolować nowych instancji fragmentów kodu. - Dodano nowego przedstawiciela dostępu do usługi Kotlin
by viewModels()
do pobierania ViewModels z fragmentu. - Oczekujące zdarzenia wejściowe (takie jak kliknięcia) są teraz anulowane w przypadku fragmentu kodu
onStop()
Zmiany interfejsu API
- Znacznie rozszerzyliśmy adnotacje o wartości null w interfejsie Fragment API. na różnych powierzchniach.
Poprawki błędów.
- Rozwiąż problem, który powodował, że operacje na fragmentach z poziomu LiveData kończyły się niepowodzeniem (b/77944637)
Znane problemy
- Nie można uzyskać dostępu do docelowych fragmentów, gdy fragment został usunięty z FragmentManager.
- Funkcja
fragment-testing
korzysta z parametruandroidx.test:core:1.0.0-beta01
, a nie od prawidłowoandroidx.test:core:1.0.0
.