Fragment
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
13 sierpnia 2025 r. | 1.8.9 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od Fragmentu, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle
aplikacji lub modułu:
Odlotowe
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać 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.9
13 sierpnia 2025 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.9
Wersja 1.8.9 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że anulowanie gestu przewidywania wstecz, który powoduje wyskakujące ukrywanie, sprawiało, że kolejny gest nie był prawidłowo animowany podczas korzystania z animatorów. (I0a400, b/384765586)
- Rozwiązaliśmy problem, który powodował, że połączenie
setMaxLifecycle
ipopBackStack
mogło nie przenieść górnego fragmentu do stanu RESUMED. (I3448b, b/406127576)
Wersja 1.8.8
4 czerwca 2025 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.8
Wersja 1.8.8 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował awarię
FragmentManager
podczas próby zapisania stanu fragmentów dodanych za pomocąsetMaxLifecycle(Lifecycle.State.INITIALIZED)
. Te fragmenty, ponieważ nigdy nie przeszły przezonCreate()
, nie mają już zapisanego stanu ani wywołanegoonSaveInstanceState()
. (I6e37a)
Wersja 1.8.7
20 maja 2025 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.7
Wersja 1.8.7 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z nieprawidłowym stanem
FragmentManager
po operacjach pop i replace w tej samej ramce, który mógł powodować awarię w połączeniu z usuwaniem elementów z listy wstecznej za pomocąpopBackStack
lub gestu przewidywanego powrotu. (I50ad1) - Rozwiązanie problemu z awarią spowodowaną używaniem przejść AndroidX i sytuacją, w której szybkie, kolejne transakcje fragmentów próbują anulować nierozpoczęte przejście, a biblioteka przejść AndroidX nie czyści prawidłowo stanu przejścia. (patrz b/414612221). (Ib5235)
Wersja 1.8.6
12 lutego 2025 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.6
Wersja 1.8.6 zawiera te zmiany.
Poprawki błędów
- Zastąpienie
FragmentContainerView
setOnApplyWindowInsetsListener
przyjmuje teraz wartość null, co jest zgodne z tym, co dopuszcza platforma. (I575f0, b/282790626)
Wersja 1.8.5
30 października 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.5
Wersja 1.8.5 zawiera te zmiany.
Poprawki błędów
- Naprawiono
IllegalStateException
wywoływane przezsaveBackStack
tylko po anulowaniu lub przerwaniu gestu przewidywanego przejścia wstecz. (I3387d, b/342419080)
Wersja 1.8.4
2 października 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.4
Wersja 1.8.4 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował awarię fragmentów podczas szybkiego naciśnięcia przycisku Wstecz lub wykonania gestu Wstecz w systemie podczas korzystania z przejść Androidx. (Ibc038, b/364804225)
- Rozwiązaliśmy problem w fragmentach, który powodował, że przerwanie gestu przewidywania powrotu wprowadzało menedżera fragmentów w niezdefiniowany stan, a nawet powodowało wyświetlanie nieprawidłowego fragmentu. (If82e2, b/338624457)
- Naprawiliśmy
UninitializedPropertyAccessException
wAndroidFragment
podczas dynamicznej zamiany klasy, której używa instancjaAndroidFragment
. (I12dea)
Wersja 1.8.3
4 września 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.3
Wersja 1.8.3 zawiera te zmiany.
Poprawki błędów
FragmentManager
prawidłowo uwzględnia teraz operacje oczekujące podczas obsługi gestu przewidywanego przejścia wstecz. Dzięki temu cofnięcie systemu nie powinno już powodowaćIndexOutOfBoundsException
. (I9ba32, b/342316801)AndroidFragment
nie ulega już awarii, jeśli zostanie dodany do kompozycji, gdy stan zawierającego go działania lub fragmentu jest już zapisany. (I985e9, b/356643968)
Wersja 1.8.2
24 lipca 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.2
Wersja 1.8.2 zawiera te zmiany.
Poprawki błędów
AndroidFragment
prawidłowo obsługuje teraz przypadki, w których fragment nadrzędny jest umieszczany na liście Fragment back stack, co pozwala uniknąć problemów z komunikatem „No view found for id” (Nie znaleziono widoku o podanym identyfikatorze) podczas powrotu do tego fragmentu. (I94608)- Fragmenty dodane za pomocą metody
FragmentTransaction.add
, która przyjmujeViewGroup
, czekają teraz naonContainerAvailable
, zanim przejdą doonStart()
. Ma to wpływ na użytkowników tego interfejsu API, np.AndroidFragment
, który teraz czeka, ażAndroidFragment
ponownie wejdzie w skład, zanim przeniesie go przezonStart()
. (I94608)
Wersja 1.8.1
26 czerwca 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.1
Wersja 1.8.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że fragmenty bez kontenera były natychmiast
DESTROYED
po rozpoczęciu gestu przewidywania powrotu. Teraz są one w stanieCREATED
, dopóki gest nie zostanie ukończony. (If6b83, b/345244539)
Wersja 1.8.0
12 czerwca 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.0
Wersja 1.8.0 zawiera te zmiany.
Ważne zmiany od wersji 1.7.0
- Artefakt
fragment-compose
zawiera terazAndroidFragment
Composable
, który umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentu. Automatycznie zapisuje i przywraca stan fragmentu. Powinno to być bezpośrednie zastąpienie wcześniej zalecanej metody używaniaAndroidViewBinding
do powiększania fragmentu. - Wywołanie zwrotne
onBackStackChangeCancelled
w interfejsieOnBackStackChangedListener
usługiFragmentManager
jest teraz wywoływane w ramach wykonywania operacji w usłudzeFragmentManager
, co zbliża je do czasu wywołania zwrotnegoonBackStackChangeCommitted
.
Wersja 1.8.0-rc01
29 maja 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.0-rc01
Wersja 1.8.0-rc01 zawiera te zmiany.
Poprawki błędów
- Wywołanie zwrotne
onBackStackChangeCancelled
w interfejsieFragmentManagers OnBackStackChangedListener
jest teraz wywoływane w ramach wykonywania operacji wFragmentManager
, co zbliża je do czasu wywołania zwrotnegoonBackStackChangeCommitted
. (I5ebfb, b/332916112)
Wersja 1.8.0-beta01
14 maja 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.0-beta01
Wersja 1.8.0-beta01 zawiera te zmiany.
Poprawki błędów
- Z Fragmentu
1.7.1
: predykcyjne cofanie będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają animator lub przejście Androidx z możliwością wyszukiwania. Rozwiązaliśmy problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie czarnego ekranu. (I43037, b/339169168)
Wersja 1.8.0-alpha02
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.0-alpha02
Wersja 1.8.0-alpha02 zawiera te zmiany.
Poprawki błędów
- W sekcji Fragment
1.7.0-rc02
: dodano logi, które wskazują, dlaczego ustawieniesharedElement
bez żadnych innych przejść nie zostanie uruchomione. (Iec48e) - Z Fragment
1.7.0-rc02
: naprawiliśmy błąd, który powodował awarię, gdy do transakcji, w których wszystkie inne przejścia były możliwe do przewijania, dodano element wspólny, którego nie można było przewijać. Transakcja będzie teraz prawidłowo uznawana za nieprzeszukiwalną. (I18ccd)
Wersja 1.8.0-alpha01
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.8.0-alpha01
Wersja 1.8.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Nowa funkcja
AndroidFragment
Composable
umożliwia dodawanie fragmentów do hierarchii Compose za pomocą nazwy klasy fragmentu. Automatycznie zapisuje i przywraca stan fragmentu. Może to być bezpośredni zamiennik AndroidViewBindingComposable
.(b/312895363, Icf841)
Zmiany w dokumentacji
- Zaktualizowaliśmy dokumentację interfejsów API
OnBackStackChangedListener
, aby wskazać, kiedy są one wywoływane i jak należy ich używać. (I0bfd9)
Aktualizacja zależności
- Fragment zależy teraz od instalatora profilu 1.3.1.
Wersja 1.7
Wersja 1.7.1
14 maja 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.1
Wersja 1.7.1 zawiera te zmiany.
Poprawki błędów
- Przewidywanie powrotu będzie teraz działać tylko w przypadku transakcji, w których wszystkie fragmenty mają animator lub przejście AndroidX z możliwością wyszukiwania. Rozwiązaliśmy problem, który powodował, że anulowanie transakcji z możliwością częściowego przewijania powodowało wyświetlanie pustego ekranu. (I43037, b/339169168)
Wersja 1.7.0
1 maja 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0
Wersja 1.7.0 zawiera te zmiany.
Obsługa gestu przewidywanego powrotu
- Fragmenty obsługują teraz predykcyjne cofanie w aplikacji, gdy używasz
Animator
lub AndroidX Transition 1.5.0. Dzięki temu użytkownicy mogą użyć gestu cofania, aby zobaczyć poprzedni fragment, wyszukując Animator/Transition, zanim zdecydują się na zatwierdzenie transakcji przez dokończenie gestu lub anulowanie.
System przejściowy | Zasób XML | Obsługa przewidywanego przejścia wstecz |
---|---|---|
Animation |
R.anim |
Nie |
Animator |
R.animator |
Tak |
Framework Transition |
R.transition |
Nie |
AndroidX Transition z Transition w wersji 1.4.1 lub starszej |
R.transition |
Nie |
AndroidX Transition z Transition w wersji 1.5.0 |
R.transition |
Tak |
Jeśli po włączeniu gestu przewidywanego powrotu zauważysz problemy z obsługą przewidywanego powrotu we fragmentach, zgłoś problem dotyczący fragmentu, dołączając przykładowy projekt, w którym występuje ten problem. Aby wyłączyć predykcyjne cofanie, użyj FragmentManager.enabledPredictiveBack(false)
w onCreate()
aktywności.
FragmentManager.OnBackStackChangedListener()
udostępnia teraz odpowiednio onBackStackChangeProgressed()
i onBackStackChangeCancelled()
do odbierania zdarzeń związanych z przewidywanym postępem i anulowaniem.
Fragment Compose Artifact
Utworzyliśmy nowy artefakt fragment-compose
, który ma na celu wspieranie aplikacji przechodzących z architektury opartej na fragmentach na architekturę opartą w pełni na Compose.
Pierwszą funkcją dostępną w tym nowym artefakcie jest content
metoda rozszerzenia w Fragment
, która ułatwia korzystanie z Compose w interfejsie poszczególnych fragmentów przez utworzenie ComposeView
i ustawienie prawidłowego ViewCompositionStrategy
.
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Wersja 1.7.0-rc02
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-rc02
Wersja 1.7.0-rc02 zawiera te zmiany.
Poprawki błędów
- Dodano logi, które wskazują, dlaczego ustawienie
sharedElement
bez innych przejść nie zostanie uruchomione. (Iec48e) - Usunęliśmy błąd, który powodował awarię, gdy do transakcji, w których wszystkie inne przejścia były możliwe do przewinięcia, dodano element udostępniony, którego nie można przewinąć. Transakcja będzie teraz prawidłowo uznawana za nieprzeszukiwalną. (I18ccd)
Wersja 1.7.0-rc01
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-rc01
Wersja 1.7.0-rc01 zawiera te zmiany.
Aktualizacja zależności
- Fragment zależy teraz od instalatora profilu 1.3.1.
Wersja 1.7.0-beta01
20 marca 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-beta01
Wersja 1.7.0-beta01 zawiera te commity.
Zmiany w interfejsie API
FragmentHostCallback
jest teraz napisana w języku Kotlin, dzięki czemu dopuszczalność wartości null w typie ogólnym hosta jest zgodna z dopuszczalnością wartości null w typie zwracanym przezonGetHost()
. (I40af5)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po zatwierdzeniu gestu przewidywanego powrotu we fragmencie, który nie znajduje się w kontenerze, fragment ten nigdy nie był niszczony. Fragment zostanie natychmiast przeniesiony do stanu końcowego. (Ida0d9)
- Rozwiązaliśmy problem w fragmentach, który powodował, że przerwanie przychodzących przejść gestem przewidywania powrotu niszczyło widok wejściowy i pozostawiało pusty ekran. (Id3f22, b/319531491)
Wersja 1.7.0-alpha10
7 lutego 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha10
Wersja 1.7.0-alpha10 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy znany problem z poprzedniej wersji Fragmentu, w którym użycie obsługi przewidywanego powrotu Fragmentu w przypadku
Animator
lub AndroidX Transition powodowało, że Fragmenty zgłaszały wyjątekNullPointerException
zhandleOnBackProgressed
, jeśli nigdy nie dodanoFragmentManager.OnBackStackChangedListener
za pomocąaddOnBackStackChangedListener
. (I7c835)
Wersja 1.7.0-alpha09
24 stycznia 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha09
Wersja 1.7.0-alpha09 zawiera te zmiany.
Fragment Compose Artifact
Utworzyliśmy nowy artefakt fragment-compose
, który ma na celu wspieranie aplikacji przechodzących z architektury opartej na fragmentach na architekturę opartą w pełni na Compose.
Pierwszą funkcją dostępną w tym nowym artefakcie jest content
metoda rozszerzenia w Fragment
, która ułatwia korzystanie z Compose w interfejsie poszczególnych fragmentów przez utworzenie ComposeView
i ustawienie prawidłowego ViewCompositionStrategy
. (561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Nowe funkcje
FragmentManager.OnBackStackChangedListener()
udostępnia teraz odpowiednioonBackStackChangeProgressed()
ionBackStackChangeCancelled()
do odbierania zdarzeń związanych z przewidywanym postępem i anulowaniem. (214b87)
Znany problem
- Jeśli używasz funkcji Fragmentu Predictive Back w przypadku
Animator
lub AndroidX Transition, Fragmenty będą zgłaszać wyjątekNullPointerException
zhandleOnBackProgressed
, jeśli nigdy nie dodanoFragmentManager.OnBackStackChangedListener
za pomocąaddOnBackStackChangedListener
. Ręczne dodanie detektora pozwoli uniknąć awarii. Poprawka będzie dostępna w kolejnej wersji Fragmentów.
Wersja 1.7.0-alpha08
10 stycznia 2024 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha08
Wersja 1.7.0-alpha08 zawiera te commity.
Czyszczenie
- 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.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha07
Wersja 1.7.0-alpha07 zawiera te zmiany.
Poprawki błędów
- Usunęliśmy błąd
NullPointerException
, który był spowodowany ustawieniem przejścia elementu udostępnionego i nieustawieniem przejścia wejścia/wyjścia. (I8472b) - Z Fragment
1.6.2
: gdyFragmentContainerView
jest rozwijany, jego stany, takie jakFragmentManager
, Host i id, są teraz dostępne w wywołaniu zwrotnymonInflate
. (I1e44c, b/307427423) - Z Fragment
1.6.2
: gdy używaszclearBackStack
do usuwania zestawu fragmentów, wszystkie zagnieżdżoneViewModel
fragmentu zostaną teraz wyczyszczone, gdy zostaną wyczyszczoneViewModels
fragmentu nadrzędnego. (I6d83c, b/296173018)
Wersja 1.7.0-alpha06
4 października 2023 roku
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha06
Wersja 1.7.0-alpha06 zawiera te commity.
Aktualizacja zależności
- Fragmenty zostały zaktualizowane, aby zależeć od nowego
animateToStart
interfejsu API dodanego w Transition1.5.0-alpha04
.
Wersja 1.7.0-alpha05
20 września 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha05
Wersja 1.7.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Fragmenty obsługują teraz funkcję przewidywania powrotu podczas korzystania z przejść Androidx. Dzięki temu możesz użyć gestu cofania, aby przejść do poprzedniego fragmentu z niestandardowym przejściem Androidx, zanim zdecydujesz się zatwierdzić lub anulować transakcję za pomocą ukończonego gestu. Aby włączyć tę funkcję, musisz korzystać z wersji Przejście
1.5.0-alpha03
. (Ib49b4, b/285175724)
Znane problemy
- Obecnie występuje problem, który powoduje, że po anulowaniu gestu cofania z przejściem następnym razem, gdy zaczniesz wykonywać ten gest, przejście nie zostanie uruchomione i wyświetli się pusty ekran. Może to być spowodowane problemem w bibliotece Transition. (b/300157785). Jeśli zauważysz ten problem, zgłoś go w przypadku komponentu Fragment i dołącz przykładowy projekt, w którym występuje. Aby wyłączyć predykcyjne cofanie, użyj
FragmentManager.enabledPredictiveBack(false)
wonCreate()
aktywności.
Wersja 1.7.0-alpha04
6 września 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha04
Wersja 1.7.0-alpha04 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że podczas anulowania gestu przewidywanego powrotu fragmenty nie przechodziły do prawidłowego stanu cyklu życia. (I7cffe, b/297379023)
- Usunęliśmy regresję, która umożliwiała uruchamianie animacji z przejściami. (I59f36)
- Rozwiązaliśmy problem, który występował podczas używania funkcji przewidywanego powrotu z fragmentami. Próba dwukrotnego szybkiego powrotu w przedostatnim fragmencie na stosie wstecznym powodowała awarię. (Ifa1a4)
Wersja 1.7.0-alpha03
23 sierpnia 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha03
Wersja 1.7.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z fragmentami podczas korzystania z przewidywanego powrotu, który powodował pomijanie pierwszego fragmentu na liście fragmentów menedżera fragmentów i zakończenie działania podczas korzystania z powrotu systemowego za pomocą nawigacji 3-przyciskowej lub gestu przewidywanego powrotu. (I0664b, b/295231788)
Wersja 1.7.0-alpha02
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha02
Wersja 1.7.0-alpha02 zawiera te zmiany.
Poprawki błędów
- Jeśli używasz fragmentów z gestami przewidywanego powrotu w API 34 i systemu przejść, który nie obsługuje wyszukiwania (
Animations
,Transitions
), lub nie używasz żadnych przejść, fragmenty będą teraz czekać na zakończenie gestu przed wykonaniem działania powrotu. (I8100c)
Wersja 1.7.0-alpha01
7 czerwca 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.7.0-alpha01
Ta wersja jest opracowywana w wewnętrznej gałęzi.
Nowe funkcje
- Fragmenty obsługują teraz predykcyjne cofanie w aplikacji podczas korzystania z
Animator
. Dzięki temu możesz użyć gestu przejścia wstecz, aby zobaczyć poprzedni fragment z niestandardowym animatorem, zanim zdecydujesz, czy chcesz zatwierdzić transakcję za pomocą ukończonego gestu, czy ją anulować. Możesz też wyłączyć to nowe działanie, używając eksperymentalnego parametruenablePredictiveBack()
i przekazując wartośćfalse
.
Wersja 1.6
Wersja 1.6.2
1 listopada 2023 roku
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.2
Wersja 1.6.2 zawiera te zmiany.
Poprawki błędów
- Gdy fragment
FragmentContainerView
jest rozwijany, jego stany, takie jakFragmentManager
, Host i id, są teraz dostępne w wywołaniu zwrotnymonInflate
. (I1e44c, b/307427423) - Gdy używasz
clearBackStack
do usuwania zestawu fragmentów, wszystkie zagnieżdżone fragmentyViewModel
są teraz czyszczone, gdy czyszczone sąViewModels
fragmentu nadrzędnego. (I6d83c, b/296173018)
Wersja 1.6.1
26 lipca 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.1
Wersja 1.6.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że zapisany stan przechowywany po zatrzymaniu działania, ale nie po jego zniszczeniu, był nieprawidłowo zapisywany w pamięci podręcznej nawet po przywróceniu instancji fragmentu do stanu
RESUMED
. Spowoduje to ponowne użycie stanu zapisanego w pamięci podręcznej, jeśli instancja fragmentu znajdowała się na liście wstecznej podczas korzystania z interfejsu API wielu list wstecznych do zapisywania i przywracania tego fragmentu. (I71288, b/246289075)
Aktualizacja zależności
- Fragment zależy teraz od Activity 1.7.2. Rozwiązaliśmy problem, który powodował, że użytkownicy języka Kotlin nie mogli rozszerzać klasy
ComponentDialog
bez jawnej zależności od klasy Activity. (b/287509323)
Wersja 1.6.0
7 czerwca 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0
Wersja 1.6.0 zawiera te zmiany.
Ważne zmiany od wersji 1.5.0
- Zapisany stan
Fragment
s został całkowicie podzielony na stan biblioteki prywatnej (niestandardowe klasyParcelable
) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany wBundle
, co pozwala dokładnie określić, skąd pochodzi stan fragmentu. - Interfejs
FragmentManager.OnBackStackChangedListener
został rozszerzony o 2 dodatkowe wywołania zwrotne:onBackStackChangeStarted
ionBackStackChangeCommitted
. Są one wywoływane z każdymFragment
odpowiednio tuż przed dodaniem lub usunięciem z listy wstecznej fragmentu oraz tuż po zatwierdzeniu transakcji. FragmentStrictMode
dodano nowyWrongNestedHierarchyViolation
, który wykrywa, kiedy fragment podrzędny jest zagnieżdżony w hierarchii widoków fragmentu nadrzędnego, ale nie jest dodany dochildFragmentManager
fragmentu nadrzędnego.- Interfejsy API
Fragment
iFragmentManager
, które przyjmująIntent
lubIntentSender
, są teraz prawidłowo oznaczone adnotacją@NonNull
, aby zapobiec przekazywaniu wartości null, ponieważ zawsze powodowałoby to natychmiastowe awarie odpowiednich interfejsów API platformy Android, do których te metody się odwołują. DialogFragment
udostępnia teraz dostęp do podstawowej usługiComponentDialog
za pomocą interfejsurequireComponentDialog()
API.- Fragment zależy teraz od Lifecycle
2.6.1
. - Fragment zależy teraz od SavedState
1.2.1
. - Fragment zależy teraz od ProfileInstaller
1.3.0
. Artefakt
fragment-testing-manifest
oddziela wpisy w pliku manifestu od pozostałych komponentów testowania fragmentów. Oznacza to, że możesz:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Pozwala to uniknąć konfliktów spowodowanych różnicami w wersjach między
fragment-testing
aandroidx.test
.
Wersja 1.6.0-rc01
10 maja 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-rc01
Wersja 1.6.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował wysyłanie
ActivityResult
z nieprawidłowym kodem żądania, gdy kilka żądaństartActivityForResult
było wysyłanych kolejno. (If0b9d, b/249519359) - Rozwiązaliśmy problem, który powodował, że wywoływane były funkcje zwrotne
onBackStackChangeListener
w przypadku transakcji, które w rzeczywistości nie zmieniały stosu wstecznego, jeśli były połączone z transakcjami, które go zmieniały. (I0eb5c, b/279306628)
Wersja 1.6.0-beta01
19 kwietnia 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-beta01
Wersja 1.6.0-beta01 zawiera te zmiany.
Poprawki błędów
- Użycie
postponeEnterTransition
z limitem czasu, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku odroczonego fragmentu. (I2ec7d, b/276375110) - Nowe wywołania zwrotne
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.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-alpha09
Wersja 1.6.0-alpha09 zawiera te zmiany.
Zmiany w interfejsie API
DialogFragment
udostępnia teraz dostęp do podstawowej usługiComponentDialog
za pomocą interfejsurequireComponentDialog()
API. (I022e3, b/234274777)- Interfejsy API fragmentów
commitNow()
,executePendingTransactions()
ipopBackStackImmediate()
zostały oznaczone adnotacją@MainThread
, co oznacza, że będą teraz zgłaszać błędy kompilacji, gdy nie są wywoływane z głównego wątku, zamiast czekać na błąd w czasie działania. (Ic9665, b/236538905)
Poprawki błędów
- Usunęliśmy błąd w
FragmentManager
, który powodował awarię podczas zapisywania i przywracania w tej samej klatce. (Ib36af, b/246519668) - Wywołania zwrotne
OnBackStackChangedListener
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.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-alpha08
Wersja 1.6.0-alpha08 zawiera te zmiany.
Zmiana zachowania
- Czas wywołania zwrotnego
OnBackStackChangedListener.onBackStackChangeCommited
został dostosowany tak, aby wywoływać je przed wykonaniem operacji fragmentu. Dzięki temu wywołanie zwrotne nigdy nie otrzyma odłączonego fragmentu. (I66a76, b/273568280)
Poprawki błędów
- Z Fragment
1.5.6
: rozwiązaliśmy problem, który powodował, że wywoływanie funkcjiclearFragmentResultListener
w funkcjisetFragmentResultListener
nie działało, jeśli funkcjaLifecycle
była jużSTARTED
i wynik był już dostępny. (If7458)
Aktualizacje zależności
- Fragment zależy teraz od Lifecycle
2.6.1
. (586fe7) - Fragment zależy teraz od SavedState
1.2.1
. (078e4e) - Fragment zależy teraz od ProfileInstaller
1.3.0
. (3fc05b)
Wersja 1.6.0-alpha07
8 marca 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-alpha07
Wersja 1.6.0-alpha07 zawiera te zmiany.
Poprawki błędów
- Fragment
1.5.6
: rozwiązaliśmy problem, który powodował, że usunięcie dowolnego fragmentu, niezależnie od tego, czy zawierał dodane elementy menu, unieważniało menu aktywności. (50f098, b/244336571)
Wersja 1.6.0-alpha06
22 lutego 2023 roku
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-alpha06
Wersja 1.6.0-alpha06 zawiera te zmiany.
Zmiana zachowania
- Nowe wywołanie zwrotne
onBackStackChangedStarted
wFragmentManager
będzie teraz wykonywane, zanim fragmenty zaczną przechodzić do stanów docelowych.onBackStackChangedListener
(I34726)
Wersja 1.6.0-alpha05
8 lutego 2023 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-alpha05
Wersja 1.6.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Interfejs
FragmentManager.OnBackStackChagnedListener
oferuje teraz 2 dodatkowe wywołania zwrotne:onBackStackChangeStarted
ionBackStackChangeCommitted
, które umożliwiają przekazywanie dodatkowych informacji i kontrolę, gdy wFragmentManager
nastąpią zmiany w stosie wstecznym. (Ib7ce5, b/238686802)
Zmiany w interfejsie API
- Interfejsy API
Fragment
iFragmentManager
, które przyjmująIntent
lubIntentSender
, są teraz prawidłowo oznaczone adnotacją@NonNull
, aby zapobiec przekazywaniu wartości null, ponieważ zawsze powodowałoby to natychmiastowe awarie odpowiednich interfejsów API platformy Android, do których te metody się odwołują. (I06fd4)
Wersja 1.6.0-alpha04
7 grudnia 2022 r.
Zostanie wycofaneandroidx.fragment:fragment-*:1.6.0-alpha04
Wersja 1.6.0-alpha04 zawiera te zmiany.
Nowe funkcje
FragmentStrictMode
dodano nowyWrongNestedHierarchyViolation
, który wykrywa, kiedy fragment podrzędny jest zagnieżdżony w hierarchii widoków fragmentu nadrzędnego, ale nie jest dodany dochildFragmentManager
fragmentu nadrzędnego. (I72521, b/249299268)
Zmiany w zachowaniu
- Fragmenty przywracają teraz stan
SavedStateRegistry
przedonAttach()
, dzięki czemu jest on dostępny we wszystkich metodach cyklu życia w górę. (I1e2b1)
Zmiany w interfejsie API
- Artefakt
fragment-testing-manifest
oddziela wpisy w pliku manifestu od pozostałych komponentów testowania fragmentów. Oznacza to, że możesz:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Pozwala to uniknąć konfliktów spowodowanych różnicami w wersjach między fragment-testing
a androidx.test
.(I8e534, b/128612536)
Poprawki błędów
- Z Fragment
1.5.5
: fragmenty nie będą już nieprawidłowo zapisywać stanuViewModel
jako części stanu zapisanego w rejestrze widoków. (I10d2b, b/253546214)
Wersja 1.6.0-alpha03
5 października 2022 r.
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
i androidx.fragment:fragment-testing:1.6.0-alpha03
są zwalniane. Wersja 1.6.0-alpha03 zawiera te zmiany.
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 integracją nowych interfejsów wywołań zwrotnych dostawcy (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
), aby zapewnić, że fragmenty zawsze otrzymują odpowiednie wywołania zwrotne. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
Wersja 1.6.0-alpha02
24 sierpnia 2022 r.
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
i androidx.fragment:fragment-testing:1.6.0-alpha02
są zwalniane. Wersja 1.6.0-alpha02 zawiera te zmiany.
Poprawki błędów
- Z Fragmentu
1.5.2
: rozwiązano problem, który powodował, że jednoczesne wykonywanie transakcjipopBackStack()
ireplace()
mogło sprawić, że fragmenty wychodzące uruchamiały nieprawidłoweAnimation
/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
są zwalniane. Wersja 1.6.0-alpha01 zawiera te zmiany.
Zmiany w zachowaniu
- Zapisany stan
Fragment
s został całkowicie podzielony na stan biblioteki prywatnej (niestandardowe klasyParcelable
) i stan dostarczony przez dewelopera, który jest teraz zawsze przechowywany wBundle
, co pozwala dokładnie określić, skąd pochodzi stan fragmentu. (b/207158202)
Poprawki błędów
- Z Fragmentu
1.5.1
: naprawiono regresję wDialogFragmentCallbacksDetector
, w której użycie wersji narzędzia lint dołączonej do AGP 7.4 powodowało awarię tego narzędzia. (b/237567009)
Aktualizacja zależności
- Z Fragment
1.5.1
: biblioteka Fragment jest teraz zależna od Lifecycle2.5.1
. (Id204c) - Z Fragment
1.5.1
: biblioteka Fragment zależy teraz od Activity1.5.1
. (I10f07)
Wersja 1.5
Wersja 1.5.7
19 kwietnia 2023 r.
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
i androidx.fragment:fragment-testing:1.5.7
są zwalniane. Wersja 1.5.7 zawiera te zmiany.
Poprawki błędów
- Użycie
postponeEnterTransition
z limitem czasu, a następnie zastąpienie odroczonego fragmentu nie powoduje już wycieku odroczonego fragmentu. (I2ec7d, b/276375110)
Wersja 1.5.6
22 marca 2023 r.
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
i androidx.fragment:fragment-testing:1.5.6
są zwalniane. Wersja 1.5.6 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że usunięcie dowolnego fragmentu, niezależnie od tego, czy zawierał dodane elementy menu, unieważniało menu aktywności. (50f098, b/244336571)
- Rozwiązaliśmy problem, który powodował, że wywoływanie funkcji
clearFragmentResultListener
w funkcjisetFragmentResultListener
nie działało, jeśli funkcjaLifecycle
była jużSTARTED
i wynik był już dostępny. (If7458)
Wersja 1.5.5
7 grudnia 2022 r.
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
i androidx.fragment:fragment-testing:1.5.5
są zwalniane. Wersja 1.5.5 zawiera te zmiany.
Poprawki błędów
- Fragmenty nie będą już nieprawidłowo zapisywać stanu
ViewModel
jako części stanu zapisanego w rejestrze widoków. (I10d2b, b/253546214)
Wersja 1.5.4
24 października 2022 r.
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
i androidx.fragment:fragment-testing:1.5.4
są zwalniane. Wersja 1.5.4 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd, który powodował, że użycie niestandardowego elementu
FragmentController
z hostem, który nie implementuje interfejsu wywołania zwrotnego dostawcy (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
), i wywołanie jego wycofanej funkcji dispatch nie powodowało wysyłania do fragmentów podrzędnych. (I9b380)
Wersja 1.5.3
21 września 2022 r.
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
i androidx.fragment:fragment-testing:1.5.3
są zwalniane. Wersja 1.5.3 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd, który powodował, że fragmenty na stosie wstecznym otrzymywały wywołania zwrotne
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
ionConfigurationChanged()
. (I34581, I8dfe6, b/242570955) - Zagnieżdżone fragmenty podrzędne nie będą już otrzymywać wielu wywołań zwrotnych
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
anionConfigurationChanged()
. (I690b3, Id0096, If9d6b, I2cba2)
Wersja 1.5.2
10 sierpnia 2022 r.
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
i androidx.fragment:fragment-testing:1.5.2
są zwalniane. Wersja 1.5.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że jednoczesne wykonanie transakcji
popBackStack()
ireplace()
mogło sprawić, że fragmenty wychodzące uruchamiały nieprawidłową funkcjęAnimation
/Animator
. (Ib1c07, b/214835303)
Wersja 1.5.1
27 lipca 2022 roku
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
i androidx.fragment:fragment-testing:1.5.1
są zwalniane. Wersja 1.5.1 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy regresję w
DialogFragmentCallbacksDetector
, w której użycie wersji lint dołączonej do AGP 7.4 powodowało awarię lint. (b/237567009)
Aktualizacja zależności
- Biblioteka Fragment jest teraz zależna od Lifecycle
2.5.1
. (Id204c) - Biblioteka Fragment jest teraz zależna od Activity
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
są zwalniane. Wersja 1.5.0 zawiera te zmiany.
Ważne zmiany od wersji 1.4.0
- Integracja CreationExtras –
Fragment
może teraz udostępniać bezstanowyViewModelProvider.Factory
za pomocą Lifecycle2.5.0
’sCreationExtras
. - Integracja okna komponentu –
DialogFragment
używa terazComponentDialog
za pomocą Activity1.5.0
jako domyślnego okna dialogowego zwracanego przezonCreateDialog()
. - Refaktoryzacja stanu zapisanej instancji – fragmenty zaczęły zmieniać sposób zapisywania stanu instancji. Ma to na celu wyraźne określenie, jaki stan został zapisany we fragmencie i skąd pochodzi. Obecne zmiany obejmują:
FragmentManager
zapisuje teraz stan zapisanej instancji w obiekcieBundle
zamiast bezpośrednio w niestandardowym obiekcieParcelable
.- Wyniki ustawione za pomocą metody
Fragment Result APIs
, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznegoFragmentManager
. - Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego elementu
FragmentManager
, co umożliwia powiązanie ilości zapisanego stanu powiązanego z poszczególnym fragmentem z unikalnymi identyfikatorami występującymi w rejestrowaniu debugowania elementuFragmentManager
.Fragment
Inne zmiany
FragmentStrictMode
umożliwia teraz prywatnym fragmentom kodu pochodzącym od zewnętrznych dostawców omijanie określonych kar za naruszenia zasad przez używanieallowViolation()
z nazwą klasy.- Interfejsy Fragment API do udostępniania menu w
ActionBar
aktywności zostały wycofane. Interfejsy APIMenuHost
iMenuProvider
dodane w Activity1.4.0
zapewniają testowalną powierzchnię interfejsu API, która jest zgodna z cyklem życia i której powinny używać fragmenty.
Wersja 1.5.0-rc01
11 maja 2022 roku
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
i androidx.fragment:fragment-testing:1.5.0-rc01
są zwalniane. Wersja 1.5.0-rc01 zawiera te zmiany.
Refaktoryzacja zapisanego stanu instancji
- Stan powiązany z każdym fragmentem jest teraz zapisywany oddzielnie od stanu wewnętrznego elementu
FragmentManager
, co umożliwia powiązanie ilości zapisanego stanu z poszczególnymi fragmentami z unikalnymi identyfikatorami występującymi w rejestrowaniu debugowania fragmentów. (a153e0, b/207158202)
Wersja 1.5.0-beta01
20 kwietnia 2022 r.
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
i androidx.fragment:fragment-testing:1.5.0-beta01
są zwalniane. Wersja 1.5.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
DialogFragment
dodała nową metodędismissNow
, która używacommitNow
, aby zapewnić zgodność z funkcjąshowNow
. Pamiętaj, że nie spowoduje to natychmiastowego zamknięcia elementuDialog
, a jedynie synchroniczną aktualizację stanu elementuFragmentManager
. (I15c36, b/72644830)
Refaktoryzacja zapisanego stanu instancji
FragmentManager
zapisuje teraz stan zapisanej instancji w obiekcieBundle
zamiast bezpośrednio w niestandardowym obiekcieParcelable
. To pierwszy krok w kierunku zapewnienia większej przejrzystości w zakresie tego, co jest zapisywane przez fragmenty. (I93807, b/207158202)- Wyniki ustawione za pomocą interfejsów Fragment Result API, które nie zostały jeszcze dostarczone, są teraz zapisywane oddzielnie od stanu wewnętrznego
FragmentManager
. Dzięki temu będziesz mieć większą przejrzystość w zakresie wyników zapisywanych w ramach stanu zapisanej instancji. (I6ea12, b/207158202)
Wersja 1.5.0-alpha05
6 kwietnia 2022 roku
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
i androidx.fragment:fragment-testing:1.5.0-alpha05
są zwalniane. Wersja 1.5.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
setHasOptionsMenu()
użytkownikaFragment
zostało wycofane. Do zarządzania menu i jego elementami należy używać nowych interfejsów API menu zgodnie z informacjami o wersji1.5.0-alpha04
Fragment. (I7b4b4, b/226438239)
Wersja 1.5.0-alpha04
23 marca 2022 r.
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
i androidx.fragment:fragment-testing:1.5.0-alpha04
są zwalniane. Wersja 1.5.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Interfejsy Fragment API do udostępniania menu w
ActionBar
aktywności zostały wycofane, ponieważ ściśle wiążą fragment z aktywnością i nie można ich testować osobno. Interfejsy APIMenuHost
iMenuProvider
dodane w Activity1.4.0-alpha01
zapewniają testowalną powierzchnię interfejsu API, która jest zgodna z cyklem życia i której powinny używać fragmenty. (I50a59, I20758)
Poprawki błędów
SavedStateViewFactory
obsługuje teraz używanieCreationExtras
nawet wtedy, gdy zostało zainicjowane za pomocąSavedStateRegistryOwner
. Jeśli podasz dodatkowe informacje, zainicjowane argumenty zostaną zignorowane. (I6c43b, b/224844583)
Wersja 1.5.0-alpha03
23 lutego 2022 r.
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
i androidx.fragment:fragment-testing:1.5.0-alpha03
są zwalniane. Wersja 1.5.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Możesz teraz przekazywać wartość
CreationExtras
do funkcjiby viewModels()
iby activityViewModels()
. (Ibefe7, b/217601110)
Zmiany w zachowaniu
DialogFragment
używa terazComponentDialog
jako domyślnego okna dialogowego zwracanego przezonCreateDialog()
. (If3784, b/217618170)
Wersja 1.5.0-alpha02
9 lutego 2022 r.
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
i androidx.fragment:fragment-testing:1.5.0-alpha02
są zwalniane. Wersja 1.5.0-alpha02 zawiera te zmiany.
Nowe funkcje
FragmentStrictMode
umożliwia teraz prywatnym fragmentom kodu pochodzącym od zewnętrznych dostawców omijanie określonych kar za naruszenia zasad przez używanieallowViolation()
z nazwą klasy. (I8f678)
Wersja 1.5.0-alpha01
26 stycznia 2022 r.
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
i androidx.fragment:fragment-testing:1.5.0-alpha01
są zwalniane. Wersja 1.5.0-alpha01 zawiera te zmiany.
Nowe funkcje
Fragment
jest teraz zintegrowany z interfejsem ViewModel CreationExtras, który został wprowadzony w ramach Lifecycle2.5.0-alpha01
. (I3060b, b/207012585)
Poprawki błędów
- Z Fragment
1.4.1
:FragmentContainerView
nie zgłasza już wyjątku nieprawidłowego stanu, gdy identyfikatory widoków wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140) - Z Fragment
1.4.1
: jeśli używasz niestandardowej funkcji lambdaownerProducer
z funkcją leniwąby viewModels()
, będzie ona teraz używać funkcjidefaultViewModelProviderFactory
tego właściciela, jeśli nie podasz niestandardowej funkcjiViewModelProvider.Factory
, zamiast zawsze używać fabryki fragmentu. (I56170, b/214106513) - Naprawiliśmy awarię, która występowała podczas pierwszego dostępu do
ViewModel
z wywołania zwrotnegoregisterForActivityResult()
wFragment
. (Iea2b3)
Wersja 1.4
Wersja 1.4.1
26 stycznia 2022 r.
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
i androidx.fragment:fragment-testing:1.4.1
są zwalniane. Wersja 1.4.1 zawiera te zmiany.
Poprawki błędów
FragmentContainerView
nie zgłasza już wyjątku nieprawidłowego stanu, gdy identyfikatory widoków wygenerowane z pliku XML mają wartości ujemne. (Ic185b, b/213086140)- Gdy używasz niestandardowej
ownerProducer
lambdy z funkcjąby viewModels()
lazy, będzie ona teraz używaćdefaultViewModelProviderFactory
z tego właściciela, jeśli nie podano niestandardowegoViewModelProvider.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
są zwalniane. Wersja 1.4.0 zawiera te zmiany.
Ważne zmiany od wersji 1.3.0
- Interfejsy
FragmentStrictMode
API zapewniają sprawdzanie w czasie działania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy, nie wywołują wycofanych interfejsów API fragmentów. Gdy zostanie wykryte naruszenie, możesz wydrukować komunikat dziennika, wywołać własny niestandardowy odbiornik lub spowodować awarię aplikacji. WartośćFragmentStrictMode.Policy
, która określa, jakie kontrole są włączone i jakie „kary” są wywoływane, można ustawić wFragmentManager
za pomocą nowej metodysetStrictModePolicy()
. Ta zasada dotyczy tegoFragmentManager
i przechodzi na wszystkich menedżerów fragmentów podrzędnych, którzy nie ustawili własnej, unikalnej zasady. Zobacz StrictMode w przypadku fragmentów. FragmentContainerView
udostępnia teraz metodęgetFragment()
, która zwraca fragment ostatnio dodany do kontenera. Działa to tak samo jakfindFragmentById()
z identyfikatoremFragmentContainerView
, ale umożliwia łączenie wywołań.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
implementuje terazCloseable
, co umożliwia używanie go z metodąuse
w języku Kotlin lub z konstrukcją try-with-resources.Dodano
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
określa, czy w przejściu między fragmentami ma być włączona standardowa animacja przejścia aktywności zaczerpnięta z motywu.Eksperymentalny interfejs API
FragmentManager.enableNewStateManager(boolean)
został usunięty, a nowy menedżer stanu jest teraz jedyną dostępną opcją.
Wiele stosów wstecznych
FragmentManager
utrzymuje stos wsteczny składający się z transakcji fragmentów, które używały addToBackStack()
. Dzięki temu możesz wycofać te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywania stanu za pomocą fragmentów, aby fragmenty mogły odpowiednio przywrócić swój stan.
Ta wersja rozszerza te mechanizmy, udostępniając 3 nowe interfejsy API: FragmentManager
, saveBackStack(String name)
i restoreBackStack(String name)
.clearBackStack(String name)
Te interfejsy API używają tego samego name
co addToBackStack()
, aby zapisać stan FragmentTransaction
i stan każdego fragmentu dodanego w tych transakcjach. Umożliwiają one późniejsze przywrócenie tych transakcji i ich fragmentów w niezmienionym stanie. Pozwala to skutecznie „przełączać się” między kilkoma stosami wstecznymi przez zapisanie bieżącego stosu wstecznego i przywrócenie zapisanego stosu wstecznego.
saveBackStack()
działa podobnie do popBackStack()
, ponieważ jest asynchroniczne i powoduje odwrócenie („wycofanie”) wszystkich transakcji fragmentów do tej konkretnej nazwy oraz zniszczenie i usunięcie wszystkich dodanych fragmentów, ale różni się od niego w kilku ważnych aspektach:
saveBackStack()
zawsze obejmuje podany zakres.- W przeciwieństwie do metody
popBackStack()
, która usuwa wszystkie transakcje z listy wstecznej, jeśli określona nazwa nie zostanie na niej znaleziona lub jeśli podano wartość null, metodasaveBackStack()
nie wykonuje żadnych działań, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą metodyaddToBackStack()
z dokładnie taką samą, niepustą nazwą. - Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest zapisywany, wywoływana jest funkcja
onSaveInstanceState()
każdego fragmentu, a stan jest przywracany. Wszystkie instancjeViewModel
powiązane z tymi fragmentami są zachowywane (a funkcjaonCleared()
nie jest na nich wywoływana).
Transakcje fragmentowe, których można używać z funkcją saveBackStack()
, muszą spełniać określone kryteria:
- Każda transakcja fragmentu musi używać
setReorderingAllowed(true)
, aby można było przywrócić transakcje jako jedną, niepodzielną operację. - Zapisany zestaw transakcji musi być samodzielny (tzn. nie może zawierać wyraźnych odwołań do fragmentów poza tym zestawem), aby można go było przywrócić w dowolnym późniejszym czasie, niezależnie od zmian wprowadzonych w międzyczasie w historii.
- Żaden zapisany fragment nie może być fragmentem zachowanym ani mieć w swoim przechodnim zbiorze fragmentów podrzędnych fragmentu zachowanego. Dzięki temu
FragmentManager
nie będzie zwracać żadnych odwołań do zapisanych fragmentów po zapisaniu stosu wstecznego.
Podobnie jak w przypadku funkcji saveBackStack()
, restoreBackStack()
i clearBackStack()
, które odpowiednio przywracają lub czyszczą wcześniej zapisaną listę wstecz, obie te funkcje nie robią nic, jeśli wcześniej nie wywołasz funkcji saveBackStack()
z tą samą nazwą.
Więcej informacji znajdziesz w artykule Wiele stosów wstecznych: szczegółowe omówienie.
Wersja 1.4.0-rc01
3 listopada 2021 r.
androidx.fragment:fragment:1.4.0-rc01
wydana bez zmian w stosunku do wersji Fragment 1.4.0-beta01. Wersja 1.4.0-rc01 zawiera te zmiany.
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
są zwalniane. Wersja 1.4.0-beta01 zawiera te zmiany.
Poprawki błędów
- Fragmenty nadrzędne będą teraz wysyłać zdarzenie
onHiddenChanged()
w dół całej hierarchii, zanim uruchomią własne wywołanie zwrotne. (Iedc20, b/77504618) - Klawiatura będzie teraz zamykana automatycznie po przejściu z fragmentu z otwartą klawiaturą do fragmentu z widokiem recyklera. (I8b842, b/196852211)
DialogFragment
używa terazsetReorderingAllowed(true)
w przypadku wszystkich transakcji tworzonych podczas wywoływania funkcjishow()
,showNow()
lubdismiss()
. (Ie2c14)- Bardzo długie ostrzeżenie lintera
DetachAndAttachFragmentInSameFragmentTransaction
zostało skrócone doDetachAndAttachSameFragment
. (e9eca3)
Wersja 1.4.0-alpha10
29 września 2021 r.
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
i androidx.fragment:fragment-testing:1.4.0-alpha10
są zwalniane. Wersja 1.4.0-alpha10 zawiera te zmiany.
Lint
- Dodano ostrzeżenie narzędzia
DetachAndAttachFragmentInSameFragmentTransaction
dotyczące wykrywania wywoływania funkcjidetach()
iattach()
na tym samym obiekcieFragment
w tym samym obiekcieFragmentTransaction
– ponieważ te uzupełniające się operacje znoszą się wzajemnie, gdy są wykonywane w ramach tej samej transakcji, muszą być podzielone na osobne transakcje, aby faktycznie coś zrobić. (aosp/1832956, b/200867930) - Dodano błąd lint
FragmentAddMenuProvider
, który poprawia użycie cyklu życia fragmentu na cykl życia widoku fragmentu podczas korzystania z interfejsu APIaddMenuProvider
wMenuHost
. (aosp/1830457, b/200326272)
Aktualizacje dokumentacji
- Komunikaty o wycofaniu interfejsów API, które są teraz obsługiwane przez interfejsy API wyników aktywności, czyli
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
ionRequestPermissionsResult
, zostały rozszerzone o dodatkowe szczegóły. (cce80f) - Wiadomość o wycofaniu
onActivityCreated()
w przypadkuFragment
iDialogFragment
została rozwinięta i zawiera więcej szczegółów. (224db4)
Wersja 1.4.0-alpha09
15 września 2021 r.
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
i androidx.fragment:fragment-testing:1.4.0-alpha09
są zwalniane. Wersja 1.4.0-alpha09 zawiera te zmiany.
Nowe funkcje
- Możesz teraz wywołać funkcję
clearBackStack(name)
, aby wyczyścić wszystkie stany zapisane wcześniej za pomocą funkcjisaveBackStack(name)
. (I70cd7)
Zmiany w interfejsie API
- Klasa
FragmentContainerView
została przepisana w języku Kotlin, co zapewnia, że funkcjagetFragment
będzie prawidłowo uwzględniać możliwość wystąpienia wartości null. (If694a, b/189629145) - Klasa FragmentStrictMode jest teraz napisana w języku Kotlin (I11767, b/199183506)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że stan elementu Fragment dodanego za pomocą metody
setReorderingAllowed(true)
, a następnie natychmiast usuniętego przed wykonaniem oczekujących transakcji nie był prawidłowo czyszczony. (I8ccb8)
Wersja 1.4.0-alpha08
1 września 2021 roku
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
i androidx.fragment:fragment-testing:1.4.0-alpha08
są zwalniane. Wersja 1.4.0-alpha08 zawiera te zmiany.
Poprawki błędów
- Ulepszyliśmy
UseRequireInsteadOfGet
sprawdzanie kodu, aby lepiej obsługiwać nadmiarowe nawiasy. (I2d865) - Ulepszyliśmy
UseGetLayoutInflater
sprawdzanie Lint, aby obsługiwało dodatkowe przypadki brzegowe. (Ie5423)
Wersja 1.4.0-alpha07
18 sierpnia 2021 r.
Wersje androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
i androidx.fragment:fragment-testing:1.4.0-alpha07
zostały wydane bez istotnych zmian. Wersja 1.4.0-alpha07 zawiera te zmiany.
Wersja 1.4.0-alpha06
4 sierpnia 2021 r.
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
i androidx.fragment:fragment-testing:1.4.0-alpha06
są zwalniane. Wersja 1.4.0-alpha06 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z wieloma stosami wstecznymi podczas szybkiego przełączania się między nimi, który powodował wyświetlanie się symbolu
IllegalStateException
podczas przywracania stosuFragmentTransaction
lub pojawianie się drugiej kopii fragmentu. (I9039f) - Rozwiązaliśmy problem polegający na tym, że funkcja
FragmentManager
przechowywała kopię stanu zapisanego wcześniej za pomocą funkcjisaveBackStack()
nawet po przywróceniu tego stanu. (Ied212) - Metoda
dismissAllowingStateLoss()
klasyDialogFragment
nie powoduje już awarii, gdy jest wywoływana po zapisaniu stanu podczas dodawania elementu DialogFragment za pomocą metodyshow(FragmentTransaction, String)
. (I84422)
Wersja 1.4.0-alpha05
21 lipca 2021 r.
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
i androidx.fragment:fragment-testing:1.4.0-alpha05
są zwalniane. Wersja 1.4.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Z Fragment
1.3.6
: widok fragmentu jest teraz prawidłowo ustawiony naGONE
podczas używaniahide()
, gdy widok główny ma ustawioną wartośćtransitionGroup=”true”
. (aosp/1766655, b/193603427) - Z Fragment
1.3.6
:FragmentActivity
teraz zawsze odblokowuje zapisany stan jako pierwszą operację w wywołaniach zwrotnych cyklu życia, które zastępuje. (I6db7a)
Aktualizacja zależności
- Od Fragment
1.3.6
: Fragmenty zależą teraz od Działania1.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
są zwalniane. Wersja 1.4.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
FragmentManager
używa terazSavedStateRegistry
do zapisywania stanu. MetodysaveAllState()
irestoreSavedState()
zostały też wycofane wFragmentController
. Jeśli używaszFragmentController
do hostowania fragmentów pozaFragmentActivity
,FragmentHostCallbacks
powinien implementowaćSavedStateRegistryOwner
. (Iba68e, b/188734238)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że wywołanie funkcji
saveBackStack()
w ramach obsługi wielu stosów wstecznych kończyło się niepowodzeniem, jeśli było wykonywane w tym samym czasie co uruchamianie funkcjiFragmentTransaction
, która korzystała z funkcjireplace()
. (I73137) - Naprawiono
NullPointerException
, który występował po ręcznym przywróceniu zapisanego stosu wstecznego zawierającego wiele transakcji podczas korzystania z interfejsurestoreBackStack()
API do obsługi wielu stosów wstecznych. Rozwiązaliśmy też problem polegający na tym, żesetReorderingAllowed(true)
nie było sprawdzane w przypadku wszystkich transakcji. (I8c593) - Rozwiązaliśmy problem, który powodował, że
FragmentManager
nieprawidłowo przywracał wcześniej zapisany stan fragmentów nawet po ich usunięciu zFragmentManager
, co powodowało ciągłe powiększanie się zapisanego stanu. (I1fb8e)
Wersja 1.4.0-alpha03
16 czerwca 2021 r.
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
i androidx.fragment:fragment-testing:1.4.0-alpha03
są zwalniane. Wersja 1.4.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Wszystkie klasy Fragment StrictMode
Violation
zostały zaktualizowane i zawierają teraz bardziej szczegółowe komunikaty o błędach, które wyjaśniają szczegóły naruszenia. (b/187871638)FragmentTagUsageViolation
zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera kontener nadrzędny, do którego miał zostać dodany fragment. (Ic33a7)WrongFragmentContainerViolation
ma teraz bardziej szczegółowy komunikat o błędzie, który zawiera kontener, do którego dodawany był fragment. (Ib55f8)- Klasy przypadków użycia dla
TargetFragmentUsageViolation
mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie i wszelkie inne informacje. (Icc6ac) - Klasy rozszerzające
RetainInstanceUsageViolation
mają teraz bardziej szczegółowe komunikaty o błędach, które zawierają fragment powodujący naruszenie. (I6bd55) FragmentReuseViolation
zawiera teraz bardziej szczegółowy komunikat o błędzie, który zawiera poprzedni identyfikator fragmentu. (I28ce2)SetUserVisibleHintViolation
ma teraz bardziej szczegółowy komunikat o błędzie, który zawiera informację o tym, na jaką wartość ustawiono widoczną wskazówkę dla użytkownika. (Ib2d5f)
Zmiany w zachowaniu
- Cofnięto ograniczenie dotyczące wywoływania
fitsSystemWindows
na urządzeniuFragmentContainerView
– aplikacja nie ulega już awarii. (6b8ddd, b/190622202)
Poprawki błędów
- Z Fragmentu
1.3.5
: naprawiono regresję w przejściach elementów udostępnianych wprowadzoną w fragmencie1.3.4
przez aosp/1679887. Fragmenty prawidłowo obsługują teraz grupy przejść (ustawione bezpośrednio za pomocątransitionGroup="true"
lub pośrednio za pomocątransitionName
lubbackground
), a elementy udostępnione nie będą już zgłaszać błędówIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304) - Aplikacja
FragmentManager
nie będzie się już zamykać podczas próby ukrycia usuwanego fragmentu. (I573dd, b/183634730) - Sprawdzanie kodu
OnCreateDialogIncorrectCallback
nie będzie już powodować awarii podczas oceny zmiennej najwyższego poziomu. (0a9efa, b/189967522)
Wersja 1.4.0-alpha02
2 czerwca 2021 r.
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
i androidx.fragment:fragment-testing:1.4.0-alpha02
są zwalniane. Wersja 1.4.0-alpha02 zawiera te zmiany.
Nowe funkcje
FragmentStrictMode
będzie teraz zawsze rejestrować naruszenia, gdy rejestrowanie jest włączone za pomocą zasadyFragmentManager
, niezależnie od używanej obecnie zasady trybu ścisłego. (I02df6, b/187872638)FragmentStrictMode
umożliwia teraz wyłączenie określonychFragment
klas z trybu ścisłegoViolation
, co pozwala im uniknąć kar. (Ib4e5d, b/184786736)Klasa
FragmentStrictMode
Violation
została rozszerzona o informacje o strukturze na podstawie każdego naruszenia. Dzięki temu możesz sprawdzić, co dokładnie spowodowało naruszenie, oraz fragment, który je spowodował (If5118, b/187871150). Każdy z tych fragmentówViolation
zawiera:WrongFragmentContainerViolation
zawiera terazViewGroup
, do którego próbowano dodaćFragment
. (I83c75, b/187871150)TargetFragmentUsageViolation
został rozszerzony naSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
iGetTargetFragmentRequestCodeUsageViolation
, przy czymSetTargetFragmentUsageViolation
zawiera fragment docelowy i kod żądania. (I741b4, b/187871150)SetUserVisibleHintViolation
zawiera teraz wartość logiczną przekazaną dosetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
zawiera teraz element ViewGroup, do którego tag<fragment>
próbował wstawić fragment.(I5dbbc, b/187871150)FragmentReuseViolation
zawiera teraz unikalny identyfikator poprzedniej instancjiFragment
, która spowodowała naruszenie. (I0544d, b/187871150)RetainInstanceUsageViolation
jest teraz klasą abstrakcyjną i ma 2 podklasy:SetRetainInstanceUsageViolation
iGetRetainInstanceUsageViolation
, które reprezentują 2 przypadki typu naruszenia. (Ic81e5, b/187871150)
Zmiany w zachowaniu
FragmentContainerView
zgłasza teraz wyjątek podczas próby zmiany atrybutufitsSystemWindow
programowo lub za pomocą kodu XML. Wcięcia powinny być obsługiwane przez widok każdego fragmentu. (Ie6651, b/187304502)
Wersja 1.4.0-alpha01
18 maja 2021 r.
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
i androidx.fragment:fragment-testing:1.4.0-alpha01
są zwalniane. Wersja 1.4.0-alpha01 zawiera te zmiany.
Nowe funkcje
FragmentContainerView
udostępnia teraz metodęgetFragment()
, która zwraca fragment ostatnio dodany do kontenera. Działa to tak samo jakfindFragmentById()
z identyfikatoremFragmentContainerView
, ale umożliwia łączenie wywołań. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Dodano
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
określa, czy w przejściu między fragmentami ma być włączona standardowa animacja przejścia aktywności zaczerpnięta z motywu. (I46652)
Wiele stosów wstecznych
FragmentManager
utrzymuje stos wsteczny składający się z transakcji fragmentów, które używały addToBackStack()
. Dzięki temu możesz wycofać te transakcje i wrócić do poprzedniego stanu, korzystając z mechanizmów zapisywania stanu za pomocą fragmentów, aby fragmenty mogły odpowiednio przywrócić swój stan.
Ta wersja rozszerza te mechanizmy, udostępniając 2 nowe interfejsy API: FragmentManager
i restoreBackStack(String name)
.saveBackStack(String name)
Te interfejsy API używają tego samego name
co addToBackStack()
, aby zapisać stan FragmentTransaction
i stan każdego fragmentu dodanego w tych transakcjach. Umożliwiają one późniejsze przywrócenie tych transakcji i ich fragmentów w niezmienionym stanie. Pozwala to skutecznie „przełączać się” między kilkoma stosami wstecznymi przez zapisanie bieżącego stosu wstecznego i przywrócenie zapisanego stosu wstecznego.
saveBackStack()
działa podobnie do popBackStack()
, ponieważ jest asynchroniczne i powoduje odwrócenie („wycofanie”) wszystkich transakcji fragmentów do tej konkretnej nazwy oraz zniszczenie i usunięcie wszystkich dodanych fragmentów, ale różni się od niego w kilku ważnych aspektach:
saveBackStack()
zawsze obejmuje podany zakres.- W przeciwieństwie do metody
popBackStack()
, która usuwa wszystkie transakcje z listy wstecznej, jeśli określona nazwa nie zostanie na niej znaleziona lub jeśli podano wartość null, metodasaveBackStack()
nie wykonuje żadnych działań, jeśli wcześniej nie została zatwierdzona transakcja fragmentu za pomocą metodyaddToBackStack()
z dokładnie taką samą, niepustą nazwą. - Stan wszystkich fragmentów dodanych z tych transakcji jest zapisywany. Oznacza to, że stan widoku każdego fragmentu jest zapisywany, wywoływana jest funkcja
onSaveInstanceState()
każdego fragmentu, a stan jest przywracany. Wszystkie instancjeViewModel
powiązane z tymi fragmentami są zachowywane (a funkcjaonCleared()
nie jest na nich wywoływana).
Transakcje fragmentowe, których można używać z funkcją saveBackStack()
, muszą spełniać określone kryteria:
- Każda transakcja fragmentu musi używać
setReorderingAllowed(true)
, aby można było przywrócić transakcje jako jedną, niepodzielną operację. - Zapisany zestaw transakcji musi być samodzielny (tzn. nie może zawierać wyraźnych odwołań do fragmentów poza tym zestawem), aby można go było przywrócić w dowolnym późniejszym czasie, niezależnie od zmian wprowadzonych w międzyczasie w historii.
- Żaden zapisany fragment nie może być fragmentem zachowanym ani mieć w swoim przechodnim zbiorze fragmentów podrzędnych fragmentu zachowanego. Dzięki temu
FragmentManager
nie będzie zwracać żadnych odwołań do zapisanych fragmentów po zapisaniu stosu wstecznego.
Podobnie jak w przypadku saveBackStack()
, funkcja restoreBackStack()
nie wykonuje żadnych działań, jeśli wcześniej nie została wywołana funkcja saveBackStack()
z tą samą nazwą. (b/80029773)
Fragment StrictMode
Interfejsy FragmentStrictMode
API zapewniają sprawdzanie w czasie działania, które umożliwia weryfikację, czy aplikacja lub biblioteki, od których zależy, nie wywołują wycofanych interfejsów API fragmentów. Gdy zostanie wykryte naruszenie, możesz wydrukować komunikat dziennika, wywołać własny niestandardowy odbiornik lub spowodować awarię aplikacji. Wartość FragmentStrictMode.Policy
, która określa, jakie kontrole są włączone i jakie „kary” są wywoływane, można ustawić w FragmentManager
za pomocą nowej metody setStrictModePolicy()
. Ta zasada dotyczy tego FragmentManager
i przechodzi na wszystkich menedżerów fragmentów podrzędnych, którzy nie ustawili własnej, unikalnej zasady. (#123, #131, #150, b/143774122)
detectFragmentReuse()
wykrywa, czy wcześniej usunięta instancjaFragment
jest ponownie dodawana doFragmentManager
. Nigdy nie wchodź w interakcję z instancjąFragment
ani nie przechowuj do niej odwołania po jej zniszczeniu i usunięciu zFragmentManager
. (#142, b/153738653)detectFragmentTagUsage()
wykrywa, kiedy używasz tagu<fragment>
w pliku XML układu. Podczas rozszerzania fragmentów w ramach układu zawsze używajFragmentContainerView
. (#141, b/153738235)detectWrongFragmentContainer()
wykrywa, kiedy dodajesz fragment do kontenera, który nie jestFragmentContainerView
. W układzie zawsze używaj elementuFragmentContainerView
jako kontenera fragmentów. (#146, b/181137036)detectRetainInstanceUsage()
wykrywa, kiedy używasz wycofanych interfejsów APIsetRetainInstance()
lubgetRetainInstance()
. (#140, b/153737954)detectSetUserVisibleHint()
wykrywa, kiedy używasz wycofanego interfejsu APIsetUserVisibleHint()
. (#136, b/153738974)detectTargetFragmentUsage()
wykrywa, kiedy używasz wycofanych interfejsów APIsetTargetFragment()
,getTargetFragment()
lubgetTargetRequestCode()
. (#139, b/153737745)
Zmiany w interfejsie API
- Eksperymentalny interfejs API
FragmentManager.enableNewStateManager(boolean)
został usunięty, a nowy menedżer stanu jest teraz jedyną dostępną opcją. (I90036, b/162776418) FragmentScenario
implementuje terazCloseable
, co umożliwia używanie go z metodąuse
w języku Kotlin lub z konstrukcją try-with-resources. (#121, b/143774122)
Nowe testy Lint
UseGetLayoutInflater
Sprawdzanie kodu Lint ostrzega teraz przed używaniemLayoutInflater.from(Context)
wDialogFragment
. Zawsze używaj metodygetLayoutInflater()
fragmentu okna, aby uzyskać odpowiedni elementLayoutInflater
. (#156, b/170781346)DialogFragmentCallbacksDetector
Sprawdzanie kodu Lint ostrzega teraz, gdy w metodzieonCreateDialog()
klasyDialogFragment
wywoływane są funkcjesetOnCancelListener
lubsetOnDismissListener
. Te odbiorniki należą do klasyDialogFragment
, więc aby otrzymywać te wywołania zwrotne, należy zastąpić funkcjeonCancel()
ionDismiss()
. (#171, b/181780047, b/187524311)
Poprawki błędów
- Od Fragment 1.3.4: naprawiono regresję wprowadzoną w Fragment
1.3.3
podczas używania interfejsu APIViewTreeViewModelStoreOwner.get()
zViewModelProvider
lub metody Jetpack ComposeviewModel()
w fragmencie. W tych przypadkach użycia prawidłowo stosuje sięViewModelProvider.Factory
dostarczony przez fragment, jeśli zastępuje ongetDefaultViewModelProviderFactory()
(tak jak w przypadku fragmentów z adnotacjami@AndroidEntryPoint
, gdy używasz Hilta). Jeśli nie zastąpisz tej metody, domyślnie zostanie utworzona metodaSavedStateViewModelFactory
, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368) - Od Fragmentu 1.3.4: podczas korzystania z
FragmentContainerView
na interfejsie API 29 wstawki nie będą już wysyłane w nieskończoność, co rozwiązuje problemy z instancjamiBottomNavigationBar
iFloatingActionButton
. (I1bb78, b/186012452) - Z Fragmentu 1.3.4: po zakończeniu procesu możesz teraz pobrać obiekt Parcelable z pakietu wyników fragmentu. (I65932, b/187443158)
- Z Fragmentu 1.3.4: podczas przejścia elementu udostępnionego w przypadku elementu ViewGroup, jeśli wartość
transitionGroup
jest ustawiona na false, przejście będzie teraz prawidłowe. (I99675)
Wkład zewnętrzny
- Dziękujemy simonschiller za wdrożenie
Closeable
wFragmentScenario
. (#121, b/143774122) - Dziękujemy simonschiller za dodanie całego interfejsu
FragmentStrictMode
API w tej wersji. (#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 tatocaster za dodanie
UseGetLayoutInflater
Lint check. (#156, b/170781346) - Dziękujemy tatocaster za dodanie
DialogFragmentCallbacksDetector
Lint check. (#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
są zwalniane. Wersja 1.3.6 zawiera te zmiany.
Poprawki błędów
- Z Fragment
1.4.0-alpha03
:FragmentManager
nie będzie się już zamykać, gdy spróbujesz ukryć usuwany fragment. (I573dd, b/183634730) - Widok fragmentu jest teraz prawidłowo ustawiony na
GONE
, gdy używaszhide()
, a widok główny ma ustawioną wartośćtransitionGroup=”true”
. (aosp/1766655, b/193603427) FragmentActivity
zawsze odblokowuje zapisany stan jako pierwszą operację w wywołaniach zwrotnych cyklu życia, które zastępuje. (I6db7a)
Aktualizacja zależności
- Od Fragment
1.3.6
: Fragmenty zależą teraz od Działania1.2.4
(I3a66c)
Wersja 1.3.5
16 czerwca 2021 r.
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
i androidx.fragment:fragment-testing:1.3.5
są zwalniane. Wersja 1.3.5 zawiera te zmiany.
Poprawki błędów
- Naprawiono regresję w przejściach elementów udostępnionych wprowadzoną w fragmencie
1.3.4
przez aosp/1679887. Fragmenty prawidłowo obsługują teraz grupy przejść (ustawione bezpośrednio za pomocątransitionGroup="true"
lub pośrednio za pomocątransitionName
lubbackground
), a elementy udostępnione nie będą już zgłaszać błędówIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304)
Wersja 1.3.4
18 maja 2021 r.
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
i androidx.fragment:fragment-testing:1.3.4
są zwalniane. Wersja 1.3.4 zawiera te zmiany.
Poprawki błędów
- Naprawiono regresję wprowadzoną w fragmencie
1.3.3
podczas korzystania z interfejsu APIViewTreeViewModelStoreOwner.get()
zViewModelProvider
lub metody Jetpack ComposeviewModel()
w fragmencie podczas korzystania z Hilt. W tych przypadkach użycia prawidłowo stosowany jest elementViewModelProvider.Factory
dostarczony przez fragment, jeśli zastępuje on elementgetDefaultViewModelProviderFactory()
(tak jak w przypadku fragmentów z adnotacjami@AndroidEntryPoint
). Jeśli nie zastąpisz tej metody, domyślnie zostanie utworzona metodaSavedStateViewModelFactory
, która zapisuje i przywraca stan wraz z widokiem fragmentu. (I5cbfa, b/186097368) - Gdy używasz
FragmentContainerView
na interfejsie API 29, wstawki nie będą już wysyłane w nieskończoność, co rozwiązuje problemy z instancjamiBottomNavigationBar
iFloatingActionButton
. (I1bb78, b/186012452) - Po zakończeniu procesu możesz pobrać obiekt Parcelable z pakietu wyników fragmentu. (I65932, b/187443158)
- Podczas przejścia elementu udostępnionego w przypadku elementu ViewGroup, jeśli wartość
transitionGroup
jest ustawiona na false, przejście będzie teraz przebiegać prawidłowo. (I99675)
Wersja 1.3.3
21 kwietnia 2021 r.
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
i androidx.fragment:fragment-testing:1.3.3
są zwalniane. Wersja 1.3.3 zawiera te zmiany.
Nowe funkcje
- Używanie
SavedStateViewModelFactory
działa teraz, gdy jest używane z wartościąSavedStateRegistryOwner
zwróconą przez użycieViewTreeSavedStateRegistryOwner.get()
z widokiem fragmentu. (I21acf, b/181577191)
Poprawki błędów
- Naprawiono regresję wprowadzoną w fragmencie
1.3.2
, która powodowała, że animacjepopEnter
nie były uruchamiane podczas wycofywaniaFragmentTransaction
zawierającego operacjęsetPrimaryNavFragment
, np. tych używanych przezNavHostFragment
. (I38c87, b/183877426) FragmentContainerView
zapewnia teraz, że każdyFragment
otrzymuje nowy zestawWindowInsets
, dzięki czemu każdy fragment może teraz niezależnie korzystać z wstawek. (I63f68, b/172153900)DialogFragment
prawidłowo obsługuje teraz przypadki, w których fragment podrzędny jest dodawany do kontenera o tym samym identyfikatorze co kontener w Twojej niestandardowej klasieDialog
. Rozwiązuje to problemy z hierarchią widoków podczas ponownego używania identyfikatorów używanych wewnętrznie przez okna, takie jakBottomSheetDialog
. (Ie6279, b/180021387)FragmentManager.dump()
teraz prawidłowo wcięcie pierwszego fragmentu na liście aktywnych fragmentów. (If5c33, b/183705451)
Poprawki błędów w nowym Menedżerze stanu
- Nowy menedżer stanu fragmentu prawidłowo obsługuje przejścia wyjścia z operacjami ukrywania. (I9e4de, b/184830265)
Wersja 1.3.2
24 marca 2021 r.
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
i androidx.fragment:fragment-testing:1.3.2
są zwalniane. Wersja 1.3.2 zawiera te zmiany.
Poprawki błędów w nowym Menedżerze stanu
- Jeśli operacje
popBackStack()
icommit()
są wykonywane jednocześnie, ostatnia operacja będzie teraz określać kierunek wszystkich animacji, a nie tylko niektórych animacji wyskakujących i animacji wejścia. (I7072e, b/181142246) - Widoki w hierarchii wspólnego elementu nie będą już miały wyczyszczonej nazwy przejścia podczas wykonywania przejścia wspólnego elementu. (I4d4a6, b/179934757)
Aktualizacje zależności
- Fragment zależy teraz od Activity 1.2.2, co rozwiązuje problem z kontrolą lint
InvalidFragmentVersionForActivityResult
w Activity podczas korzystania z Fragment 1.3.1 lub nowszej. - Fragment zależy teraz od Lifecycle w wersji 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
są zwalniane. Wersja 1.3.1 zawiera te zmiany.
Nowe funkcje
- Okna dialogowe w
DialogFragment
mogą teraz uzyskiwać dostęp do właścicieli ViewTree za pomocą DecorView, co zapewnia możliwość używaniaDialogFragment
zComposeView
. (Ib9290, b/180691023)
Poprawki błędów
- Fragmenty wstawiane do aktywności
RESUMED
za pomocą elementu FragmentContainerView są teraz prawidłowo wyświetlane po zmianie konfiguracji. (Ie14c8, b/180538371) - Na końcu fragmentu nie ma już dodatkowego znaku
}
toString()
(I54705, b/177761088) - Przesłonięte metody w klasie FragmentActivity prawidłowo dziedziczą teraz dokumentację JavaDoc metody bazowej (I736ce, b/139548782).
- Dokumentacja
setFragmentResult
isetFragmentResultListener
została zaktualizowana, aby odzwierciedlać fakt, że nie akceptują już wartości null (I990ba, b/178348386).
Poprawki błędów w nowym Menedżerze stanu
- Naprawiono wyciek pamięci we fragmentach spowodowany przez
mFocusedView
(Ib4e9e, b/179925887). - Fragmenty prawidłowo wywołują
onCreateOptionsMenu
podczas korzystania z transakcji wyświetlania/ukrywania (I8bce8, b/180255554). - Fragmenty podrzędne z przejściami, które rozpoczynają się przed rozmieszczeniem fragmentu, będą teraz prawidłowo osiągać
RESUMED
(Ic11e6, b/180825150) - Fragmenty rozszerzane za pomocą tagu
<fragment>
będą teraz zawsze docierać doRESUMED
(I452ac, (I9fa49)
Aktualizacje zależności
- Fragment 1.3.1 zależy od Activity
1.2.1
. (I557b9)
Wersja 1.3.0
10 lutego 2021 r.
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
i androidx.fragment:fragment-testing:1.3.0
są zwalniane. Wersja 1.3.0 zawiera te zmiany.
Główne zmiany od wersji 1.2.0
- Nowy menedżer stanu: przepisanie wewnętrznych elementów
FragmentManager
rozwiązało wiele problemów związanych z wysyłaniem zdarzeń cyklu życia, animacji i przejść oraz sposobem obsługi odroczonych fragmentów. Integracja interfejsu Activity Result API: dodaliśmy obsługę interfejsu
ActivityResultRegistry
API wprowadzonego w Activity1.2.0
do obsługi przepływówstartActivityForResult()
+onActivityResult()
irequestPermissions()
+onRequestPermissionsResult()
bez zastępowania metod w fragmencie, a także udostępniliśmy punkty zaczepienia do testowania tych przepływów. Zapoznaj się z aktualizacją artykułu Uzyskiwanie wyniku z aktywności.- W tej wersji rozwiązaliśmy kilka problemów związanych z nieprawidłowymi kodami żądań i wysyłaniem żądań uprawnień, które uniemożliwiały działanie interfejsu Activity Result API w poprzednich wersjach
FragmentActivity
. Aby używać interfejsów API wyników działania wFragmentActivity
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 żądań uprawnień, które uniemożliwiały działanie interfejsu Activity Result API w poprzednich wersjach
Fragment Result API: dodano obsługę przekazywania wyników między 2 fragmentami za pomocą nowych interfejsów API w
FragmentManager
. Działa to w przypadku fragmentów hierarchii (fragmentu nadrzędnego i podrzędnego), fragmentów DialogFragment i fragmentów w Navigation. Dzięki temu wyniki są wysyłane do fragmentu tylko wtedy, gdy jest on w stanie co najmniejSTARTED
. Interfejsy API fragmentów docelowych zostały wycofane na rzecz tych nowych interfejsów API. Zobacz Uzyskiwanie wyników za pomocą interfejsu Fragment Result API.FragmentOnAttachListener
: wywołanie zwrotneonAttachFragment()
w przypadkuFragmentActivity
iFragment
zostało wycofane. Dodaliśmy nowy interfejsFragmentOnAttachListener
, który zapewnia bardziej elastyczną alternatywę, umożliwiając delegowanieonAttachFragment()
do oddzielnych, testowalnych odbiorników i dodawanie odbiornika do menedżerów fragmentów innych niż bezpośredni podrzędny menedżer fragmentów.FragmentScenario
Ulepszenia: klasaFragmentScenario
z artefaktufragment-testing
została przepisana w języku Kotlin i zawiera szereg ulepszeń:FragmentScenario
korzysta teraz zsetMaxLifecycle()
do implementacjimoveToState()
, co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od bazowej aktywności.FragmentScenario
obsługuje teraz ustawianie początkowegoLifecycle.State
, aby umożliwić potwierdzenie stanu fragmentu przed pierwszym przejściem do każdegoLifecycle.State
.- Interfejs API
FragmentScenario
wonFragment
ma teraz alternatywę w postaci metody rozszerzenia KotlinwithFragment
, która umożliwia zwracanie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku.
ViewTree
Support: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
.TRANSIT_
zmiany animacji: domyślne efekty fragmentu,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, używają terazAnimator
zamiastAnimation
. Zasoby użyte do utworzenia tych animatorów są teraz prywatne.Wycofanie
setRetainInstance()
: metodasetRetainInstance()
w przypadku fragmentów została wycofana. Wraz z wprowadzeniem ViewModeli deweloperzy zyskali specjalny interfejs API do zachowywania stanu, który można powiązać z aktywnościami, fragmentami i wykresami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, nieprzechowywanego fragmentu i zachować oddzielnie określony stan, który chcą przechowywać. Pozwala to uniknąć częstego źródła wycieków, zachowując przydatne właściwości pojedynczego tworzenia i niszczenia przechowywanego stanu (czyli konstruktoraViewModel
i otrzymywanego przez niego wywołania zwrotnegoonCleared()
).Wycofanie adaptera ViewPager 1: wraz z wprowadzeniem ViewPager2
1.0.0
wycofano klasyFragmentPagerAdapter
iFragmentStatePagerAdapter
do interakcji zViewPager
. Zobacz Migracja z ViewPager do ViewPager2.
Wersja 1.3.0-rc02
27 stycznia 2021 r.
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
i androidx.fragment:fragment-testing:1.3.0-rc02
są zwalniane. Wersja 1.3.0-rc02 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że po zmianie konfiguracji element nadrzędny
DialogFragment
pojawiał się nad elementem podrzędnymDialogFragment
. Fragmenty okna podrzędnego są teraz zawsze wyświetlane nad fragmentem okna nadrzędnego. (I30806, b/177439520) - Rozwiązaliśmy problem polegający na tym, że wykonanie operacji
hide
z użyciemAnimation
powodowało, że ukryty fragment migał na końcu animacji. (I57e22, b/175417675) - Fragmenty z dodanymi przejściami przed dołączeniem hierarchii widoków teraz prawidłowo docierają do
RESUMED
. (I1fc1d, b/177154873)
Poprawki błędów w nowym Menedżerze stanu
- Widok fragmentu
Lifecycle
prawidłowo obsługuje teraz przypadki, w których widok fragmentu jest niszczony przed osiągnięciem przezLifecycle
stanuCREATED
, co pozwala uniknąć wyjątków typu „no event down from INITIALIZED” (brak zdarzenia przechodzącego ze stanu INITIALIZED). (eda2bd, b/176138645) - Fragmenty, które używają znaku
Animator
, są teraz wyświetlane w odpowiedniej kolejności podczas korzystania zFragmentContainerView
. (Id9aa3, b/176089197)
Wersja 1.3.0-rc01
16 grudnia 2020 roku
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
i androidx.fragment:fragment-testing:1.3.0-rc01
są zwalniane. Wersja 1.3.0-rc01 zawiera te zmiany.
Poprawki błędów
onPrepareOptionsMenu()
działa teraz tak samo jakonCreateOptionsMenu()
i nie jest już wywoływana, gdy fragment nadrzędny wywołujesetMenuVisibility(false)
. (Id7de8, b/173203654)
Poprawki błędów w nowym Menedżerze stanu
- Rozwiązaliśmy problem z wyciekiem pamięci i artefaktem wizualnym, który występował podczas dodawania fragmentu z
Animation
doFragmentContainerView
, a następnie przerywania tego procesu operacją pop. (I952d8) - Rozwiązaliśmy problem, który powodował, że widok fragmentu pozostawał w hierarchii widoków, jeśli został zastąpiony podczas wykonywania metod
onCreate()
lubonViewCreated()
. (I8a7d5) - Fokus jest teraz prawidłowo przywracany do widoków głównych fragmentów po ich wznowieniu. (Ifc84b)
- Łączenie operacji pop i replace w tej samej transakcji fragmentu będzie teraz wyświetlać odpowiednie animacje (Ifd4e4, b/170328691).
Wersja 1.3.0-beta02
2 grudnia 2020 r.
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
i androidx.fragment:fragment-testing:1.3.0-beta02
są zwalniane. Wersja 1.3.0-beta02 zawiera te zmiany.
Nowe funkcje
FragmentScenario
został w pełni przekonwertowany na język Kotlin przy zachowaniu zgodności kodu źródłowego i binarnej dzięki użyciu interfejsów funkcyjnych Kotlin 1.4 dlaFragmentAction
. (I19d31)
Zmiany w zachowaniu
- Elementy FragmentContainerView, które nie wczytują fragmentu za pomocą atrybutu
class
lubandroid:name
, mogą być teraz używane poza elementemFragmentActivity
. (Id4397, b/172266337) - Próba ustawienia maksymalnego czasu życia fragmentu na
DESTROYED
spowoduje teraz zgłoszenie wyjątkuIllegalArgumentException
(Ie7651, b/170765622). - Inicjowanie FragmentScenario ze stanem
DESTROYED
będzie teraz powodować zgłaszanie wyjątkuIllegalArgumentException
(I73590, b/170765622).
Poprawki błędów w nowym Menedżerze stanu
- Rozwiązaliśmy problem, który powodował, że widok nie osiągał stanu końcowego, jeśli przerywano przejście fragmentu, które korzystało z opcji
Animator
lub jednej z opcjiTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Rozwiązaliśmy problem, który uniemożliwiał prawidłowe niszczenie fragmentów z wychodzącym
Animation
. (I83d65) - Wychodzenie z fragmentów, w których efekty są odwrócone, powoduje teraz prawidłowe anulowanie i ponowne uruchomienie z odpowiednim efektem wejścia. (I62226, b/167092035)
- Rozwiązaliśmy problem, który powodował, że wyjście
Animator
zhide()
nie było uruchamiane. (Id7ffe) - Fragmenty są teraz prawidłowo wyświetlane, gdy są odroczone, a następnie natychmiast uruchamiane. (Ie713b, b/170022857)
- Fragmenty, które usuwają fokus podczas animacji, nie będą już próbować przywrócić fokusu na odłączonym widoku po osiągnięciu
RESUMED
(I38c65, b/172925703).
Wkład zewnętrzny
FragmentFactory
zapisuje teraz w pamięci podręcznej klasy fragmentów oddzielnie dla różnych instancjiClassLoader
. Dziękujemy Simonowi Schillerowi! (#87, b/113886460)
Wersja 1.3.0-beta01
1 października 2020 roku
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
i androidx.fragment:fragment-testing:1.3.0-beta01
są zwalniane. Wersja 1.3.0-beta01 zawiera te zmiany.
Nowe funkcje
setMaxLifecycle()
obsługuje teraz ustawianie stanuLifecycle
naINITIALIZING
, o ile fragment nie został przeniesiony doCREATED
. (b/159662173)
Zmiany w interfejsie API
- Uaktualnienie androidx do Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Zmiany w zachowaniu
- Pliki zasobów fragmentu zostały prawidłowo ustawione jako prywatne. (aosp/1425237)
Poprawki błędów
- Fragmenty rozszerzone za pomocą tagu
<fragment>
będą teraz prawidłowo czekać, aż ich widoki zostaną dodane do kontenera, zanim przejdą do stanu STARTED (I02f4c). - Fragmenty, które są widoczne, a następnie
setMaxLifecycle()
doCREATED
, teraz prawidłowo uruchamiają efekty wyjścia. (b/165822335) - Usunięcie odłączonego fragmentu, który nie został dodany do listy wstecznej, nie powoduje już wycieku pamięci. Dzięki uprzejmości Nicklasa Ansmana Giertza. (b/166489383)
- Aktywne fragmenty będą teraz zawsze miały wartość niezerową w przypadku parametru
FragmentManager
, a fragmenty z wartością niezerową w przypadku parametruFragmentManager
będą zawsze uznawane za aktywne. (aosp/1422346) - Domyślne efekty fragmentu,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, używają terazAnimator
zamiastAnimation
. (b/166155034)
Poprawki błędów w nowym Menedżerze stanu
- Fragmenty teraz prawidłowo przywracają stan fokusu widoku sprzed rozpoczęcia animacji. (Icc256)
- Fragmenty, które mają tylko przejście elementu współdzielonego, teraz prawidłowo kończą efekty specjalne, co oznacza, że faktycznie przechodzą do stanu końcowego (Iaebc7, b/166658128).
- Widoki fragmentów są teraz zawsze usuwane z kontenera przed zniszczeniem. (Id5876)
- Nowy menedżer stanu konsekwentnie usuwa widok fragmentu, który ma zostać zastąpiony, zanim doda nowy. (I41a6e)
- Nowy menedżer stanu uwzględnia teraz wyraźne zmiany widoczności widoku fragmentu. Oznacza to, że jeśli przed rozpoczęciem animacji ustawisz widok fragmentu wchodzącego na
INVISIBLE
, pozostanie on niewidoczny. (b/164481490) - Fragmenty teraz traktują
Animators
jako ważniejsze odAnimations
, co oznacza, że fragment zawierający oba te elementy uruchomi tylkoAnimator
i zignorujeAnimation
. (b/167579557) - Nowy menedżer stanu nie powoduje już migotania fragmentów podczas korzystania z animacji wejścia. (b/163084315)
Znany problem
Jeśli podczas efektu specjalnego w nowym menedżerze stanu naciśniesz przycisk Wstecz, zamiast wrócić do poprzedniego fragmentu, stary fragment nigdy nie zostanie ponownie dodany, co spowoduje wyświetlenie pustego ekranu. (b/167259187, b/167092035, b/168442830)
Wersja 1.3.0-alpha08
19 sierpnia 2020 r.
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
i androidx.fragment:fragment-testing:1.3.0-alpha08
są zwalniane. Wersja 1.3.0-alpha08 zawiera te zmiany.
New State Manager
Ta wersja zawiera znaczną refaktoryzację wewnętrznego zarządzania stanem FragmentManager
, co wpływa na wysyłanie metod cyklu życia, animacji i przejść oraz na sposób obsługi odroczonych transakcji. Ta opcja jest domyślnie włączona. Więcej informacji znajdziesz w poście na blogu Fragments: Rebuilding the Internals. (b/139536619, b/147749580)
- Eksperymentalny interfejs API w
FragmentManager.enableNewStateManager(boolean)
może służyć do określania, czy FragmentManager ma używać nowego menedżera stanu. (I7b6ee)
Te problemy są rozwiązywane tylko w przypadku korzystania z nowego menedżera stanu:
- Poprzedni fragment operacji
replace
jest teraz prawidłowo zatrzymywany przed rozpoczęciem nowego fragmentu. (b/161654580) - Fragmenty zapobiegają teraz występowaniu wielu konkurujących ze sobą animacji w tych samych fragmentach, dzięki czemu nie dochodzi do sytuacji, w których
Animation
zastępuje wszystkie efektyTransition
lub w którychAnimator
iTransition
w pojedynczym fragmencie działają jednocześnie. (b/149569323) - Obecnie obliczane są wartości
enterTransition
iexitTranstion
wszystkich fragmentów wchodzących i wychodzących, a nie tylko ostatniego fragmentu wchodzącego i pierwszego fragmentu wychodzącego. (b/149344150) - Odłożone fragmenty nie są już blokowane w stanie
CREATED
, ale przechodzą do stanuSTARTED
wraz z innymi fragmentami. (b/129035555) - Rozwiązaliśmy problem, który powodował, że
FragmentManager
wykonywał operacje w nieprawidłowej kolejności w przypadku połączenia odroczonej transakcji z zmienioną kolejnością i transakcji bez zmienionej kolejności. (b/147297731) - Jednoczesne wyświetlanie wielu fragmentów nie będzie już powodować tymczasowego wyświetlania fragmentów pośrednich podczas odraczania fragmentów. (b/37140383)
FragmentManager
zwraca teraz prawidłowe fragmenty podczas wywoływania funkcjifindFragmentById()
lubfindFragmentByTag()
z poziomu wywołania zwrotnegoonAttachFragment()
. (b/153082833)- Fragmenty nie wywołują już metody
onCreateView()
w przypadku niszczenia fragmentów, gdy fragment, który ma je zastąpić, jest odroczony. (b/143915710) - Komunikat o błędzie, który pojawia się podczas próby połączenia instancji frameworka
Transition
i AndroidXTransition
, zawiera teraz informację o fragmencie z nieprawidłowym przejściem. (b/155574969)
Zmiany w zachowaniu
- Teraz możesz dzwonić do
launch()
naActivityResultLauncher
w metodzie cyklu życiaonCreate()
fragmentu. (b/161464278) - Wywołanie funkcji
registerForActivityResult()
po wywołaniu funkcjionCreate()
powoduje teraz zgłoszenie wyjątku wskazującego, że jest to niedozwolone, zamiast cichego niepowodzenia w dostarczaniu wyników po zmianie konfiguracji. (b/162255449) FragmentActivity
używa teraz interfejsuOnContextAvailableListener
API wprowadzonego w Activity1.2.0-alpha08
, aby przywrócić stanFragmentManager
. Wszyscy detektorzy dodani do podklasFragmentActivity
będą uruchamiani po tym detektorze. (I513da)
Poprawki błędów
ActivityOptions
przekazywane podczas korzystania zstartIntentSenderForResult()
są teraz uwzględniane. (b/162247961)
Znany problem
- Jeśli używasz nowego menedżera stanu, bezpośrednie ustawienie widoczności widoku głównego fragmentu po
onViewCreated()
i przedonResume()
spowoduje, że ustawiona widoczność zostanie zastąpiona przezFragmentManager
, który kontroluje widoczność widoku głównego. Aby obejść ten problem, zawsze używaj operacjihide()
ishow()
do zmiany widoczności fragmentu. (b/164481490)
Wersja 1.3.0-alpha07
22 lipca 2020 r.
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
i androidx.fragment:fragment-testing:1.3.0-alpha07
są zwalniane. Wersja 1.3.0-alpha07 zawiera te zmiany.
Nowe funkcje
FragmentScenario
obsługuje teraz ustawianie początkowego stanu cyklu życiaCREATED
,STARTED
lubRESUMED
zamiast zawsze przenosić Fragment do stanuRESUMED
. (b/159662750)- Dodano alternatywę dla interfejsu
FragmentScenario
APIonFragment
w postaci metody rozszerzenia KotlinwithFragment
, która umożliwia zwracanie wartości. W szczególności ponownie zgłasza wyjątki zgłoszone w danym bloku. (b/158697631)
Zmiany w zachowaniu
FragmentScenario
korzysta teraz zsetMaxLifecycle()
do implementacjimoveToState()
, co zapewnia spójne działanie na wszystkich poziomach interfejsu API i odłącza stan fragmentu od bazowej aktywności. (b/156527405)- Obiekt
SavedStateRegistryOwner
zwrócony przezViewTreeSavedStateRegistryOwner
jest teraz powiązany z cyklem życia widoku fragmentu. Dzięki temu jego stan zostanie zapisany i przywrócony w tym samym czasie co widok fragmentu. (b/158503763)
Poprawki błędów
- Fragmenty czekają teraz na dołączenie widoku fragmentu przed wywołaniem funkcji
ViewCompat.requestApplyInsets()
, co pozwala uniknąć sytuacji, w których żądanie wstawienia było odrzucane. (b/158095749) - Wywołanie funkcji
clearFragmentResultListener
teraz prawidłowo czyści obserwatora cyklu życia. (b/159274993)
Wersja 1.3.0-alpha06
10 czerwca 2020 r.
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
i androidx.fragment:fragment-testing:1.3.0-alpha06
są zwalniane. Wersja 1.3.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Wywołanie zwrotne
onAttachFragment()
w przypadkuFragmentActivity
iFragment
zostało wycofane. Dodaliśmy nowy interfejsFragmentOnAttachListener
, który zapewnia bardziej elastyczną alternatywę, umożliwiając delegowanieonAttachFragment()
do oddzielnych, testowalnych odbiorników i dodawanie odbiornika do menedżerów fragmentów innych niż bezpośredni podrzędny menedżer fragmentów. (I06d3d)
Poprawki błędów
- Stan widoku fragmentów nadrzędnych jest teraz przywracany przed stanem widoku fragmentów podrzędnych, co rozwiązuje problem z kolejnością wyświetlania po zmianie konfiguracji, gdy
DialogFragment
wyświetlał innyDialogFragment
jako fragment podrzędny. (b/157195715) - Rozwiązaliśmy problem, który powodował, że
UseRequireInsteadOfGet
Lint check nie obsługiwał prawidłowo połączonych zastosowań operatorów?.
i!!
. (b/157677616)
Wersja 1.3.0-alpha05
20 maja 2020 r.
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
i androidx.fragment:fragment-testing:1.3.0-alpha05
są zwalniane. Wersja 1.3.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy obsługę właściwości
ViewTreeViewModelStoreOwner
z Lifecycle2.3.0-alpha03
iViewTreeSavedStateRegistryOwner
z SavedState1.1.0-alpha01
podczas używania elementuView
w ramach elementuFragment
. (aosp/1297993, aosp/1300264)
Zmiany w interfejsie API
- Interfejsy API
setFragmentResult()
isetFragmentResultListener()
wymagają teraz odpowiednio wartościBundle
iFragmentResultListener
, które nie mogą być wartościami null. Aby jawnie wyczyścić wcześniej ustawiony wynik lub odbiornik, użyj nowych metodclearFragmentResult()
iclearFragmentResultListener()
. (b/155416778) setFragmentResultListener()
Rozszerzenia Kotlin, które przyjmują wyrażenie lambda, są teraz oznaczone jakoinline
. (b/155323404)
Zmiany w zachowaniu
- Wycofane wcześniej interfejsy
startActivityForResult()
,startIntentSenderForResult()
irequestPermissions
wFragment
używają teraz wewnętrznie interfejsuActivityResultRegistry
, co usuwa ograniczenie dotyczące używania w kodach żądań tylko niższych bitów (poniżej0xFFFF
) podczas korzystania z tych interfejsów API. (b/155518741)
Aktualizacje dokumentacji
- Rozszerzyliśmy dokumentację konstruktorów
Fragment(@LayoutRes int)
iDialogFragment(@LayoutRes int)
, aby wyjaśnić, że należy je wywoływać z konstruktora bez argumentów podklas podczas korzystania z domyślnego konstruktoraFragmentFactory
. (b/153042497)
Wersja 1.3.0-alpha04
29 kwietnia 2020 r.
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
i androidx.fragment:fragment-testing:1.3.0-alpha04
są zwalniane. Wersja 1.3.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Dodano obsługę przekazywania wyników między dwoma fragmentami za pomocą nowych interfejsów API w
FragmentManager
. Działa to w przypadku fragmentów hierarchii (fragmentu nadrzędnego i podrzędnego), fragmentów DialogFragment i fragmentów w Navigation. Dzięki temu wyniki są wysyłane do fragmentu tylko wtedy, gdy jest on w stanie co najmniejSTARTED
. (b/149787344)
Zmiany w interfejsie API
- Interfejsy API fragmentu docelowego zostały wycofane. Do przekazywania danych między fragmentami należy używać nowych interfejsów Fragment Result API. (b/149787344)
- Interfejsy API
startActivityForResult()
/onActivityResult()
irequestPermissions()
/onRequestPermissionsResult()
w usłudze Fragment zostały wycofane. Użyj interfejsów Activity Result API. (aosp/1290887) - Zmiana powodująca niezgodność w Aktywności
1.2.0-alpha04
: metodaprepareCall()
została zmieniona naregisterForActivityResult()
. (aosp/1278717)
Poprawki błędów
- Fragment
getViewLifecycleOwner()
jest teraz zatrzymywany przed wywołaniemonSaveInstanceState()
, co odzwierciedla zachowanie cyklu życia fragmentu. (b/154645875) - Wywołanie
setMenuVisibility(false)
w przypadku fragmentu teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. (b/153593580) - Rozwiązaliśmy problem z
illegalStateException
, który występował podczas dodawania fragmentu do hierarchii widokówDialogFragment
za pomocąFragmentContainerView
. (b/154366601) - Metoda
getDefaultViewModelProviderFactory()
w przypadku fragmentów nie powoduje już awarii, gdy fragmenty są hostowane poza aktywnością. (b/153762914)
Wersja 1.3.0-alpha03
1 kwietnia 2020 r.
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
i androidx.fragment:fragment-testing:1.3.0-alpha03
są zwalniane. Wersja 1.3.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Metody
prepareCall
na platformieFragment
to terazfinal
. (b/152439361)
Poprawki błędów
- Rozwiązaliśmy problem z regresją wprowadzony w fragmencie
1.3.0-alpha02
podczas używaniaBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - Naprawiono błąd powodujący awarię podczas używania
prepareCall
z fragmentu po zmianie konfiguracji. (b/152137004) - Rozwiązaliśmy problem, który powodował, że podczas korzystania z
setTargetFragment()
przejścia elementów współdzielonych i wyjścia były ignorowane. (b/152023196) - W fragmencie
1.2.4
: zaktualizowano reguły ProGuard fragmentu, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338) - Z Fragment
1.2.4
: wyłączono regułę Lint w przypadku klasDialogFragment
, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co sprawia, że podczas wywoływania funkcjiobserve
można bezpiecznie używać funkcjithis
lubviewLifecycleOwner
.FragmentLiveDataObserve
(b/151765086)
Zmiany zależności
- Fragmenty zależą od aktywności
1.2.0-alpha03
, w której wprowadzono znaczące ulepszenia interfejsu Activity Result API w aktywności1.2.0-alpha02
.
Wersja 1.3.0-alpha02
18 marca 2020 r.
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
i androidx.fragment:fragment-testing:1.3.0-alpha02
są zwalniane. Wersja 1.3.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Dodano obsługę interfejsu
ActivityResultRegistry
API wprowadzonego w Activity1.2.0-alpha02
do obsługi przepływówstartActivityForResult()
+onActivityResult()
irequestPermissions()
+onRequestPermissionsResult()
bez zastępowania metod w fragmencie, a także udostępniono punkty zaczepienia do testowania tych przepływów. Zapoznaj się z aktualizacją artykułu Uzyskiwanie wyniku z aktywności. (b/125158199)
Zmiany w interfejsie API
DialogFragment
udostępnia teraz konstruktor, który przyjmuje obiekt@LayoutRes
wskazujący układ, któryonCreateView()
powinien domyślnie rozszerzać. (b/150327080)- Metoda
onActivityCreated()
została wycofana. Kod dotyczący widoku fragmentu powinien znajdować się w metodzieonViewCreated()
(która jest wywoływana bezpośrednio przed metodąonActivityCreated()
), a pozostały kod inicjujący – w metodzieonCreate()
. Aby otrzymać wywołanie zwrotne, gdyonCreate()
aktywności zostanie ukończone, należy zarejestrowaćLifeCycleObserver
wLifecycle
aktywności wonAttach()
i usunąć je po otrzymaniu wywołania zwrotnegoonCreate()
. (b/144309266)
Poprawki błędów
- Z Fragment
1.2.3
: naprawiliśmy błąd wDialogFragment
, który powodowałStackOverflowError
podczas wywoływaniagetLayoutInflater()
zonCreateDialog()
. (b/117894767, aosp/1258664) - Fragment
1.2.3
: zmniejszyliśmy zakres reguł ProGuard uwzględnionych w fragmencie, aby można było usuwać nieużywane klasy fragmentów. (b/149665169) - W sekcji Fragment
1.2.3
: naprawiono fałszywe alarmy w sprawdzaniuUseRequireInsteadOfGet
Lint w przypadku używania lokalnej nazwy zmiennej, która przesłaniała nazwę właściwości Kotlin. (b/149891163) - Z Fragment
1.2.3
:FragmentContainerView
nie zgłasza już błęduUnsupportedOperationException
w przypadku użycia nieprawidłowego konstruktora w podglądzie układu. (b/149707833)
Znane problemy
BottomSheetDialogFragment
nie wyświetla już prawidłowo okna na ekranie. (b/151652127)
Wersja 1.3.0-alpha01
4 marca 2020 r.
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
i androidx.fragment:fragment-testing:1.3.0-alpha01
są zwalniane. Wersja 1.3.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Dodano obsługę interfejsu
ViewTreeLifecycleOwner.get(View)
API dodanego w Lifecycle2.3.0-alpha01
, dzięki czemu będzie on zwracaćviewLifecycleOwner
fragmentu jakoLifecycleOwner
dla wszystkich widoków zwracanych przezonCreateView()
. (aosp/1182955)
Zmiany w interfejsie API
- Metoda
setRetainInstance()
w przypadku fragmentów została wycofana. Wraz z wprowadzeniem ViewModeli deweloperzy zyskali specjalny interfejs API do zachowywania stanu, który można powiązać z aktywnościami, fragmentami i wykresami nawigacji. Dzięki temu deweloperzy mogą używać zwykłego, nieprzechowywanego fragmentu i zachować oddzielnie określony stan, który chcą przechowywać. Pozwala to uniknąć częstego źródła wycieków, zachowując przydatne właściwości pojedynczego tworzenia i niszczenia przechowywanego stanu (czyli konstruktoraViewModel
i otrzymywanego przez niego wywołania zwrotnegoonCleared()
). (b/143911815) - Wraz z wprowadzeniem ViewPager2
1.0.0
klasyFragmentPagerAdapter
iFragmentStatePagerAdapter
do interakcji zViewPager
zostały wycofane. Zobacz Migracja z ViewPager do ViewPager2. (b/145132715)
Poprawki błędów
- Reguły ProGuard dla fragmentów prawidłowo zachowują tylko konstruktory domyślne
Fragment
klas, które są używane, a nie wszystkich instancjiFragment
, co naprawia regresję wprowadzoną w fragmencie1.2.1
. (b/149665169 require___()
Reguły Lint dodane w fragmencie1.2.2
nie generują już fałszywych alarmów w przypadku zmiennych lokalnych, które mają taką samą nazwę jak zacienione nazwy właściwości Kotlin (np.view
). (b/149891163)FragmentContainerView
nie zgłasza już błęduUnsupportedOperationException
podczas korzystania z podglądu układu w Android Studio. (b/149707833)- Rozwiązaliśmy problem polegający na tym, że zachowane fragmenty dodane po zapisaniu stanu nie były stale odtwarzane, a następnie niszczone po każdej zmianie konfiguracji. (b/145832397)
Wersja 1.2.5
Wersja 1.2.5
10 czerwca 2020 r.
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
i androidx.fragment:fragment-testing:1.2.5
są zwalniane. Wersja 1.2.5 zawiera te zmiany.
Poprawki błędów
- Fragment
getViewLifecycleOwner()
jest teraz zatrzymywany przed wywołaniemonSaveInstanceState()
, co odzwierciedla zachowanie cyklu życia fragmentu. Wcześniej opublikowaliśmy go w fragmencie1.3.0-alpha04
. (b/154645875) - Wywołanie
setMenuVisibility(false)
w przypadku fragmentu teraz prawidłowo zmienia widoczność menu udostępnianych przez jego fragmenty podrzędne. Wcześniej opublikowaliśmy go w fragmencie1.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
są zwalniane. Wersja 1.2.4 zawiera te zmiany.
Poprawki błędów
- Zaktualizowano reguły ProGuard dla fragmentów, aby umożliwić zaciemnianie zachowanych fragmentów. (b/151605338)
- Wyłączono regułę Lint w przypadku klas
FragmentLiveDataObserve
, ponieważ ich cykl życia i cykl życia widoku są zawsze zsynchronizowane, co umożliwia bezpieczne używanie funkcjithis
lubviewLifecycleOwner
podczas wywoływania funkcjiobserve
.DialogFragment
(b/151765086)
Wersja 1.2.3
Wersja 1.2.3
18 marca 2020 r.
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
i androidx.fragment:fragment-testing:1.2.3
są zwalniane. Wersja 1.2.3 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd w
DialogFragment
, który powodowałStackOverflowError
podczas wywoływaniagetLayoutInflater()
z poziomuonCreateDialog()
. (b/117894767, aosp/1258665) - Zmniejszyliśmy zakres reguł ProGuard uwzględnionych w fragmencie, aby zapewnić możliwość usuwania nieużywanych klas fragmentów. (b/149665169)
- Rozwiązanie problemu z fałszywymi alarmami w
UseRequireInsteadOfGet
Lint check podczas używania nazwy zmiennej lokalnej, która przesłaniała nazwę właściwości Kotlin. (b/149891163) FragmentContainerView
nie zgłasza 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.
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
i androidx.fragment:fragment-testing:1.2.2
są zwalniane. Wersja 1.2.2 zawiera te zmiany.
Nowe testy Lint
- Lint sugeruje użycie
viewLifecycleOwner
jakoLifecycleOwner
w wywołaniachOnBackPressedDispatcher
wonCreateView()
,onViewCreated()
ionActivityCreated()
. (b/142117657) - Dodano nowe sprawdzenie Lint, które potwierdza, że podczas korzystania z artefaktu
fragment-testing
używasz prawidłowegodebugImplementation
. (b/141500106) - Fragmenty sugerują teraz używanie powiązanych metod
require___()
w celu uzyskania bardziej opisowych komunikatów o błędach zamiastcheckNotNull(get___())
,requireNonNull(get___())
lubget___()!!
w przypadku wszystkich interfejsów Fragment API, które zawierają odpowiednikiget
irequire
. (aosp/1202883)
Poprawki błędów
- Naprawiono pliki ProGuard fragmentów, aby uniknąć ostrzeżeń R8 (b/148963981)
- Ulepszyliśmy istniejące sprawdzanie Lint, które sugeruje używanie
viewLifecycleOwner
zamiastobserve
, aby obsługiwać też wersję metody rozszerzenialivedata-ktx
funkcjiobserve
. (b/148996309) - Poprawiono formatowanie wielu testów Lint (aosp/1157012).
Wkład użytkowników zewnętrznych
- Dziękujemy Zacowi Sweersowi za udostępnienie
require___()
kontroli Lint w imieniu Slacka. (aosp/1202883)
Wersja 1.2.1
Wersja 1.2.1
5 lutego 2020 r.
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
i androidx.fragment:fragment-testing:1.2.1
są zwalniane. Wersja 1.2.1 zawiera te zmiany.
Poprawki błędów
- Fragmenty dodane za pomocą metod
add
ireplace
, które przyjmują instancjęClass
(lub wersje Kotlin reified), mają teraz domyślny konstruktor zachowywany przez ProGuard. (b/148181315) - Metody
FragmentStatePagerAdapter
iFragmentPagerAdapter
nie przechwytują już wyjątków zgłaszanych przezFragmentManager
podczas wykonywaniafinishUpdate()
. (aosp/1208711) - Rozwiązaliśmy problem polegający na tym, że funkcja
FragmentManager.findFragment()
nie działała w przypadku fragmentów dodanych za pomocą tagu<fragment>
. (b/147784323) - Fragmenty rozszerzone za pomocą tagu
<fragment>
zawsze otrzymują wywołanie funkcjionInflate()
przedonCreate()
, gdy znajdują się w układzie. (aosp/1215856) - Wywołanie interfejsu
toString()
w instancjiFragmentManager
nie powoduje już zgłaszania wyjątkuNullPointerException
, gdy aktywność jest już zniszczona. (b/148189412)
Zmiany zależności
- Fragmenty
1.2.1
zależą teraz od Lifecycle ViewModel SavedState2.2.0
.
Wersja 1.2.0
Wersja 1.2.0
22 stycznia 2020 r.
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
i androidx.fragment:fragment-testing:1.2.0
są zwalniane. Wersja 1.2.0 zawiera te zmiany.
Ważne zmiany od wersji 1.1.0
- FragmentContainerView:
FragmentContainerView
to zdecydowanie zalecany kontener do dynamicznego dodawania fragmentów, który zastępuje użycieFrameLayout
lub innych układów. Obsługuje też te same parametryclass
,android:name
i opcjonalny parametrandroid:tag
co tag<fragment>
, ale do dodania tego początkowego fragmentu używa zwykłego taguFragmentTransaction
, a nie ścieżki kodu niestandardowego używanej przez tag<fragment>
. onDestroyView()
czas: fragmenty czekają teraz na zakończenie animacji wyjścia, przejść platformy wyjścia i przejść AndroidX (gdy używasz Transition1.3.0
), zanim wywołająonDestroyView()
.- Oparte na klasach
add()
ireplace()
: dodano nowe przeciążenia funkcjiadd()
ireplace()
wFragmentTransaction
, które przyjmują argumentyClass<? extends Fragment>
i opcjonalnieBundle
. Te metody używająFragmentFactory
do utworzenia instancji fragmentu, który ma zostać dodany. Dofragment-ktx
dodaliśmy też rozszerzenia Kotlin, które używają typów konkretnych (np.fragmentTransaction.replace<YourFragment>(R.id.container)
). - Integracja ViewModelu cyklu życia z SavedState:
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną podczas korzystania zby viewModels()
,by activityViewModels()
, konstruktoraViewModelProvider
lubViewModelProviders.of()
z fragmentem. - Nowe testy Lint: dodaliśmy nowy test Lint, który sprawdza, czy podczas obserwowania
LiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
używaszgetViewLifecycleOwner()
. getFragmentManager()
wycofanie: metodygetFragmentManager()
irequireFragmentManager()
w klasie Fragment zostały wycofane i zastąpione jedną metodągetParentFragmentManager()
, która zwraca niepusty obiektFragmentManager
, do którego 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. Klasa FragmentManager uwzględnia teraz wartośćLog.isLoggable()
w przypadku taguFragmentManager
, co umożliwia włączanie rejestrowaniaDEBUG
lubVERBOSE
bez ponownej kompilacji aplikacji.
Znane problemy
- Fragmenty, do których odwołuje się tylko atrybut
class
lubandroid:name
wFragmentContainerView
, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania dla każdej klasy fragmentu. (b/142601969) - Gdy dodajesz
NavHostFragment
za pomocąclass
lubandroid:name
w XML zFragmentContainerView
, nie możesz używaćfindNavController()
wonCreate()
swojej aktywności. (b/142847973)
Wersja 1.2.0-rc05
8 stycznia 2020 r.
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
i androidx.fragment:fragment-testing:1.2.0-rc05
są zwalniane. Wersja 1.2.0-rc05 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy regresję w fragmencie
1.2.0-rc04
podczas używania tagu<fragment>
, która powodowała nieprawidłowe wywoływanie funkcjionViewCreated()
podczas niszczenia aktywności. (b/146290333) - Fragmenty dodane za pomocą tagu
<fragment>
mają teraz prawidłowo wyczyszczone ustawienia inne niż konfiguracyjne, nawet jeśli czasami znajdują się w układzie (np. tylko w układzie poziomym). W rezultacie te fragmenty są teraz prawidłowo przenoszone doCREATED
, nawet jeśli nie znajdują się w układzie, zamiast być tworzone, ale nigdy nie przechodzić przez żadne metody cyklu życia. (b/145769287)
Wersja 1.2.0-rc04
18 grudnia 2019 r.
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
i androidx.fragment:fragment-testing:1.2.0-rc04
są zwalniane. Wersja 1.2.0-rc04 zawiera te zmiany.
Poprawki błędów
- Dostosowaliśmy animacje dla
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
iTRANSIT_FRAGMENT_FADE
, aby uniknąć problemów wizualnych. (b/145468417)
Wersja 1.2.0-rc03
4 grudnia 2019
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
i androidx.fragment:fragment-testing:1.2.0-rc03
są zwalniane. Wersja 1.2.0-rc03 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy niezamierzoną zmianę działania, w której usunięte fragmenty były nadal zwracane przez
findFragmentById()
/findFragmentByTag()
podczas działania animacji/przejść wyjścia. (b/143982969, aosp/1167585) - Fragmenty podrzędne są teraz prawidłowo zatrzymywane przed fragmentami nadrzędnymi, gdy aktywność zawierająca wywołuje
onSaveInstanceState()
. (b/144380645) - Rozwiązaliśmy problem, który powodował, że po usunięciu ukrytego fragmentu widoki były nieprawidłowo oznaczane symbolem
INVISIBLE
. (b/70793925) - Przejścia udostępnionych elementów fragmentu obsługują teraz widoki, które zostały obrócone, przeskalowane itp. (b/142835261)
Aktualizacje dokumentacji
- Doprecyzowaliśmy dokumentację dotyczącą wycofywania
setUserVisibleHint()
. (b/143897055) - Ulepszyliśmy dokumentację dotyczącą
setFragmentFactory()
igetFragmentFactory()
, aby lepiej wyjaśnić, że ustawienieFragmentFactory
wpływa też na menedżery fragmentów podrzędnych. (aosp/1170095)
Zmiany zależności
- Fragmenty zależą teraz od komponentów 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
są zwalniane. Wersja 1.2.0-rc02 zawiera te zmiany.
Poprawki błędów
- W przypadku języka Kotlin poprawka LintFix dotycząca używania
getViewLifecycleOwner()
podczas obserwowaniaLiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
(wprowadzona w fragmencie1.2.0-rc01
) używa teraz składni dostępu do właściwości KotlinviewLifecycleOwner
zamiastgetViewLifecycleOwner()
. (aosp/1143821)
Wersja 1.2.0-rc01
23 października 2019 r.
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
i androidx.fragment:fragment-testing:1.2.0-rc01
są zwalniane. Wersja 1.2.0-rc01 zawiera te zmiany.
Nowe funkcje
- Tag
FragmentContainerView
obsługuje teraz atrybutclass
oprócz atrybutuandroid:name
, co odzwierciedla funkcjonalność tagu<fragment>
. (b/142722242) - Dodano nowe sprawdzenie Lint, które zapewnia, że podczas obserwowania
LiveData
zonCreateView()
,onViewCreated()
lubonActivityCreated()
używaszgetViewLifecycleOwner()
. (b/137122478)
Poprawki błędów
- Wywołania zwrotne
onDismiss
ionCancel
wDialogFragment
gwarantują teraz, że przekazywany do nich parametrDialogInterface
nie ma wartości null, a wywoływana przez nie funkcjagetDialog()
zwraca wartość inną niż null. (b/141974033) FragmentContainerView
dodaje teraz fragment zdefiniowany przezclass
lubandroid:name
w ramach rozszerzania, dzięki czemufindFragmentById()
ifindFragmentByTag()
działają od razu. (b/142520327)- Naprawiono
IllegalStateException
wFragmentContainerView
spowodowany zapisaniem stanu. (b/142580713) - Naprawiliśmy
UnsupportedOperationException
wFragmentContainerView
, gdy klasaFragmentContainerView
jest zaciemniona. (b/142657034)
Znane problemy
- Fragmenty, do których odwołuje się tylko atrybut
class
lubandroid:name
wFragmentContainerView
, nie są automatycznie zachowywane przez ProGuard, co wymaga ręcznego dodania reguły zachowywania dla każdej klasy fragmentu. Wyłączyliśmy regułę Lint sugerującą przejście naFragmentContainerView
, dopóki nie zostanie to naprawione w ramachaapt2
. (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
są zwalniane. Wersja 1.2.0-beta02 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że element Fragment
onInflate()
nie otrzymywał odpowiednich atrybutów z elementuFragmentContainerView
, co powodowało błędy w przypadkach takich jakNavHostFragment
. (b/142421837)
Wersja 1.2.0-beta01
9 października 2019 r.
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
i androidx.fragment:fragment-testing:1.2.0-beta01
są zwalniane. Wersja 1.2.0-beta01 zawiera te zmiany.
Nowe funkcje
FragmentContainerView
dodaje obsługę dodawania początkowego fragmentu z dodatkową obsługą atrybutów XMLandroid:name
i opcjonalnego atrybutuandroid:tag
. W przeciwieństwie do tagu<fragment>
tagFragmentContainerView
używa zwykłego taguFragmentTransaction
, aby dodać początkowy fragment, co umożliwia dalsze operacjeFragmentTransaction
na taguFragmentContainerView
i korzystanie z powiązania widoku w przypadku układu. (b/139830628, b/141177981)- Fragmenty zawierają teraz ostrzeżenie Lint z szybką poprawką, która zastępuje
<fragment>
ciągiemFragmentContainerView
. (b/139830056)
Poprawki błędów
- Usunęliśmy
ClassCastException
podczas korzystania zandroidx.transition
. (b/140680619) - Podczas korzystania z przejścia
1.3.0-beta01
fragmenty czekają teraz na zakończenie przejśćandroidx.transition
(oprócz przejść i animacji platformy, które zostały poprawione odpowiednio w fragmencie1.2.0-alpha03
i fragmencie1.2.0-alpha02
) przed wysłaniemonDestroyView()
. (aosp/1119841) - Podczas korzystania z Transition
1.3.0-beta01
fragmenty prawidłowo anulują przejściaandroidx.transition
przed rozpoczęciem nowych przejść lub animacji w tym samym kontenerze. (aosp/1119841) - Rozwiązaliśmy problem w przypadku interfejsu API w wersji 17 i starszych, który występował podczas używania przejść
androidx.transition
w widoku głównym fragmentu podczas korzystania zFragmentContainerView
. (b/140361893) - Artefakt
fragment-testing
zależy teraz od AndroidX Test1.2.0
, co rozwiązuje problem z niezgodnością z najnowszą wersją Espresso 3.2.0. (b/139100149) - Usunięto użycie
Log.w
w klasie FragmentManager. (aosp/1126468)
Znane problemy
- Elementy
onInflate()
fragmentu nie otrzymują odpowiednich atrybutów z elementuFragmentContainerView
, co powoduje problemy w przypadkach takich jakNavHostFragment
. (b/142421837)
Wersja 1.2.0-alpha04
18 września 2019 r.
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
i androidx.fragment:fragment-testing:1.2.0-alpha04
są zwalniane. Wersja 1.2.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Metody
getFragmentManager()
irequireFragmentManager()
wFragment
zostały wycofane i zastąpione jedną metodągetParentFragmentManager()
, która zwraca niepusty obiektFragmentManager
, do którego dodano Fragment (możesz użyćisAdded()
, aby sprawdzić, czy można bezpiecznie wywołać tę metodę). (b/140574496) - Statyczna metoda
FragmentManager.enableDebugLogging
została wycofana. FragmentManager uwzględnia teraz wartośćLog.isLoggable()
w przypadku taguFragmentManager
, co umożliwia włączanie logowaniaDEBUG
lubVERBOSE
bez ponownej kompilacji aplikacji. (aosp/1116591)
Poprawki błędów
- Fragmenty są teraz prawidłowo niszczone podczas działania animacji wyjścia w innych fragmentach. (b/140574199)
- Rozwiązaliśmy problem, który powodował, że fragmenty wywoływały funkcję
Activity.findViewById()
, czego wcześniej nie robiły. (aosp/1116431)
Wersja 1.2.0-alpha03
5 września 2019 r.
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
i androidx.fragment:fragment-testing:1.2.0-alpha03
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
FragmentContainerView
to terazfinal
. (b/140133091)
Poprawki błędów
FragmentContainerView
teraz prawidłowo odwraca kolejność rysowania podczas usuwania fragmentów z listy wstecznej. (b/139104187)- Rozwiązaliśmy problem polegający na tym, że podczas jednoczesnego usuwania fragmentu i dodawania nowego fragmentu uruchamiała się nieprawidłowa animacja. (b/111659726)
- Fragmenty czekają teraz na zakończenie przejść (oprócz animacji, co zostało naprawione w fragmencie
1.2.0-alpha02
), zanim wyśląonDestroyView()
. (b/138741697)
Wersja 1.2.0-alpha02
7 sierpnia 2019 r.
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
i androidx.fragment:fragment-testing:11.2.0-alpha02
są dostępne. Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną podczas korzystania z funkcjiby viewModels()
,by activityViewModels()
, konstruktoraViewModelProvider
lubViewModelProviders.of()
z obiektemFragment
. (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 aktywności na urządzeniach z Androidem 10. (aosp/1012812, aosp/1014730)
Zmiany w interfejsie API
- Wprowadza
FragmentContainerView
jako wysoce zalecany kontener dla dynamicznie dodawanych fragmentów, zastępując użycieFrameLayout
itp., ponieważ rozwiązuje problemy z kolejnością animacji w osi Z i przekazywaniem wstawek okna do fragmentów. (b/37036000, aosp/985243, b/136494650) - Dodano statyczną metodę
FragmentManager.findFragment(View)
, która umożliwia pobranie zawierającego fragmentu z widoku utworzonego przez fragment. Rozszerzenie w języku Kotlin jest też dostępne wfragment-ktx
. (aosp/1090757) - Dodaliśmy nowe przeciążenia funkcji
add()
ireplace()
wFragmentTransaction
, które przyjmują argumentyClass<? extends Fragment>
i opcjonalnieBundle
. Te metody używająFragmentFactory
do utworzenia instancji fragmentu, który ma zostać dodany. Dofragment-ktx
dodaliśmy też rozszerzenie Kotlin, które używa typów uściślonych (np.fragmentTransaction.replace<YourFragment>(R.id.container)
). (b/126124987) - Do wywołań zwrotnych cyklu życia
Fragment
dodano adnotacje@MainThread
. (b/127272564) - Interfejsy API związane z tytułem ścieżki na stronach
FragmentTransaction
iFragmentManager.BackStackEntry
zostały wycofane. (b/138252944) - Metoda
setTransitionStyle
wFragmentTransaction
została wycofana. (aosp/1011537) - Wiele metod w
FragmentManager
nie jest jużabstract
. Sama klasaFragmentManager
pozostajeabstract
i nie powinna być bezpośrednio tworzona ani rozszerzana. Nadal należy pobierać istniejącą instancję z klasgetSupportFragmentManager()
,getChildFragmentManager()
itp.
Poprawki błędów
- Z Fragment
1.1.0-rc04
: fragmenty prawidłowo anulują odroczone przejścia po usunięciu fragmentów. (b/138251858) - Z Fragmentu
1.1.0-rc03
: rozwiązaliśmy problem polegający na tym, że wywoływanie funkcjipostponeEnterTransition()
z limitem czasu więcej niż raz nie powodowało anulowania poprzednich limitów czasu. (b/137797118) - Z Fragment
1.1.0-rc02
: rozwiązano problem z awarią wFragmentPagerAdapter
iFragmentStatePagerAdapter
podczas usuwania bieżącego elementu. (b/137209870) - Fragmenty czekają teraz na zakończenie animacji przed wysłaniem
onDestroyView()
. (b/136110528) - Animacje fragmentów z fragmentów podrzędnych i ich elementów podrzędnych są teraz prawidłowo obsługiwane podczas animowania fragmentu nadrzędnego. (b/116675313)
- Rozwiązaliśmy problem z
NullPointerException
podczas używania przejść elementów współdzielonych i łączenia operacji wyskakującej i dodawania. (b/120507394) - Dodano obejście problemu z
IllegalStateException
podczas używaniaFragmentPagerAdapter
iFragmentStatePagerAdapter
w testach Robolectric. (b/137201343)
Wersja 1.2.0-alpha01
2 lipca 2019 r.
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
i androidx.fragment:fragment-testing:1.2.0-alpha01
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- FragmentManager wywołuje teraz metodę
requestApplyInsets()
po dołączeniu widoku fragmentu i bezpośrednio przed wywołaniem metodyonViewCreated()
, dzięki czemu widok zawsze ma prawidłowe wstawki. (b/135945162)
Poprawki błędów
- Naprawiliśmy błąd
NullPointerException
podczas wycofywaniaFragmentTransaction
, który używałsetPrimaryNavigationFragment()
przedreplace()
. (b/134673465)
Wersja 1.1.0
Wersja 1.1.0
5 września 2019 r.
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
i androidx.fragment:fragment-testing:1.1.0
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Ważne zmiany od wersji 1.0.0
- fragment-testing: artefakt
fragment-testing
udostępnia klasęFragmentScenario
do testowania fragmentu w izolacji. Więcej informacji znajdziesz w dokumentacji testowania fragmentów aplikacji. - FragmentFactory: możesz teraz ustawić
FragmentFactory
wFragmentManager
, aby zarządzać tworzeniem instancji fragmentów, co eliminuje ścisły wymóg posiadania konstruktora bez argumentów. - Delegaty właściwości Kotlin dla ViewModeli: artefakt
fragment-ktx
zawiera teraz 2 delegaty właściwości Kotlin:by viewModels()
do uzyskiwania dostępu do ViewModeli powiązanych z poszczególnymi fragmentami iby activityViewModels()
do uzyskiwania dostępu do ViewModeli w zakresie działania aktywności. - Maksymalny cykl życia: możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując
setMaxLifecycle()
naFragmentTransaction
. Zastępuje on wycofany jużsetUserVisibleHint()
.FragmentPagerAdapter
iFragmentStatePagerAdapter
mają nowy konstruktor, który umożliwia przełączenie się na nowe działanie. - Konstruktor FragmentActivity LayoutId: podklasy
FragmentActivity
mogą teraz opcjonalnie wywoływać konstruktor wFragmentActivity
, który przyjmuje identyfikatorR.layout
, wskazując układ, który powinien być ustawiony jako widok treści, zamiast wywoływaćsetContentView()
wonCreate()
. Nie zmienia to wymagania, aby podklasa miała konstruktor bez argumentów. - Konstruktor Fragment LayoutId: podklasy
Fragment
mogą teraz opcjonalnie wywoływać konstruktor wFragment
, który przyjmuje identyfikatorR.layout
, wskazując układ, który powinien być używany w tym fragmencie, jako alternatywę dla zastępowaniaonCreateView()
. Rozwinięty układ można skonfigurować w usłudzeonViewCreated()
. - Postpone with a timeout: dodano nowe przeciążenie funkcji
postponeEnterTransition()
, które przyjmuje limit czasu.
Wersja 1.1.0-rc04
7 sierpnia 2019 r.
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
i androidx.fragment:fragment-testing:1.1.0-rc04
są dostępne. Listę zmian w tej wersji znajdziesz tutaj.
Poprawki błędów
- Fragmenty teraz prawidłowo anulują odroczone przejścia po usunięciu z powrotem. (b/138251858)
Wersja 1.1.0-rc03
19 lipca 2019 r.
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
i androidx.fragment:fragment-testing:1.1.0-rc03
są dostępne. Listę zmian w tej wersji znajdziesz tutaj.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że wielokrotne wywoływanie funkcji
postponeEnterTransition()
z limitem czasu nie powodowało anulowania poprzednich limitów czasu. (b/137797118)
Wersja 1.1.0-rc02
17 lipca 2019 r.
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
i androidx.fragment-testing:fragment:1.1.0-rc02
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Poprawki błędów
- Rozwiązaliśmy problem z awarią w
FragmentPagerAdapter
iFragmentStatePagerAdapter
podczas usuwania bieżącego elementu. (b/137209870)
Wersja 1.1.0-rc01
2 lipca 2019 r.
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
i androidx.fragment:fragment-testing:1.1.0-rc01
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Poprawki błędów
- Fragmenty teraz prawidłowo aktualizują swoją widoczność podczas korzystania z operacji
show()
lubhide()
w trakcie przejścia. (b/133385058) - Naprawiliśmy błąd
NullPointerException
podczas wycofywaniaFragmentTransaction
, który używałsetPrimaryNavigationFragment()
przedreplace()
. (b/134673465)
Wersja 1.1.0-beta01
5 czerwca 2019 r.
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
i androidx.fragment:fragment-testing:1.1.0-beta01
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Poprawki błędów
androidx.lifecycle.Lifecycle
wywołania zwrotne (dotyczące konkretnieSTARTED
,RESUMED
,PAUSED
,STOPPED
iDESTROYED
) w przypadku zagnieżdżonych fragmentów są teraz prawidłowo zagnieżdżone; (b/133497591)OnBackPressedCallback
zarejestrowane wonCreate()
fragmentu mają teraz pierwszeństwo przed menedżerem fragmentów podrzędnych. (b/133175997)- Fragmenty podrzędne nie są już animowane, gdy ich fragment nadrzędny jest zastępowany. (b/121017790)
- Animacje i przejścia fragmentów są teraz ignorowane podczas korzystania z
animateLayoutChanges="true"
. Rozwiązaliśmy problem, który powodował, że fragmenty nie były prawidłowo niszczone. (b/116257087)
Wersja 1.1.0-alpha09
16 maja 2019 r.
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
i androidx.fragment:fragment-testing:1.1.0-alpha09
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Fragmenty otrzymują teraz wywołanie zwrotne do nowej metody
onPrimaryNavigationFragmentChanged(boolean)
, gdy zmienia się główny fragment nawigacji. aosp/960857
Poprawki błędów
- Elementy menu utworzone przez fragment podrzędny są teraz prawidłowo usuwane po usunięciu fragmentu nadrzędnego. b/131581013
Wersja 1.1.0-alpha08
7 maja 2019 r.
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
i androidx.fragment:fragment-testing:1.1.0-alpha08
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Ta wersja jest niezgodna z biblioteką Preferences w wersjach od 1.1.0-alpha01 do 1.1.0-alpha04. Jeśli używasz tej wersji komponentu Fragments, przejdź na wersję Preferences 1.1.0-alpha05.
Nowe funkcje
- Dodano nowe przeciążenie funkcji
postponeEnterTransition()
, które przyjmuje limit czasu. Po jego upłynięciu fragment automatycznie wywoła funkcjęstartPostponedEnterTransition()
b/120803208
Zmiany w interfejsie API
- Zmiana powodująca niezgodność: usunięto wycofaną wcześniej metodę
FragmentFactory
instantiate
, która przyjmowała wartośćBundle
. aosp/953856 - Zmiana powodująca niezgodność: stałe
RESUME_ONLY_CURRENT_FRAGMENT
iUSE_SET_USER_VISIBLE_HINT
w plikachFragmentPagerAdapter
iFragmentStatePagerAdapter
zostały zmienione naBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
iBEHAVIOR_SET_USER_VISIBLE_HINT
. aosp/954782
Poprawki błędów
- Fragmenty, których cykl życia został ograniczony za pomocą adnotacji
setMaxLifecycle()
, nie są już wznawiane przed osiągnięciem stanu końcowego. b/131557151 - Gdy używasz
setMaxLifecycle(Lifecycle.State.CREATED)
, widok fragmentów zostanie prawidłowo zniszczony. aosp/954180
Wersja 1.1.0-alpha07
25 kwietnia 2019 r.
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
i androidx.fragment:fragment-testing:1.1.0-alpha07
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Możesz teraz ustawić maksymalny stan cyklu życia fragmentu, wywołując
setMaxLifecycle()
naFragmentTransaction
. Zastępuje on wycofany jużsetUserVisibleHint()
.FragmentPagerAdapter
iFragmentStatePagerAdapter
mają nowy konstruktor, który umożliwia przełączenie się na nowe działanie. (b/129780800)
Zmiany w interfejsie API
moveToState(STARTED)
naFragmentScenario
można teraz wywoływać tylko na urządzeniach z interfejsem API w wersji 24 lub nowszej. (b/129880016)
Zmiany w zachowaniu
- W konsekwencji (b/129907905) fragmenty na stosie wstecznym nie otrzymają wywołania zwrotnego do
onCreateView()
, gdy aktywność hosta zostanie ponownie utworzona.onCreateView()
będzie teraz wywoływana tylko wtedy, gdy fragment stanie się widoczny (tzn. gdy stos wsteczny zostanie usunięty).
Poprawki błędów
- Rozwiązaliśmy problem z używaniem tagu
<fragment>
w XML i konstruktoracontentLayoutId
wFragmentActivity
lubAppCompatActivity
. (b/129907905) - Rozwiązaliśmy problem polegający na tym, że fragmenty w stosie wstecznym nie były przenoszone co najmniej do stanu
CREATED
po zmianie konfiguracji, co powodowało nieprawidłowe usuwanie obiektów ViewModel i podrzędnych fragmentów zachowywanych. (b/129593351) - Rozwiązaliśmy problem z awarią w
restoreSaveState
spowodowaną brakiem synchronizacji zachowanych fragmentów po zapisaniu stanu instancji. (b/130433793) (aosp/947824) - Rozwiązaliśmy problemy polegające na tym, że funkcja
OnBackPressedCallback
dodana za pomocą cyklu życia fragmentu nie była wywoływana, jeśliFragmentManager
miał stos wsteczny. Więcej informacji znajdziesz w artykule androidx.activity 1.0.0-alpha07. (aosp/948209) - Fragmenty nie wymuszają już
LAYER_TYPE_HARDWARE
w przypadku animacji. Jeśli potrzebujesz animacji warstwy sprzętowej, ustaw ją w ramach animacji. (b/129486478)
Wersja 1.1.0-alpha06
3 kwietnia 2019 r.
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
i androidx.fragment:fragment-testing:1.1.0-alpha06
są zwalniane. Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Wyjątki zgłaszane przez FragmentManager zawierają teraz w komunikacie nazwę fragmentu. (b/67759402)
Zmiany w interfejsie API
- Klasy
Fragment
iFragmentActivity
zawierają teraz drugi konstruktor, który przyjmuje wartość@LayoutRes int
. Zastępuje on poprzednie działanie polegające na dodawaniu do klasy adnotacji@ContentView
. To podejście działa zarówno w modułach aplikacji, jak i biblioteki. (b/128352521) - Metoda
onActivityResult()
klasy FragmentActivity jest teraz prawidłowo oznaczona jako@CallSuper
. (b/127971684) - Metoda
instantiate
klasy FragmentFactory, która przyjmuje argument Bundle, została wycofana. Aplikacje powinny używać nowego przeciążeniainstantiate
, które nie przyjmuje argumentu Bundle. (b/128836103) - Metody
FragmentScenario
są teraz prawidłowo oznaczone adnotacją@StyleRes
. (aosp/924193) FragmentTabHost
zostało wycofane. (b/127971835)- Metoda
getThemedContext()
w klasie FragmentActivity została usunięta. (aosp/934078)
Poprawki błędów
- Rozwiązaliśmy problem z wersją 1.1.0-alpha05, który powodował miganie przychodzącego fragmentu na ekranie. (b/129405432)
- Rozwiązaliśmy problem, który powodował utratę głównego fragmentu nawigacji po wykonaniu serii operacji popBackStack+replace+popBackStack. (b/124332597)
- Rozwiązaliśmy problem z używaniem konstruktorów
@ContentView
w aktywności podczas przywracania stanu fragmentu. (b/127313094) - Poprawiliśmy logikę
setTargetFragment()
podczas zastępowania istniejącego fragmentu docelowego fragmentem, który nie jest jeszcze dołączony do menedżera fragmentów. (aosp/932156)
Wersja 1.1.0-alpha05
13 marca 2019 r.
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
i androidx.fragment:fragment-testing:1.1.0-alpha05
są zwalniane. Pełną listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Wyszukiwania adnotacji
@ContentView
są teraz zapisywane 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 menedżera fragmentów powoduje teraz zgłoszenie wyjątkuIllegalStateException
zamiast cichego niepowodzenia (aosp/904301).
Poprawki błędów
onNewIntent
w przypadkuFragmentActivity
jest teraz prawidłowo oznaczony jako@CallSuper
(b/124120586)- Rozwiązaliśmy problem polegający na tym, że funkcja
onDismiss()
interfejsuDialogFragment
mogła być wywoływana dwukrotnie podczas korzystania z funkcjigetDialog().dismiss()
lubgetDialog().cancel()
(b/126563750).
Wersja 1.1.0-alpha04
7 lutego 2019 r.
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
i androidx.fragment:fragment-testing 1.1.0-alpha04
są zwalniane.
Nowe funkcje
- Dodaliśmy obsługę adnotacji klasy
@ContentView
, która umożliwia wskazanie, który plik XML układu ma zostać rozszerzony, zamiast zastępowaćonCreateView()
. Zalecamy wyświetlanie powiązanych zadań wonViewCreated()
. (aosp/837619) fragment-testing
zależy teraz odandroidx.test:core-ktx
1.1.0 stable (b/121209673)- Możesz teraz używać
openActionBarOverflowOrOptionsMenu
zFragmentScenario
do testowania menu opcji hostowanych przez fragment (b/121126668).
Zmiany w interfejsie API
- Dodano metodę
requireArguments()
, która zwraca@NonNull Bundle
lub zgłasza wyjątekIllegalStateException
(b/121196360). - Dodano informację, że wartości
getLifecycle()
,getViewLifecycleOwner()
igetViewLifecycleOwnerLiveData()
nie powinny być zastępowane i w przyszłej wersji zostaną oznaczone jako ostateczne. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880714) - Dodaliśmy informację, że wartości
getViewModelStore()
nie należy zastępować i w przyszłej wersji zostaną one ustalone na stałe. Jeśli obecnie zastępujesz tę metodę, prześlij prośbę o dodanie funkcji. (aosp/880713) - Rozwiązaliśmy problem ze zgodnością binarną z poprzednimi wersjami Fragmentów. (aosp/887877) (aosp/889834)
Poprawki błędów
- Gdy przekażesz wartość
null
dosetTargetFragment()
, docelowe fragmenty zostaną prawidłowo wyczyszczone. (aosp/849969) - Rozwiązaliśmy problem polegający na tym, że docelowe fragmenty były czasami niedostępne w
onDestroy()
lub po nim. (b/122312935) - Metoda onDismiss() klasy DialogFragment jest teraz wywoływana przed
onDestroy()
. (aosp/874133) (aosp/890734)
Wersja 1.1.0-alpha03
17 grudnia 2018 r.
Nowe funkcje
- Klasa Fragment implementuje teraz interfejs
BundleSavedStateRegistryOwner
i jest zależna od nowo wydanej biblioteki SavedState [aosp/824380]. - Dodano delegata właściwości Kotlin, aby pobierać obiekty ViewModel powiązane z zawierającym je obiektem Activity [b/119050253].
by activityViewModels
- Delegat właściwości Kotlin został rozszerzony, aby przyjmować opcjonalną metodę lambda do pobierania
ViewModelStoreOwner
, co umożliwia przekazywanie nadrzędnego fragmentu lub innego niestandardowegoViewModelStoreOwner
za pomocą kodu takiego jakval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253].by viewModels
Zmiany w interfejsie API
FragmentScenario
umożliwia teraz określenie tematu, np.Theme.AppCompat
[b/119054431]. Jest to zmiana powodująca niezgodność.- Dodano metodę
requireView()
, która zwraca wartość@NonNull View
lub zgłasza wyjątekIllegalStateException
[b/120241368]. - Dodano metodę
requireParentFragment()
, która zwraca wartość@NonNull Fragment
lub zgłasza wyjątekIllegalStateException
[b/112103783].
Poprawki błędów
- Naprawiono błąd IllegalStateException: Failure saving state b/120814739
- Fragmenty przywracane z zapisanego stanu instancji będą teraz zawsze otrzymywać wartość niezerową
Bundle
[b/119794496] - Usunięte fragmenty nie używają już ponownie obiektu
Lifecycle
, jeśli zostaną ponownie dodane [b/118880674]
Wersja 1.1.0-alpha02
3 grudnia 2018 r.
Nowe funkcje
- Rozszerzenia Kotlin FragmentScenario umożliwiają teraz używanie lambdy do tworzenia fragmentu zamiast przekazywania instancji
FragmentFactory
. (aosp/812913)
Poprawki błędów
- Rozwiązanie problemu z błędem IllegalStateException podczas używania zagnieżdżonych fragmentów na liście wstecznej (b/119256498).
- Usunięto awarię podczas używania
FragmentScenario.recreate()
zFragmentFactory
(aosp/820540) - Rozwiązaliśmy problem polegający na tym, że po usunięciu fragmentu docelowe fragmenty nie były dostępne (aosp/807634).
Wersja 1.1.0-alpha01
5 listopada 2018 r.
Jest to pierwsza wersja fragment-testing
i FragmentScenario
, która jest oparta na interfejsach API androidx.test:core. Więcej informacji znajdziesz w dokumentacji testowania fragmentów.
Nowe funkcje
- Nowa klasa FragmentScenario do testowania fragmentów w izolacji.
- Możesz teraz ustawić
FragmentFactory
na dowolnymFragmentManager
, aby kontrolować sposób tworzenia nowych instancji Fragment. - Dodaliśmy nowy delegat właściwości Kotlin
by viewModels()
do pobierania ViewModeli z Fragmentu. - Oczekujące zdarzenia wejściowe (np. kliknięcia) są teraz anulowane w
onStop()
fragmentu.
Zmiany w interfejsie API
- Znacznie rozszerzyliśmy adnotacje dotyczące możliwości przyjmowania wartości null w interfejsie Fragment API.
Poprawki błędów
- Rozwiązano problem, który powodował niepowodzenie operacji Fragment w LiveData (b/77944637)
Znane problemy
- Po usunięciu fragmentu z menedżera fragmentów nie można uzyskać dostępu do fragmentów docelowych.
fragment-testing
zależy odandroidx.test:core:1.0.0-beta01
zamiast od prawidłowegoandroidx.test:core:1.0.0
.