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