Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpha-Release |
---|---|---|---|---|
26. Juni 2024 | 1.8.1 | - | - | - |
Abhängigkeiten deklarieren
Um eine Abhängigkeit von Fragment hinzuzufügen, müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre Anwendung oder Ihr Modul die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen:
Groovig
dependencies { def fragment_version = "1.8.1" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.1" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder Verbesserungsvorschläge für diese Bibliothek haben. Bitte sieh dir die vorhandenen Probleme in dieser Bibliothek an, bevor du eine neue erstellst. Sie können einem vorhandenen Problem Ihre Stimme hinzufügen, indem Sie auf die Sternschaltfläche klicken.
Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.
Version 1.8
Version 1.8.1
26. Juni 2024
androidx.fragment:fragment-*:1.8.1
wurde veröffentlicht. Version 1.8.1 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, durch das Fragmente ohne Container sofort
DESTROYED
waren, wenn eine vorausgesagte Zurück-Geste gestartet wurde. Jetzt bleiben sie im StatusCREATED
, bis die Geste abgeschlossen ist. (If6b83, b/345244539)
Version 1.8.0
12. Juni 2024
androidx.fragment:fragment-*:1.8.0
wurde veröffentlicht. Version 1.8.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.7.0
- Das Artefakt
fragment-compose
enthält jetzt einAndroidFragment
-Composable
, mit dem Fragmente über den Klassennamen des Fragments zur Hierarchie „Compose“ hinzugefügt werden können. Sie übernimmt automatisch das Speichern und Wiederherstellen des Fragmentstatus. Dies sollte als direkter Ersatz für den zuvor empfohlenen Ansatz verwendet werden, bei dem ein Fragment mithilfe vonAndroidViewBinding
aufgebläht wird. - Der
onBackStackChangeCancelled
-Callback auf derOnBackStackChangedListener
-Schnittstelle derFragmentManager
wird jetzt im Rahmen der Ausführung von Vorgängen inFragmentManager
ausgelöst und bewegt ihn entsprechend dem Timing desonBackStackChangeCommitted
-Callbacks näher.
Version 1.8.0-rc01
29. Mai 2024
androidx.fragment:fragment-*:1.8.0-rc01
wurde veröffentlicht. Version 1.8.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Der
onBackStackChangeCancelled
-Callback auf derFragmentManagers OnBackStackChangedListener
-Schnittstelle wird jetzt im Rahmen der Ausführung von Vorgängen inFragmentManager
ausgelöst und bewegt ihn gemäß dem Timing desonBackStackChangeCommitted
-Callbacks näher. (I5ebfb, b/332916112)
Version 1.8.0-beta01
14. Mai 2024
androidx.fragment:fragment-*:1.8.0-beta01
wurde veröffentlicht. Version 1.8.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Von Fragment
1.7.1
: Die vorausschauende Zurück-Funktion wird jetzt nur für Transaktionen ausgeführt, bei denen alle Fragmente entweder einen Animator- oder einen Seekable Androidx-Übergang haben. Dadurch wird ein Problem behoben, bei dem das Abbrechen einer teilweise suchbaren Transaktion zu einem schwarzen Bildschirm führt. (I43037, b/339169168)
Version 1.8.0-alpha02
17. April 2024
androidx.fragment:fragment-*:1.8.0-alpha02
wurde veröffentlicht. Version 1.8.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Aus Fragment
1.7.0-rc02
: Es wurden Logs hinzugefügt, die angeben, warum das Festlegen einersharedElement
ohne weitere Übergänge nicht ausgeführt werden kann. (Iec48e) - Ab Fragment
1.7.0-rc02
: Es wurde ein Fehler behoben, bei dem Transaktionen, bei denen alle anderen Übergänge suchbar waren, ein nicht suchbares gemeinsames Element hinzugefügt wurden, zu einem Absturz führte. Jetzt wird die Transaktion korrekt als nicht suchbar betrachtet. (I18ccd)
Version 1.8.0-alpha01
3. April 2024
androidx.fragment:fragment-*:1.8.0-alpha01
wurde veröffentlicht. Version 1.8.0-alpha01 enthält diese Commits.
Neue Funktionen
- Mit dem neuen
AndroidFragment
Composable
können Fragmente über den Klassennamen des Fragments zur Hierarchie „Compose“ hinzugefügt werden. Sie übernimmt automatisch das Speichern und Wiederherstellen des Fragmentstatus. Dies kann als direkter Ersatz für AndroidViewBindingComposable
verwendet werden.(b/312895363, Icf841)
Änderungen an der Dokumentation
- Die Dokumentation für die
OnBackStackChangedListener
APIs wurde aktualisiert, um anzugeben, wann sie aufgerufen werden und wie sie verwendet werden sollen. (I0bfd9)
Aktualisierung der Abhängigkeit
- Das Fragment hängt jetzt von Profile Installer 1.3.1 ab.
Version 1.7
Version 1.7.1
14. Mai 2024
androidx.fragment:fragment-*:1.7.1
wurde veröffentlicht. Version 1.7.1 enthält diese Commits.
Fehlerkorrekturen
- Predictive Back wird jetzt nur für Transaktionen ausgeführt, bei denen alle Fragmente entweder einen Animator- oder einen Seekable Androidx-Übergang aufweisen. Dadurch wird ein Problem behoben, bei dem das Abbrechen einer teilweise suchbaren Transaktion zu einem leeren Bildschirm führen würde. (I43037, b/339169168)
Version 1.7.0
1. Mai 2024
androidx.fragment:fragment-*:1.7.0
wurde veröffentlicht. Version 1.7.0 enthält diese Commits.
Unterstützung für Rückengesten
- Fragmente unterstützen jetzt bei der Verwendung von
Animator
oder bei Verwendung von AndroidX Transition 1.5.0 für die Vorhersage in der App. So können Nutzer mit der Zurück-Touch-Geste das vorherige Fragment anzeigen, indem sie nach deinem Animations-/Übergang suchen, bevor sie sich entscheiden, die Transaktion durch Abschließen der Touch-Geste zu speichern oder den Vorgang abzubrechen.
Übergangssystem | XML-Ressource | Unterstützt die vorausschauende Rückenbahn |
---|---|---|
Animation |
R.anim |
Nein |
Animator |
R.animator |
Ja |
Framework Transition |
R.transition |
Nein |
AndroidX Transition mit Transition 1.4.1 oder niedriger |
R.transition |
Nein |
AndroidX Transition mit Transition 1.5.0 |
R.transition |
Ja |
Wenn Sie nach der Aktivierung der vorausschauenden Zurück-Touch-Geste in Fragmenten Probleme mit der vorausschauenden Zurück-Unterstützung feststellen, melden Sie ein Problem bei Fragment. Verwenden Sie dabei ein Beispielprojekt, in dem Ihr Problem reproduziert wird. Du kannst die automatische Vervollständigung deaktivieren, indem du FragmentManager.enabledPredictiveBack(false)
in den onCreate()
deiner Aktivitäten verwendest.
FragmentManager.OnBackStackChangedListener()
stellt jetzt onBackStackChangeProgressed()
und onBackStackChangeCancelled()
für den prognostizierten zurückliegenden Fortschritt bzw. abgesagte Ereignisse bereit.
Artefakt zur Fragmenterstellung
Es wurde ein neues fragment-compose
-Artefakt erstellt, das sich auf die Unterstützung von Anwendungen konzentriert, die gerade von einer fragmentierten Architektur zu einer vollständig Compose-basierten Architektur verschoben werden.
Das erste in diesem neuen Artefakt verfügbare Feature ist eine content
-Erweiterungsmethode für Fragment
. Sie soll die Verwendung von „Compose“ für die Benutzeroberfläche eines einzelnen Fragments vereinfachen. Dazu wird eine ComposeView
für Sie erstellt und die richtige ViewCompositionStrategy
festgelegt.
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)
}
}
Version 1.7.0-rc02
17. April 2024
androidx.fragment:fragment-*:1.7.0-rc02
wurde veröffentlicht. Version 1.7.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Es wurden Logs hinzugefügt, die angeben, warum das Festlegen einer
sharedElement
ohne weitere Umstellungen nicht ausgeführt werden kann. (Iec48e) - Es wurde ein Fehler behoben, bei dem Transaktionen, bei denen alle anderen Übergänge suchbar waren, ein nicht suchbares gemeinsames Element hinzugefügt wurden, zu einem Absturz führte. Jetzt wird die Transaktion korrekt als nicht suchbar betrachtet. (I18ccd)
Version 1.7.0-rc01
3. April 2024
androidx.fragment:fragment-*:1.7.0-rc01
wurde veröffentlicht. Version 1.7.0-rc01 enthält diese Commits.
Aktualisierung der Abhängigkeit
- Das Fragment hängt jetzt von Profile Installer 1.3.1 ab.
Version 1.7.0-beta01
20. März 2024
androidx.fragment:fragment-*:1.7.0-beta01
wurde veröffentlicht. Version 1.7.0-beta01 enthält diese Commits.
API-Änderungen
FragmentHostCallback
ist jetzt in Kotlin geschrieben, sodass die Null-Zulässigkeit des generischen Typs des Hosts der Null-Zulässigkeit des RückgabetypsonGetHost()
entspricht. (I40af5)
Fehlerkorrekturen
- Folgendes Problem wurde behoben: Wenn eine vorausschauende Zurück-Geste für ein Fragment, das sich nicht in einem Container befindet, festgeschrieben wurde, wurde dieses Fragment nie gelöscht. Das Fragment wird jetzt sofort in den endgültigen Zustand verschoben. (Ida0d9)
- Es wurde ein Problem in Fragmenten behoben, bei dem das Unterbrechen eingehender Übergänge mit einer vorausschauenden Zurück-Geste dazu zerstörte, in die Ansicht zu gelangen und einen leeren Bildschirm zu hinterlassen. (Id3f22, b/319531491)
Version 1.7.0-alpha10
7. Februar 2024
androidx.fragment:fragment-*:1.7.0-alpha10
wurde veröffentlicht. Version 1.7.0-alpha10 enthält diese Commits.
Fehlerkorrekturen
- Das bekannte Problem in der vorherigen Fragment-Version wurde behoben, bei dem Fragmente mithilfe der Predictive Back-Unterstützung für
Animator
- oder AndroidX-Übergänge eineNullPointerException
vonhandleOnBackProgressed
ausgeben, wenn jemals überaddOnBackStackChangedListener
keinFragmentManager.OnBackStackChangedListener
hinzugefügt wurde. (I7c835)
Version 1.7.0-alpha09
24. Januar 2024
androidx.fragment:fragment-*:1.7.0-alpha09
wurde veröffentlicht. Version 1.7.0-alpha09 enthält diese Commits.
Artefakt zur Fragmenterstellung
Es wurde ein neues fragment-compose
-Artefakt erstellt, das sich auf die Unterstützung von Anwendungen konzentriert, die gerade von einer fragmentierten Architektur zu einer vollständig Compose-basierten Architektur verschoben werden.
Das erste in diesem neuen Artefakt verfügbare Feature ist eine content
-Erweiterungsmethode für Fragment
. Sie soll die Verwendung von „Compose“ für die Benutzeroberfläche eines einzelnen Fragments vereinfachen. Dazu wird eine ComposeView
für Sie erstellt und die richtige ViewCompositionStrategy
festgelegt. (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)
}
}
Neue Funktionen
FragmentManager.OnBackStackChangedListener()
stellt jetztonBackStackChangeProgressed()
undonBackStackChangeCancelled()
für den prognostizierten zurückliegenden Fortschritt bzw. abgesagte Ereignisse bereit. (214b87)
Bekanntes Problem
- Wenn Fragment die vorausschauende Zurück-Unterstützung für
Animator
- oder AndroidX-Übergänge verwendet, geben Fragmente eineNullPointerException
vonhandleOnBackProgressed
aus, wenn noch nieFragmentManager.OnBackStackChangedListener
überaddOnBackStackChangedListener
hinzugefügt wurde. Durch das manuelle Hinzufügen eines Listeners lässt sich der Absturz umgehen. Dieses Problem wird in der nächsten Version von Fragmenten behoben.
Version 1.7.0-alpha08
10. Januar 2024
androidx.fragment:fragment-*:1.7.0-alpha08
wurde veröffentlicht. Version 1.7.0-alpha08 enthält diese Commits.
Aufräumen
- Die Problemumgehung für die Übergangsbibliothek wurde entfernt, die in Umstellung
1.5.0-alpha06
behoben wurde. (I04356)
Version 1.7.0-alpha07
29. November 2023
androidx.fragment:fragment-*:1.7.0-alpha07
wurde veröffentlicht. Version 1.7.0-alpha07 enthält diese Commits.
Fehlerkorrekturen
- Ein
NullPointerException
wurde behoben, der durch das Festlegen eines Übergangs für gemeinsam genutzte Elemente und das Fehlen einer Eingabe/ExitTransition verursacht wurde. (I8472b) - Von Fragment
1.6.2
: Wenn das Fragment einesFragmentContainerView
aufgebläht ist, kann auf seine Status wieFragmentManager
, Host und ID jetzt über denonInflate
-Callback zugegriffen werden. (I1e44c, b/307427423) - Aus Fragment
1.6.2
: Wenn Sie mitclearBackStack
eine Reihe von Fragmenten entfernen, werden dieViewModel
aller verschachtelten Fragmente jetzt gelöscht, wenn dieViewModels
des übergeordneten Fragments gelöscht werden. (I6d83c, b/296173018)
Version 1.7.0-alpha06
4. Oktober 2023
androidx.fragment:fragment-*:1.7.0-alpha06
wurde veröffentlicht. Version 1.7.0-alpha06 enthält diese Commits.
Aktualisierung der Abhängigkeit
- Fragmente wurden aktualisiert und hängen jetzt von der neuen
animateToStart
API ab, die unter Umstellung1.5.0-alpha04
hinzugefügt wurde.
Version 1.7.0-alpha05
20. September 2023
androidx.fragment:fragment-*:1.7.0-alpha05
wurde veröffentlicht. Version 1.7.0-alpha05 enthält diese Commits.
Neue Funktionen
- Fragmente unterstützen jetzt Predictive Back bei Verwendung von Androidx Transitions. Auf diese Weise können Sie die Zurück-Touch-Geste verwenden, um mit Ihrer benutzerdefinierten Androidx-Übergang zum vorherigen Fragment zu springen, bevor Sie sich entscheiden, die Transaktion mit der abgeschlossenen Geste entweder zu übergeben oder abzubrechen. Sie müssen die Version
1.5.0-alpha03
für die Umstellung verwenden, um diese Funktion zu aktivieren. (Ib49b4, b/285175724)
Bekannte Probleme
- Wenn Sie eine „Zurück“-Touch-Geste mit einem Übergang einmal abbrechen, wird der Übergang beim nächsten Start der „Zurück“-Touch-Geste nicht ausgeführt, was zu einem leeren Bildschirm führt. Dies könnte durch ein Problem in der Übergangsbibliothek verursacht werden. (b/300157785). Wenn Sie dieses Problem sehen, melden Sie ein Problem für Fragment und geben Sie ein Beispielprojekt an, in dem das Problem reproduziert wird. Du kannst die automatische Vervollständigung deaktivieren, indem du
FragmentManager.enabledPredictiveBack(false)
in denonCreate()
deiner Aktivitäten verwendest.
Version 1.7.0-alpha04
6. September 2023
androidx.fragment:fragment-*:1.7.0-alpha04
wurde veröffentlicht. Version 1.7.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem Fragmente beim Abbrechen einer Touch-Geste zur automatischen Vervollständigung nicht den richtigen Lebenszyklusstatus erreichten. (I7cffe, b/297379023)
- Regressionen behoben, bei denen Animationen mit Übergängen ausgeführt werden durften. (I59f36)
- Bei der Verwendung von Predictive Back mit Fragmenten wurde ein Problem behoben, bei dem ein Versuch, das vorletzte Fragment des Back-Stacks zweimal schnell hintereinander zurückzugehen, zu einem Absturz führte. (Ifa1a4)
Version 1.7.0-alpha03
23. August 2023
androidx.fragment:fragment-*:1.7.0-alpha03
wurde veröffentlicht. Version 1.7.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem mit Fragmenten behoben, das bei Verwendung der automatischen Vervollständigungsfunktion dazu führte, dass das erste Fragment im Back Stack des Fragmentmanagers übersprungen und die Aktivität beendet wurde, wenn das System über die Bedienung über 3 Schaltflächen oder die vorausgesagte Zurück-Touch-Geste zum Zurückspringen verwendet wurde. (I0664b, b/295231788)
Version 1.7.0-alpha02
9. August 2023
androidx.fragment:fragment-*:1.7.0-alpha02
wurde veröffentlicht. Version 1.7.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Wenn Sie Fragmente mit vorausschauenden Zurück-Gesten aus API 34 und ein Übergangssystem verwenden, das keine Suche (
Animations
,Transitions
) oder keine Übergänge unterstützt, warten Fragmente jetzt, bis die Geste abgeschlossen ist, bevor sie die Aktion „Zurück“ ausführen. (I8100c)
Version 1.7.0-alpha01
7. Juni 2023
androidx.fragment:fragment-*:1.7.0-alpha01
wurde veröffentlicht. Diese Version wird in einem internen Zweig entwickelt.
Neue Funktionen
- Fragmente unterstützen jetzt bei der Verwendung von
Animator
die Hintergrundwiedergabe in der App. So kannst du die Zurück-Touch-Geste verwenden, um das vorherige Fragment mit deinem benutzerdefinierten Animator zu sehen, bevor du dich entscheidest, die Transaktion entweder mit der abgeschlossenen Bewegung zu bestätigen oder abzubrechen. Sie können dieses neue Verhalten auch deaktivieren, indem Sie den experimentellenenablePredictiveBack()
verwenden undfalse
übergeben.
Version 1.6
Version 1.6.2
1. November 2023
androidx.fragment:fragment-*:1.6.2
wurde veröffentlicht. Version 1.6.2 enthält diese Commits.
Fehlerkorrekturen
- Wenn das Fragment eines
FragmentContainerView
zu groß ist, kann auf seine Status wieFragmentManager
, Host und ID jetzt über denonInflate
-Callback zugegriffen werden. (I1e44c, b/307427423) - Wenn Sie
clearBackStack
verwenden, um eine Reihe von Fragmenten zu entfernen, werden jetzt alleViewModel
-Elemente eines verschachtelten Fragments gelöscht, wenn dieViewModels
des übergeordneten Fragments gelöscht werden. (I6d83c, b/296173018)
Version 1.6.1
26. Juli 2023
androidx.fragment:fragment-*:1.6.1
wurde veröffentlicht. Version 1.6.1 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem der gespeicherte Status, der beim Beenden der Aktivität, aber nicht gelöscht wurde, fälschlicherweise im Cache gespeichert wurde, selbst nachdem die Fragmentinstanz wieder in den Status
RESUMED
verschoben wurde. Dies würde dazu führen, dass der im Cache gespeicherte Status wiederverwendet wird, wenn sich die Fragmentinstanz im Back Stack befunden hat, wenn die Multiple Back Stacks API verwendet wurde, um das Fragment zu speichern und wiederherzustellen. (I71288, b/246289075)
Aktualisierung der Abhängigkeit
- Das Fragment hängt jetzt von der Aktivität 1.7.2 ab. Dadurch wird ein Problem behoben, bei dem Kotlin-Nutzer
ComponentDialog
nicht ohne explizite Abhängigkeit von Activity erweitern konnten. (b/287509323)
Version 1.6.0
7. Juni 2023
androidx.fragment:fragment-*:1.6.0
wurde veröffentlicht. Version 1.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.5.0
- Der gespeicherte Status von
Fragment
s wurde vollständig auf den Status der privaten Bibliothek (benutzerdefinierteParcelable
-Klassen) und den vom Entwickler bereitgestellten Status aufgeteilt. Dieser Status wird jetzt immer in einerBundle
gespeichert, mit der genau ermittelt werden kann, woher der Status eines Fragments stammt. - Die
FragmentManager.OnBackStackChangedListener
-Oberfläche wurde um zwei zusätzliche Callbacks vononBackStackChangeStarted
undonBackStackChangeCommitted
erweitert. Diese werden mit jedemFragment
direkt vor dem Hinzufügen/Entfernen aus dem Back-Stack des Fragments bzw. direkt nach dem Commit der Transaktion aufgerufen. FragmentStrictMode
hat ein neuesWrongNestedHierarchyViolation
hinzugefügt, das erkennt, wenn ein untergeordnetes Fragment in der Ansichtshierarchie des übergeordneten Elements verschachtelt, aber nicht zumchildFragmentManager
des übergeordneten Elements hinzugefügt wird.- Die APIs
Fragment
undFragmentManager
, die einIntent
oderIntentSender
verwenden, sind jetzt korrekt mit@NonNull
annotiert, um zu verhindern, dass ein Nullwert als Nullwert übergeben wird, da die entsprechenden Android-Framework-APIs, die von diesen Methoden aufgerufen werden, immer sofort zum Absturz gebracht würden. DialogFragment
bietet jetzt über dierequireComponentDialog()
API Zugriff auf die zugrunde liegendeComponentDialog
.- Das Fragment hängt jetzt vom Lebenszyklus
2.6.1
ab. - Das Fragment hängt jetzt von SavedState
1.2.1
ab. - Das Fragment hängt jetzt von ProfileInstaller
1.3.0
ab. Das Artefakt
fragment-testing-manifest
trennt die Manifesteinträge vom Rest der Komponenten zum Fragmenttest. Sie haben dann folgende Möglichkeiten:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Dadurch werden Konflikte aufgrund von Versionsabweichungen zwischen
fragment-testing
undandroidx.test
vermieden.
Version 1.6.0-rc01
10. Mai 2023
androidx.fragment:fragment-*:1.6.0-rc01
wurde veröffentlicht. Version 1.6.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Problem behoben, bei dem
ActivityResult
s mit dem falschen Anfragecode gesendet wurden, wenn mehrerestartActivityForResult
-Anfragen hintereinander gestellt wurden. (If0b9d, b/249519359) - Es wurde ein Problem behoben, bei dem
onBackStackChangeListener
-Callbacks für Transaktionen gesendet wurden, die den Back-Stack nicht änderten, wenn sie mit Transaktionen vermischt waren, die dies tun. (I0eb5c, b/279306628)
Version 1.6.0-beta01
19. April 2023
androidx.fragment:fragment-*:1.6.0-beta01
wurde veröffentlicht. Version 1.6.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Die Verwendung von
postponeEnterTransition
mit einem Zeitlimit und das anschließende Ersetzen des verschobenen Fragments führt nicht mehr zum Verlust des verschobenen Fragments. (I2ec7d, b/276375110) - Die neuen
onBackStackChangeStarted
- undonBackStackChangeCommitted
-Callbacks senden ein Fragment jetzt nur einmal, auch wenn mehrere Transaktionen dasselbe Fragment enthalten. (Ic6b69)
Version 1.6.0-alpha09
5. April 2023
androidx.fragment:fragment-*:1.6.0-alpha09
wurde veröffentlicht. Version 1.6.0-alpha09 enthält diese Commits.
API-Änderungen
DialogFragment
bietet jetzt über dierequireComponentDialog()
API Zugriff auf die zugrunde liegendeComponentDialog
. (I022e3, b/234274777)- Die Fragment APIs
commitNow()
,executePendingTransactions()
undpopBackStackImmediate()
wurden mit@MainThread
annotiert. Das bedeutet, dass sie jetzt alle Build-Fehler ausgeben, wenn sie nicht aus dem Hauptthread aufgerufen werden, und nicht warten, bis sie zur Laufzeit fehlschlagen. (IC9665, b/236538905)
Fehlerkorrekturen
- Ein Fehler in
FragmentManager
wurde behoben, bei dem das Speichern und Wiederherstellen im selben Frame zu einem Absturz führte. (Ib36af, b/246519668) OnBackStackChangedListener
-onBackStackChangeStarted
- undonBackStackChangeCommitted
-Callbacks werden jetzt nur dann ausgeführt, wenn derFragmentManager
-Back-Stack geändert wird. (I66055, b/274788957)
Version 1.6.0-alpha08
22. März 2023
androidx.fragment:fragment-*:1.6.0-alpha08
wurde veröffentlicht. Version 1.6.0-alpha08 enthält diese Commits.
Verhaltensänderung
- Das Timing des
OnBackStackChangedListener.onBackStackChangeCommited
-Callbacks wurde so angepasst, dass es vor der Ausführung der Fragmentvorgänge ausgeführt wird. Dadurch wird sichergestellt, dass an den Callback niemals ein getrenntes Fragment weitergegeben wird. (I66a76, b/273568280)
Fehlerkorrekturen
- Ab Fragment
1.5.6
: Ein Problem wurde behoben, bei dem das Aufrufen vonclearFragmentResultListener
in einemsetFragmentResultListener
nicht funktionierte, wennLifecycle
bereitsSTARTED
war und bereits ein Ergebnis verfügbar war. (If7458)
Aktualisierung der Abhängigkeiten
- Das Fragment hängt jetzt vom Lebenszyklus
2.6.1
ab. (586fe7) - Das Fragment hängt jetzt von SavedState
1.2.1
ab. (078e4e) - Das Fragment hängt jetzt von ProfileInstaller
1.3.0
ab. (3fc05b)
Version 1.6.0-alpha07
8. März 2023
androidx.fragment:fragment-*:1.6.0-alpha07
wurde veröffentlicht. Version 1.6.0-alpha07 enthält diese Commits.
Fehlerkorrekturen
- Ab Fragment
1.5.6
: Ein Problem wurde behoben, bei dem das Entfernen eines Fragments, unabhängig davon, ob es Menüelemente hinzugefügt hat, ungültig wurde. (50f098, b/244336571)
Version 1.6.0-alpha06
22. Februar 2023
androidx.fragment:fragment-*:1.6.0-alpha06
wurde veröffentlicht. Version 1.6.0-alpha06 enthält diese Commits.
Verhaltensänderung
- Der neue
onBackStackChangedStarted
-Callback imonBackStackChangedListener
vonFragmentManager
wird ausgeführt, bevor Fragmente in ihren Zielstatus verschoben werden. (I34726)
Version 1.6.0-alpha05
8. Februar 2023
androidx.fragment:fragment-*:1.6.0-alpha05
wurde veröffentlicht. Version 1.6.0-alpha05 enthält diese Commits.
Neue Funktionen
- Die
FragmentManager.OnBackStackChagnedListener
-Oberfläche bietet jetzt zwei zusätzliche Callbacks,onBackStackChangeStarted
undonBackStackChangeCommitted
, die zusätzliche Informationen ermöglichen und steuern, wann Back-Stack-Änderungen inFragmentManager
erfolgen. (Ib7ce5, b/238686802)
API-Änderungen
- Die APIs
Fragment
undFragmentManager
, die einIntent
oderIntentSender
verwenden, sind jetzt korrekt mit@NonNull
annotiert, um zu verhindern, dass ein Nullwert als Nullwert übergeben wird, da die entsprechenden Android-Framework-APIs, bei denen diese Methoden aufgerufen werden, immer sofort zum Absturz gebracht würden. (I06fd4)
Version 1.6.0-alpha04
7. Dezember 2022
androidx.fragment:fragment-*:1.6.0-alpha04
wurde veröffentlicht. Version 1.6.0-alpha04 enthält diese Commits.
Neue Funktionen
FragmentStrictMode
hat ein neuesWrongNestedHierarchyViolation
hinzugefügt, das erkennt, wenn ein untergeordnetes Fragment in der Ansichtshierarchie des übergeordneten Elements verschachtelt, aber nicht zumchildFragmentManager
des übergeordneten Elements hinzugefügt wird. (I72521, b/249299268)
Änderungen im Verhalten
- Fragmente stellen jetzt ihren
SavedStateRegistry
-Status vor demonAttach()
wieder her, damit sie für alle Methoden des höheren Lebenszyklus verfügbar sind. (I1e2b1)
API-Änderungen
- Das Artefakt
fragment-testing-manifest
trennt die Manifesteinträge vom Rest der Komponenten zum Fragmenttest. Sie haben dann folgende Möglichkeiten:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Dadurch werden Konflikte aufgrund von Versionsabweichungen zwischen fragment-testing
und androidx.test
vermieden.(I8e534, b/128612536)
Fehlerkorrekturen
- Ab Fragment
1.5.5
: Der StatusViewModel
wird in Fragmenten nicht mehr fälschlicherweise als Teil des gespeicherten Status der Ansichtsregistrierung gespeichert. (I10d2b, b/253546214)
Version 1.6.0-alpha03
5. Oktober 2022
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
und androidx.fragment:fragment-testing:1.6.0-alpha03
wurden veröffentlicht. Version 1.6.0-alpha03 enthält diese Commits.
API-Änderungen
- Klassen, die
DialogFragment
erweitern, müssen jetzt „super“ in ihrenonDismiss()
-Überschreibungen aufrufen. (I14798, b/238928865)
Fehlerkorrekturen
- Regressionen behoben, die durch die Integration der neuen Anbieter-Callback-Schnittstellen (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) verursacht wurden, um sicherzustellen, dass Fragmente immer die richtigen Callbacks erhalten. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2
Version 1.6.0-alpha02
24. August 2022
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
und androidx.fragment:fragment-testing:1.6.0-alpha02
wurden veröffentlicht. Version 1.6.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Von Fragment
1.5.2
: Ein Problem wurde behoben, bei dem das gleichzeitige Ausführen einerpopBackStack()
- und einerreplace()
-Transaktion dazu führen konnte, dass bei verlassenen Fragmenten das falscheAnimation
/Animator
ausgeführt wurde. (Ib1c07, b/214835303)
Version 1.6.0-alpha01
27. Juli 2022
androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
und androidx.fragment:fragment-testing:1.6.0-alpha01
wurden veröffentlicht. Version 1.6.0-alpha01 enthält diese Commits.
Änderungen im Verhalten
- Der gespeicherte Status von
Fragment
s wurde vollständig auf den Status der privaten Bibliothek (benutzerdefinierteParcelable
-Klassen) und den vom Entwickler bereitgestellten Status aufgeteilt. Dieser Status wird jetzt immer in einerBundle
gespeichert, mit der genau ermittelt werden kann, woher der Status eines Fragments stammt. (b/207158202)
Fehlerkorrekturen
- Aus Fragment
1.5.1
: Beheben Sie eine Regression inDialogFragmentCallbacksDetector
, bei der die Verwendung der mit AGP 7.4 gebündelten Lint-Version zum Absturz von Lint führte. (b/237567009)
Aktualisierung der Abhängigkeit
- Von Fragment
1.5.1
: Die Fragmentbibliothek hängt jetzt vom Lebenszyklus2.5.1
ab. (Id204c) - Aus Fragment
1.5.1
: Die Fragmentbibliothek hängt jetzt von der Aktivität1.5.1
ab. (I10f07)
Version 1.5
Version 1.5.7
19. April 2023
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
und androidx.fragment:fragment-testing:1.5.7
wurden veröffentlicht. Version 1.5.7 enthält diese Commits.
Fehlerkorrekturen
- Die Verwendung von
postponeEnterTransition
mit einem Zeitlimit und das anschließende Ersetzen des verschobenen Fragments führt nicht mehr zum Verlust des verschobenen Fragments. (I2ec7d, b/276375110)
Version 1.5.6
22. März 2023
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
und androidx.fragment:fragment-testing:1.5.6
wurden veröffentlicht. Version 1.5.6 enthält diese Commits.
Fehlerkorrekturen
- Das Problem, bei dem das Entfernen eines Fragments, unabhängig davon, ob es Menüelemente hinzugefügt hat, ungültig wurde, hat das Menü der Aktivität ungültig gemacht. Dieses Problem wurde behoben. (50f098, b/244336571)
- Das Aufrufen von
clearFragmentResultListener
insetFragmentResultListener
funktionierte nicht, wennLifecycle
bereitsSTARTED
war und bereits ein Ergebnis verfügbar war. Dieses Problem wurde behoben. (If7458)
Version 1.5.5
7. Dezember 2022
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
und androidx.fragment:fragment-testing:1.5.5
wurden veröffentlicht. Version 1.5.5 enthält diese Commits.
Fehlerkorrekturen
- Fragmente speichern den Status
ViewModel
nicht mehr fälschlicherweise als Teil des gespeicherten Status der Ansichts-Registry. (I10d2b, b/253546214)
Version 1.5.4
24. Oktober 2022
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
und androidx.fragment:fragment-testing:1.5.4
wurden veröffentlicht. Version 1.5.4 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Fehler behoben, bei dem eine benutzerdefinierte
FragmentController
mit einem Host, der keine Anbieter-Callback-Schnittstelle (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) implementiert hat, und das Aufrufen der eingestellten Weiterleitungsfunktion keine Weiterleitung an untergeordnete Fragmente auslöste. (I9b380)
Version 1.5.3
21. September 2022
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
und androidx.fragment:fragment-testing:1.5.3
wurden veröffentlicht. Version 1.5.3 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, der dazu führte, dass Fragmente im Back-Stack
onMultiWindowModeChanged()
-,onPictureInPictureModeChanged()
-,onLowMemory()
- undonConfigurationChanged()
-Callbacks erhielten. (I34581, I8dfe6, b/242570955) - Verschachtelte untergeordnete Fragmente erhalten nicht mehr mehrere
onMultiWindowModeChanged()
-,onPictureInPictureModeChanged()
-,onLowMemory()
- oderonConfigurationChanged()
-Callbacks. (I690b3, Id0096, If9d6b, I2cba2)
Version 1.5.2
10. August 2022
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
und androidx.fragment:fragment-testing:1.5.2
wurden veröffentlicht. Version 1.5.2 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem das gleichzeitige Ausführen einer
popBackStack()
- und einerreplace()
-Transaktion dazu führen konnte, dass bei verlassenen Fragmenten das falscheAnimation
/Animator
ausgeführt wurde. (Ib1c07, b/214835303)
Version 1.5.1
27. Juli 2022
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
und androidx.fragment:fragment-testing:1.5.1
wurden veröffentlicht. Version 1.5.1 enthält diese Commits.
Fehlerkorrekturen
- Es wurde eine Regression im
DialogFragmentCallbacksDetector
behoben, bei der die Verwendung der mit AGP 7.4 gebündelten Lint-Version zum Absturz von Lint führen würde. (b/237567009)
Aktualisierung der Abhängigkeit
- Die Fragmentbibliothek hängt jetzt vom Lebenszyklus
2.5.1
ab. (Id204c) - Die Fragmentbibliothek hängt jetzt von der Aktivität
1.5.1
ab. (I10f07)
Version 1.5.0
29. Juni 2022
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
und androidx.fragment:fragment-testing:1.5.0
wurden veröffentlicht. Version 1.5.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.4.0
- CreationExtras-Integration:
Fragment
kann jetzt eine zustandsloseViewModelProvider.Factory
überCreationExtras
des Lebenszyklus2.5.0
bereitstellen. - Integration des Komponentendialogfelds:
DialogFragment
verwendet jetztComponentDialog
über die Aktivität1.5.0
als Standarddialogfeld, das vononCreateDialog()
zurückgegeben wird. - Refaktorierung des gespeicherten Instanzstatus: Fragmente haben begonnen, die Art und Weise zu ändern, wie sie ihren Instanzstatus speichern. Damit soll klar identifiziert werden, welcher Status im Fragment gespeichert wurde und aus welcher Quelle er stammt. Zu den aktuellen Änderungen gehören:
FragmentManager
speichert den gespeicherten Instanzstatus jetzt in einerBundle
statt direkt in einem benutzerdefiniertenParcelable
.- Über die
Fragment Result APIs
festgelegte Ergebnisse, die noch nicht übermittelt wurden, werden jetzt getrennt vom internen Status derFragmentManager
gespeichert. - Der mit jedem einzelnen Fragment verknüpfte Status wird jetzt getrennt vom internen Status des
FragmentManager
gespeichert. So können Sie die Menge des gespeicherten Status, der einem einzelnen Fragment zugeordnet ist, mit den eindeutigen IDs imFragment
-Fehlerbehebungsprotokoll korrelieren.
Weitere Änderungen
FragmentStrictMode
bietet jetzt die Möglichkeit für private Drittanbieter-Fragmente, bestimmte Strafen bei Verstößen zu umgehen, indemallowViolation()
mit dem Klassennamen verwendet wird.- Die Fragment APIs zum Bereitstellen eines Menüs für die
ActionBar
Ihrer Aktivität wurden eingestellt. Die in der Aktivität1.4.0
hinzugefügten APIsMenuHost
undMenuProvider
bieten eine testbare, lebenszyklusbewusste äquivalente API-Oberfläche, die von Fragmenten verwendet werden sollten.
Version 1.5.0-rc01
11. Mai 2022
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
und androidx.fragment:fragment-testing:1.5.0-rc01
wurden veröffentlicht. Version 1.5.0-rc01 enthält diese Commits.
Refaktorierung des gespeicherten Instanzstatus
- Der mit jedem einzelnen Fragment verknüpfte Status wird jetzt getrennt vom internen Status des
FragmentManager
gespeichert. So können Sie den Umfang des gespeicherten Status, der einem einzelnen Fragment zugeordnet ist, mit den eindeutigen IDs im Debugging-Logging für Fragmente korrelieren. (a153e0, b/207158202)
Version 1.5.0-beta01
20. April 2022
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
und androidx.fragment:fragment-testing:1.5.0-beta01
wurden veröffentlicht. Version 1.5.0-beta01 enthält diese Commits.
API-Änderungen
DialogFragment
hat eine neuedismissNow
-Methode hinzugefügt, diecommitNow
für Parität mit dershowNow
-Funktion verwendet. Dadurch wirdDialog
nicht sofort geschlossen, sondern nur der Status vonFragmentManager
synchron aktualisiert. (I15c36, b/72644830)
Refaktorierung des gespeicherten Instanzstatus
FragmentManager
speichert den gespeicherten Instanzstatus jetzt in einerBundle
statt direkt in einem benutzerdefiniertenParcelable
. Dies ist der erste Schritt, um zusätzliche Transparenz darüber zu schaffen, was tatsächlich von Fragmenten gespeichert wird. (I93807, b/207158202)- Über die Fragment Result APIs festgelegte Ergebnisse, die noch nicht übermittelt wurden, werden jetzt getrennt vom internen Status der
FragmentManager
gespeichert. Dadurch erhalten Sie zusätzliche Transparenz darüber, welche Ergebnisse als Teil des gespeicherten Instanzstatus gespeichert werden. (I6ea12, b/207158202)
Version 1.5.0-alpha05
6. April 2022
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
und androidx.fragment:fragment-testing:1.5.0-alpha05
wurden veröffentlicht. Version 1.5.0-alpha05 enthält diese Commits.
API-Änderungen
setHasOptionsMenu()
vonFragment
wurde eingestellt. Zum Verwalten von Menüs und den zugehörigen Menüelementen sollten stattdessen die neuen APIs für Menüs verwendet werden. Informationen hierzu finden Sie in den Versionshinweisen zu Fragment1.5.0-alpha04
. (I7b4b4, b/226438239)
Version 1.5.0-alpha04
23. März 2022
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
und androidx.fragment:fragment-testing:1.5.0-alpha04
wurden veröffentlicht. Version 1.5.0-alpha04 enthält diese Commits.
API-Änderungen
- Die Fragment APIs zum Bereitstellen eines Menüs für die
ActionBar
Ihrer Aktivität wurden eingestellt, da sie Ihr Fragment eng mit Ihrer Aktivität verknüpfen und nicht isoliert getestet werden können. Die in der Aktivität1.4.0-alpha01
hinzugefügten APIsMenuHost
undMenuProvider
bieten eine testbare, lebenszyklusbewusste äquivalente API-Oberfläche, die von Fragmenten verwendet werden sollten. (I50a59, I20758)
Fehlerkorrekturen
SavedStateViewFactory
unterstützt jetzt die Verwendung vonCreationExtras
, auch wenn es mit einemSavedStateRegistryOwner
initialisiert wurde. Wenn Extras angegeben werden, werden die initialisierten Argumente ignoriert. (I6c43b, b/224844583)
Version 1.5.0-alpha03
23. Februar 2022
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
und androidx.fragment:fragment-testing:1.5.0-alpha03
wurden veröffentlicht. Version 1.5.0-alpha03 enthält diese Commits.
API-Änderungen
- Sie können jetzt
CreationExtras
an die Funktionenby viewModels()
undby activityViewModels()
übergeben. (Ibefe7, b/217601110)
Änderungen im Verhalten
DialogFragment
verwendet jetztComponentDialog
als Standarddialogfeld, das vononCreateDialog()
zurückgegeben wird. (If3784, b/217618170)
Version 1.5.0-alpha02
9. Februar 2022
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
und androidx.fragment:fragment-testing:1.5.0-alpha02
wurden veröffentlicht. Version 1.5.0-alpha02 enthält diese Commits.
Neue Funktionen
FragmentStrictMode
bietet jetzt die Möglichkeit für private Drittanbieter-Fragmente, bestimmte Strafen bei Verstößen zu umgehen, indemallowViolation()
mit dem Klassennamen verwendet wird. (I8f678)
Version 1.5.0-alpha01
26. Januar 2022
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
und androidx.fragment:fragment-testing:1.5.0-alpha01
wurden veröffentlicht. Version 1.5.0-alpha01 enthält diese Commits.
Neue Funktionen
Fragment
kann jetzt in ViewModel CreationExtras eingebunden werden, die im Rahmen des Lebenszyklus2.5.0-alpha01
eingeführt wurden. (I3060b, b/207012585)
Fehlerkorrekturen
- Ab Fragment
1.4.1
:FragmentContainerView
löst keine ungültige Statusausnahme mehr aus, wenn aus XML generierte Ansichts-IDs negative Werte haben. (IC185b, b/213086140) - Von Fragment
1.4.1
: Wenn eine benutzerdefinierte Lambda-Funktion fürownerProducer
mit der Lazy-Funktionby viewModels()
mit der Lazy-Funktionby viewModels()
verwendet wird, wird jetzt diedefaultViewModelProviderFactory
von diesem Inhaber verwendet, wenn kein benutzerdefiniertesViewModelProvider.Factory
angegeben wurde, anstatt immer die Factory des Fragments zu verwenden. (I56170, b/214106513) - Absturz behoben, der beim ersten Zugriff auf ein
ViewModel
über einenregisterForActivityResult()
-Callback einerFragment
erfolgte. (IEa2b3)
Version 1.4
Version 1.4.1
26. Januar 2022
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
und androidx.fragment:fragment-testing:1.4.1
wurden veröffentlicht. Version 1.4.1 enthält diese Commits.
Fehlerkorrekturen
FragmentContainerView
löst keine ungültige Statusausnahme mehr aus, wenn aus XML generierte Ansichts-IDs negative Werte haben. (IC185b, b/213086140)- Wenn Sie eine benutzerdefinierte
ownerProducer
-Lambda-Funktion mit der Lazy-Funktionby viewModels()
verwenden, wird jetzt diedefaultViewModelProviderFactory
von diesem Inhaber verwendet, wenn kein benutzerdefiniertesViewModelProvider.Factory
angegeben wurde. Es wird nicht immer die Fabrik des Fragments verwendet. (I56170, b/214106513)
Version 1.4.0
17. November 2021
androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
und androidx.fragment:fragment-testing:1.4.0
wurden veröffentlicht. Version 1.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.3.0
- Die
FragmentStrictMode
APIs bieten Laufzeitprüfungen, mit denen Sie prüfen können, ob Ihre Anwendung oder Bibliotheken, von denen Sie abhängig sind, keine verworfenen Fragment-APIs aufrufen. Wenn ein Verstoß festgestellt wird, können Sie eine Lognachricht ausgeben, Ihren eigenen benutzerdefinierten Listener auslösen oder Ihre App zum Absturz bringen. DieFragmentStrictMode.Policy
, die steuern, welche Prüfungen aktiviert sind und welche Strafen ausgelöst werden, können mit der neuensetStrictModePolicy()
-Methode fürFragmentManager
festgelegt werden. Diese Richtlinie gilt für dieseFragmentManager
und vorübergehend für alle untergeordneten Fragmentmanager, die keine eigene Richtlinie festlegen. Siehe StrictMode für Fragmente. FragmentContainerView
bietet jetzt einegetFragment()
-Methode, die das Fragment zurückgibt, das zuletzt dem Container hinzugefügt wurde. Dies verwendet dieselbe Logik wiefindFragmentById()
mit der ID desFragmentContainerView
, ermöglicht aber eine Verkettung des Aufrufs.val navController = binding.container.getFragment<NavHostFragment>().navController
In
FragmentScenario
ist jetztCloseable
implementiert, sodass Sie es mit der Kotlin-Methodeuse
oder try-with-resources verwenden können.FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
wurde hinzugefügt, um anzugeben, ob die standardmäßige Animation des Aktivitätsübergangs aus Ihrem Design in „Fragmente“ aktiviert werden soll.Die experimentelle API von
FragmentManager.enableNewStateManager(boolean)
wurde entfernt und der neue State Manager ist jetzt die einzige verfügbare Option.
Mehrere Back Stacks
FragmentManager
verwaltet einen Back Stack aus Fragmenttransaktionen, für die addToBackStack()
verwendet wurde. Auf diese Weise können Sie diese Transaktionen per Pop-up übertragen und zum vorherigen Status zurückkehren. Verwenden Sie dazu die Mechanismen zum Speichern des Status mit Fragmenten, damit Ihre Fragmente ihren Status entsprechend wiederherstellen können.
In dieser Version werden diese Mechanismen um drei neue FragmentManager
APIs erweitert: saveBackStack(String name)
, restoreBackStack(String name)
und clearBackStack(String name)
. Diese APIs verwenden dieselbe name
wie addToBackStack()
, um den Status von FragmentTransaction
und den Status jedes Fragments, das in diesen Transaktionen hinzugefügt wurde, zu speichern. So können Sie diese Transaktionen und ihre Fragmente später mit ihrem Zustand intakt wiederherstellen. Auf diese Weise können Sie effektiv zwischen mehreren Back Stacks hin- und herwechseln, indem Sie den aktuellen Back Stack speichern und einen gespeicherten Back Stack wiederherstellen.
saveBackStack()
funktioniert ähnlich wie popBackStack()
insofern, als es asynchron ist und dazu führt, dass alle Fragmenttransaktionen auf diesen spezifischen Namen zurückgesetzt werden und umgekehrt werden („popped“) sowie alle hinzugefügten Fragmente gelöscht und entfernt werden. Sie unterscheidet sich jedoch in einigen wichtigen Punkten:
saveBackStack()
ist immer inklusiv.- Im Gegensatz zu
popBackStack()
, bei dem alle Transaktionen im Back-Stack per Pull ausgeführt werden, wenn der angegebene Name auf dem Back-Stack nicht gefunden wird oder wenn ein Nullname angegeben wird, passiert beisaveBackStack()
nichts, wenn Sie zuvor noch keine Fragment-Transaktion mitaddToBackStack()
mit diesem genauen Namen, der nicht null ist, durchgeführt haben. - Der Status aller Fragmente, die aus diesen Transaktionen hinzugefügt wurden, wird gespeichert. Das bedeutet, dass der Ansichtsstatus jedes Fragments gespeichert wird,
onSaveInstanceState()
jedes Fragments aufgerufen und dieser Status wiederhergestellt wird. AlleViewModel
-Instanzen, die diesen Fragmenten zugeordnet sind, bleiben erhalten (undonCleared()
wird nicht für sie aufgerufen).
Die Fragmenttransaktionen, die mit saveBackStack()
verwendet werden können, müssen bestimmte Kriterien erfüllen:
- Jede Fragmenttransaktion muss
setReorderingAllowed(true)
verwenden, damit die Transaktionen als einzelner, atomarer Vorgang wiederhergestellt werden können. - Die gespeicherten Transaktionen müssen in sich geschlossen sein, d.h., sie dürfen nicht explizit auf Fragmente außerhalb dieser Gruppe von Transaktionen verweisen, damit sie jederzeit wiederhergestellt werden können, unabhängig davon, welche Änderungen in der Zwischenzeit am Back-Stack vorgenommen wurden.
- Kein gespeichertes Fragment kann ein beibehaltenes Fragment oder ein beibehaltenes Fragment in seinem transitiven Satz untergeordneter Fragmente sein, um sicherzustellen, dass
FragmentManager
nach dem Speichern des Back-Stacks keine Verweise auf gespeicherte Fragmente zurückgibt.
Ähnlich wie bei saveBackStack()
, restoreBackStack()
und clearBackStack()
, die einen zuvor gespeicherten Back Stack wiederherstellen bzw. einen zuvor gespeicherten Back Stack löschen, tun beide nichts, wenn saveBackStack()
nicht zuvor mit demselben Namen aufgerufen wurde.
Weitere Informationen finden Sie unter Mehrere Back-Stacks: Eine ausführliche Erläuterung.
Version 1.4.0-rc01
3. November 2021
androidx.fragment:fragment:1.4.0-rc01
wurde ohne Änderungen gegenüber Fragment 1.4.0-beta01 veröffentlicht. Version 1.4.0-rc01 enthält diese Commits.
Version 1.4.0-beta01
27. Oktober 2021
androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
und androidx.fragment:fragment-testing:1.4.0-beta01
wurden veröffentlicht. Version 1.4.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Übergeordnete Fragmente senden jetzt
onHiddenChanged()
in ihrer gesamten Hierarchie ab, bevor ein eigener Callback gestartet wird. (Iedc20, b/77504618) - Die Tastatur wird jetzt automatisch geschlossen, wenn von einem Fragment mit geöffneter Tastatur zu einem Fragment mit Recycler-Ansicht gewechselt wird. (I8b842, b/196852211)
DialogFragment
verwendet jetztsetReorderingAllowed(true)
für alle Transaktionen, die beim Aufrufen vonshow()
,showNow()
oderdismiss()
erstellt werden. (Ie2c14)- Die extrem lange Lint-Warnung von „
DetachAndAttachFragmentInSameFragmentTransaction
“ wurde aufDetachAndAttachSameFragment
gekürzt. (e9eca3)
Version 1.4.0-alpha10
29. September 2021
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
und androidx.fragment:fragment-testing:1.4.0-alpha10
wurden veröffentlicht. Version 1.4.0-alpha10 enthält diese Commits.
Lint
- Die Lint-Warnung
DetachAndAttachFragmentInSameFragmentTransaction
wurde hinzugefügt, um den Aufruf vondetach()
undattach()
im selbenFragment
im selbenFragmentTransaction
zu erkennen. Da sich diese ergänzenden Vorgänge gegenseitig abbrechen, wenn sie in derselben Transaktion ausgeführt werden, müssen sie in separate Transaktionen aufgeteilt werden, um etwas zu tun. (aosp/1832956, b/200867930) - Der Lint-Fehler
FragmentAddMenuProvider
zur Korrektur der Verwendung des Fragmentlebenszyklus wurde dem Lebenszyklus der Fragmentansicht hinzugefügt, wenn dieaddMenuProvider
API vonMenuHost
verwendet wird. (aosp/1830457, b/200326272)
Aktualisierungen der Dokumentation
- Die Nachricht zur Einstellung von APIs, die jetzt von den Activity Result APIs (
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
undonRequestPermissionsResult
) verarbeitet werden, wurde um weitere Details erweitert. (cce80f) - Die Einstellungsmeldung für
onActivityCreated()
sowohl fürFragment
als auch fürDialogFragment
wurde um weitere Details erweitert. (224db4)
Version 1.4.0-alpha09
15. September 2021
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
und androidx.fragment:fragment-testing:1.4.0-alpha09
wurden veröffentlicht. Version 1.4.0-alpha09 enthält diese Commits.
Neue Funktionen
- Sie können jetzt
clearBackStack(name)
aufrufen, um alle zuvor mitsaveBackStack(name)
gespeicherten Status zu löschen. (I70cd7)
API-Änderungen
- Die Klasse
FragmentContainerView
wurde in Kotlin umgeschrieben. Dadurch wird sichergestellt, dass die FunktiongetFragment
die NULL-Zulässigkeit korrekt einhält. (If694a, b/189629145) - FragmentStrictMode ist jetzt in Kotlin geschrieben (I11767, b/199183506).
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem der Status eines Fragments, das mit
setReorderingAllowed(true)
hinzugefügt und dann sofort entfernt wurde, bevor ausstehende Transaktionen ausgeführt wurden, nicht ordnungsgemäß bereinigt wurde. (I8ccb8)
Version 1.4.0-alpha08
1. September 2021
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
und androidx.fragment:fragment-testing:1.4.0-alpha08
wurden veröffentlicht. Version 1.4.0-alpha08 enthält diese Commits.
Fehlerkorrekturen
- Die Lint-Prüfung für
UseRequireInsteadOfGet
wurde verbessert, um redundante Klammern besser zu erkennen. (I2d865) - Die Lint-Prüfung für
UseGetLayoutInflater
wurde zur Bearbeitung zusätzlicher Grenzfälle verbessert. (Beispiel: 5423)
Version 1.4.0-alpha07
18. August 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
und androidx.fragment:fragment-testing:1.4.0-alpha07
wurden ohne nennenswerte Änderungen veröffentlicht. Version 1.4.0-alpha07 enthält diese Commits.
Version 1.4.0-alpha06
4. August 2021
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
und androidx.fragment:fragment-testing:1.4.0-alpha06
wurden veröffentlicht. Version 1.4.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem mit mehreren Back-Stacks behoben, bei dem schnell zwischen Back-Stacks gewechselt wurde, die beim Wiederherstellen eines
FragmentTransaction
oder als zweite Kopie eines Fragments alsIllegalStateException
angezeigt wurden. (I9039f) - Es wurde ein Problem behoben, bei dem
FragmentManager
eine Kopie eines zuvor übersaveBackStack()
gespeicherten Status beibehalten konnte, auch nachdem dieser Status wiederhergestellt wurde. (ID 212) - Die Methode
dismissAllowingStateLoss()
vonDialogFragment
stürzt nicht mehr ab, wenn Sie sie aufrufen, nachdem der Status gespeichert wurde, wenn Sie das DialogFragment ausdrücklich über die Methodeshow(FragmentTransaction, String)
hinzufügen. (I84422)
Version 1.4.0-alpha05
21. Juli 2021
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
und androidx.fragment:fragment-testing:1.4.0-alpha05
wurden veröffentlicht. Version 1.4.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Von Fragment
1.3.6
: Die Ansicht des Fragments ist jetzt korrekt aufGONE
festgelegt, wennhide()
verwendet wird und für die StammansichttransitionGroup=”true”
festgelegt ist. (aosp/1766655, b/193603427) - Von Fragment
1.3.6
:FragmentActivity
entsperrt jetzt immer den gespeicherten Status als ersten Vorgang in Lebenszyklus-Callbacks, die von ihm überschrieben werden. (I6db7a)
Aktualisierung der Abhängigkeit
- Aus Fragment
1.3.6
: Fragmente sind jetzt von der Aktivität1.2.4
abhängig (I3a66c)
Version 1.4.0-alpha04
30. Juni 2021
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
und androidx.fragment:fragment-testing:1.4.0-alpha04
wurden veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.
API-Änderungen
FragmentManager
verwendet jetztSavedStateRegistry
, um seinen Status zu speichern. Die MethodensaveAllState()
undrestoreSavedState()
wurden auch inFragmentController
eingestellt. Wenn SieFragmentController
verwenden, um Fragmente außerhalb vonFragmentActivity
zu hosten, muss IhrFragmentHostCallbacks
SavedStateRegistryOwner
implementieren. (Iba68e, b/188734238)
Fehlerkorrekturen
- Der Aufruf von
saveBackStack()
im Rahmen der Unterstützung mehrerer Back-Stacks schlug fehl, wenn gleichzeitig einFragmentTransaction
mitreplace()
ausgeführt wurde. Dieses Problem wurde behoben. (I73137) - Ein
NullPointerException
wurde behoben, der nach der manuellen Wiederherstellung eines gespeicherten Back-Stacks mit mehreren Transaktionen auftreten konnte, wenn dierestoreBackStack()
API für die Unterstützung mehrerer Back-Stacks verwendet wurde. Dadurch wurde auch ein Problem behoben, bei demsetReorderingAllowed(true)
nicht für alle Transaktionen geprüft wurde. (I8c593) - Es wurde ein Problem behoben, bei dem
FragmentManager
den zuvor gespeicherten Status von Fragmenten fälschlicherweise weiterhin wiederherstellen konnte, nachdem diese Fragmente ausFragmentManager
entfernt wurden, wodurch der gespeicherte Status im Laufe der Zeit kontinuierlich anstieg. (I1fb8e)
Version 1.4.0-alpha03
16. Juni 2021
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
und androidx.fragment:fragment-testing:1.4.0-alpha03
wurden veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.
Neue Funktionen
- Alle „Fragment StrictMode“-Klassen vom Typ
Violation
wurden mit detaillierteren Fehlermeldungen aktualisiert, in denen die Details des Verstoßes erläutert werden. (b/187871638)FragmentTagUsageViolation
enthält jetzt eine detailliertere Fehlermeldung, die den übergeordneten Container enthält, dem das Fragment hinzugefügt worden wäre. (IC33a7)WrongFragmentContainerViolation
hat jetzt eine detailliertere Fehlermeldung, die den Container enthält, dem das Fragment hinzugefügt wurde. (Ib55f8)- Die Anwendungsfallklassen für
TargetFragmentUsageViolation
enthalten jetzt detailliertere Fehlermeldungen, um das Fragment, das den Verstoß verursacht, und alle anderen enthaltenen Informationen anzugeben. (Icc6ac) - Die Klassen, die
RetainInstanceUsageViolation
erweitern, haben jetzt detailliertere Fehlermeldungen, die das Fragment enthalten, das den Verstoß verursacht. (I6bd55) FragmentReuseViolation
hat jetzt eine detailliertere Fehlermeldung, die die vorherige ID des Fragments enthält. (I28ce2)SetUserVisibleHintViolation
hat jetzt eine detailliertere Fehlermeldung, in der angegeben ist, auf was für den für Nutzer sichtbaren Hinweis festgelegt wurde. (Ib2d5f)
Änderungen im Verhalten
- Die Einschränkung für den Aufruf von
fitsSystemWindows
auf einemFragmentContainerView
wurde rückgängig gemacht. Deine App wird dadurch nicht mehr zum Absturz gebracht. (6b8ddd, b/190622202)
Fehlerkorrekturen
- Aus Fragment
1.3.5
: Eine Regression bei Übergängen von gemeinsam genutzten Elementen, die in Fragment1.3.4
von aosp/1679887 eingeführt wurde, wurde behoben. Fragmente verarbeiten jetzt Übergangsgruppen (entweder direkt übertransitionGroup="true"
oder indirekt übertransitionName
oderbackground
) und gemeinsam genutzte Elemente geben keineIndexOutOfBoundsException
mehr aus. (I16484, b/188679569, b/188969304) FragmentManager
stürzt nicht mehr ab, wenn du versuchst, ein entfernendes Fragment auszublenden. (I573dd, b/183634730)- Die Lint-Prüfung
OnCreateDialogIncorrectCallback
stürzt bei der Auswertung einer Variablen der obersten Ebene nicht mehr ab. (0a9efa, b/189967522)
Version 1.4.0-alpha02
2. Juni 2021
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
und androidx.fragment:fragment-testing:1.4.0-alpha02
wurden veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.
Neue Funktionen
FragmentStrictMode
protokolliert jetzt immer Verstöße, wenn das Logging über dieFragmentManager
aktiviert ist, unabhängig von der aktuell verwendeten strengen Modusrichtlinie. (I02df6, b/187872638)FragmentStrictMode
unterstützt jetzt die Ausnahme von bestimmtenFragment
-Klassen vom strengen ModusViolation
s, sodass diese Klasse alle Strafen umgehen kann. (Ib4e5d, b/184786736)Die Klasse
FragmentStrictMode
Violation
wurde erweitert, um je nach Verstoß zusätzliche Strukturinformationen hinzuzufügen. So können Sie genau prüfen, was den Verstoß verursacht hat, zusammen mit dem betreffenden Fragment (If5118, b/187871150). JedeViolation
enthält Folgendes:WrongFragmentContainerViolation
enthält jetzt dieViewGroup
, der dieFragment
hinzugefügt werden wollte. (I83c75, b/187871150)TargetFragmentUsageViolation
wurde zuSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
undGetTargetFragmentRequestCodeUsageViolation
erweitert, wobeiSetTargetFragmentUsageViolation
das Zielfragment und den Anfragecode enthält. (I741b4, b/187871150)SetUserVisibleHintViolation
enthält jetzt den booleschen Wert, der ansetUserVisibleHint()
übergeben wurde. (I00585, b/187871150)FragmentTagUsageViolation
enthält jetzt die ViewGroup, in die das<fragment>
-Tag versucht hat, ein Fragment aufzublähen.(I5dbbc, b/187871150)FragmentReuseViolation
enthält jetzt die eindeutige ID der vorherigen Instanz vonFragment
, die den Verstoß verursacht hat. (I0544d, b/187871150)RetainInstanceUsageViolation
ist jetzt abstrakt und hat zwei abgeleitete Klassen,SetRetainInstanceUsageViolation
undGetRetainInstanceUsageViolation
, die die beiden Fälle für den Verstoßtyp darstellen. (Ic81e5, b/187871150)
Änderungen im Verhalten
FragmentContainerView
löst jetzt eine Ausnahme aus, wenn versucht wird, das AttributfitsSystemWindow
programmatisch oder über XML zu ändern. Einfügungen sollten von der Ansicht jedes einzelnen Fragments verarbeitet werden. (Ie6651, b/187304502)
Version 1.4.0-alpha01
18. Mai 2021
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
und androidx.fragment:fragment-testing:1.4.0-alpha01
wurden veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.
Neue Funktionen
FragmentContainerView
bietet jetzt einegetFragment()
-Methode, die das Fragment zurückgibt, das zuletzt dem Container hinzugefügt wurde. Dies verwendet dieselbe Logik wiefindFragmentById()
mit der ID desFragmentContainerView
, ermöglicht aber eine Verkettung des Aufrufs. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
wurde hinzugefügt, um anzugeben, ob die standardmäßige Animation des Aktivitätsübergangs aus Ihrem Design in „Fragmente“ aktiviert werden soll. (I46652)
Mehrere Back Stacks
FragmentManager
verwaltet einen Back Stack aus Fragmenttransaktionen, für die addToBackStack()
verwendet wurde. Auf diese Weise können Sie diese Transaktionen per Pop-up übertragen und zum vorherigen Status zurückkehren. Verwenden Sie dazu die Mechanismen zum Speichern des Status mit Fragmenten, damit Ihre Fragmente ihren Status entsprechend wiederherstellen können.
In dieser Version werden diese Mechanismen um zwei neue FragmentManager
APIs erweitert: saveBackStack(String name)
und restoreBackStack(String name)
. Diese APIs verwenden dieselbe name
wie addToBackStack()
, um den Status von FragmentTransaction
und den Status jedes Fragments, das in diesen Transaktionen hinzugefügt wurde, zu speichern. So können Sie diese Transaktionen und ihre Fragmente später mit ihrem Zustand intakt wiederherstellen. Auf diese Weise können Sie effektiv zwischen mehreren Back Stacks hin- und herwechseln, indem Sie den aktuellen Back Stack speichern und einen gespeicherten Back Stack wiederherstellen.
saveBackStack()
funktioniert ähnlich wie popBackStack()
insofern, als es asynchron ist und dazu führt, dass alle Fragmenttransaktionen auf diesen spezifischen Namen zurückgesetzt werden und umgekehrt werden („popped“) sowie alle hinzugefügten Fragmente gelöscht und entfernt werden. Sie unterscheidet sich jedoch in einigen wichtigen Punkten:
saveBackStack()
ist immer inklusiv.- Im Gegensatz zu
popBackStack()
, bei dem alle Transaktionen im Back-Stack per Pull ausgeführt werden, wenn der angegebene Name auf dem Back-Stack nicht gefunden wird oder wenn ein Nullname angegeben wird, passiert beisaveBackStack()
nichts, wenn Sie zuvor noch keine Fragment-Transaktion mitaddToBackStack()
mit diesem genauen Namen, der nicht null ist, durchgeführt haben. - Der Status aller Fragmente, die aus diesen Transaktionen hinzugefügt wurden, wird gespeichert. Das bedeutet, dass der Ansichtsstatus jedes Fragments gespeichert wird,
onSaveInstanceState()
jedes Fragments aufgerufen und dieser Status wiederhergestellt wird. AlleViewModel
-Instanzen, die diesen Fragmenten zugeordnet sind, bleiben erhalten (undonCleared()
wird nicht für sie aufgerufen).
Die Fragmenttransaktionen, die mit saveBackStack()
verwendet werden können, müssen bestimmte Kriterien erfüllen:
- Jede Fragmenttransaktion muss
setReorderingAllowed(true)
verwenden, damit die Transaktionen als einzelner, atomarer Vorgang wiederhergestellt werden können. - Die gespeicherten Transaktionen müssen in sich geschlossen sein, d.h., sie dürfen nicht explizit auf Fragmente außerhalb dieser Gruppe von Transaktionen verweisen, damit sie jederzeit wiederhergestellt werden können, unabhängig davon, welche Änderungen in der Zwischenzeit am Back-Stack vorgenommen wurden.
- Kein gespeichertes Fragment kann ein beibehaltenes Fragment oder ein beibehaltenes Fragment in seinem transitiven Satz untergeordneter Fragmente sein, um sicherzustellen, dass
FragmentManager
nach dem Speichern des Back-Stacks keine Verweise auf gespeicherte Fragmente zurückgibt.
Ähnlich wie bei saveBackStack()
passiert auch restoreBackStack()
nichts, wenn Sie saveBackStack()
noch nicht mit demselben Namen aufgerufen haben. (b/80029773)
Fragment StrictMode
Die FragmentStrictMode
APIs bieten Laufzeitprüfungen, mit denen Sie prüfen können, ob Ihre Anwendung oder Bibliotheken, von denen Sie abhängig sind, keine verworfenen Fragment-APIs aufrufen. Wenn ein Verstoß festgestellt wird, können Sie eine Lognachricht ausgeben, Ihren eigenen benutzerdefinierten Listener auslösen oder Ihre App zum Absturz bringen. Die FragmentStrictMode.Policy
, die steuern, welche Prüfungen aktiviert sind und welche Strafen ausgelöst werden, können mit der neuen setStrictModePolicy()
-Methode für FragmentManager
festgelegt werden. Diese Richtlinie gilt für diese FragmentManager
und vorübergehend für alle untergeordneten Fragmentmanager, die keine eigene Richtlinie festlegen. (Nr. 123, Nr. 131, Nr. 150, b/143774122)
detectFragmentReuse()
erkennt, ob eine zuvor entfernteFragment
-Instanz einemFragmentManager
wieder hinzugefügt wird. Sie sollten niemals mit einerFragment
-Instanz interagieren oder diese beibehalten, nachdem sie gelöscht und aus einerFragmentManager
entfernt wurde. (#142, b/153738653)detectFragmentTagUsage()
erkennt, wenn du das<fragment>
-Tag in deiner Layout-XML verwendest. Du solltest immerFragmentContainerView
verwenden, wenn du Fragmente als Teil deines Layouts aufblähst. (#141, b/153738235)detectWrongFragmentContainer()
erkennt, wenn Sie einem Container ein Fragment hinzufügen, das keinFragmentContainerView
ist. Sie sollten in Ihrem Layout immerFragmentContainerView
als Container für Fragmente verwenden. (Nr. 146, b/181137036)detectRetainInstanceUsage()
erkennt, wenn Sie die eingestellten APIssetRetainInstance()
odergetRetainInstance()
verwenden. (#140, b/153737954)detectSetUserVisibleHint()
erkennt, wenn Sie die verworfenesetUserVisibleHint()
API verwenden. (Nr. 136, b/153738974)detectTargetFragmentUsage()
erkennt, wenn Sie die eingestellten APIssetTargetFragment()
,getTargetFragment()
odergetTargetRequestCode()
verwenden. (Nr. 139, b/153737745)
API-Änderungen
- Die experimentelle API von
FragmentManager.enableNewStateManager(boolean)
wurde entfernt und der neue State Manager ist jetzt die einzige verfügbare Option. (I90036, b/162776418) - In
FragmentScenario
ist jetztCloseable
implementiert, sodass Sie es mit der Kotlin-Methodeuse
oder try-with-resources verwenden können. (#121, b/143774122)
Neue Lint-Prüfungen
- Die
UseGetLayoutInflater
Lint-Prüfung gibt jetzt eine Warnung aus, wennLayoutInflater.from(Context)
innerhalb einerDialogFragment
verwendet wird. Sie sollten immer diegetLayoutInflater()
-Methode des Dialogfragments verwenden, um die entsprechendeLayoutInflater
zu erhalten. (#156, b/170781346) - Die
DialogFragmentCallbacksDetector
-Lint-Prüfung gibt jetzt eine Warnung aus, wennsetOnCancelListener
odersetOnDismissListener
in deronCreateDialog()
-Methode einesDialogFragment
aufgerufen wird. Diese Listener gehören demDialogFragment
selbst und Sie solltenonCancel()
undonDismiss()
überschreiben, um diese Callbacks zu erhalten. (Nr. 171, b/181780047, b/187524311)
Fehlerkorrekturen
- Ab Fragment 1.3.4: Es wurde eine Regression behoben, die in Fragment
1.3.3
eingeführt wurde, wenn dieViewTreeViewModelStoreOwner.get()
API mitViewModelProvider
oder die Jetpack-Compose-Methode vonviewModel()
innerhalb eines Fragments verwendet wurde. In diesen Anwendungsfällen wird jetzt das von Ihrem Fragment bereitgestellteViewModelProvider.Factory
korrekt verwendet, wenngetDefaultViewModelProviderFactory()
überschrieben wird (wie bei@AndroidEntryPoint
-annotierten Fragmenten, wenn Hilt verwendet wird). Wenn Sie diese Methode nicht überschreiben, wird als Standard-Factory eineSavedStateViewModelFactory
erstellt, die ihren Status zusammen mit der Ansicht des Fragments speichert und wiederherstellt. (I5cbfa, b/186097368) - Ab Fragment 1.3.4: Bei Verwendung von
FragmentContainerView
unter API 29 werden Insets nicht mehr unbegrenzt weitergeleitet. Dadurch werden Probleme mit den InstanzenBottomNavigationBar
undFloatingActionButton
behoben. (I1bb78, b/186012452) - Aus Fragment 1.3.4: Sie können Ihr Parcelable jetzt nach dem Beenden eines Prozesses aus dem Fragment-Ergebnis-Bundle abrufen. (I65932, b/187443158)
- Von Fragment 1.3.4: Wenn in einer ViewGroup ein Übergang von gemeinsam genutzten Elementen erfolgt und für die ViewGroup
transitionGroup
auf "false" gesetzt ist, erfolgt der Wechsel korrekt. (I99675)
Externer Beitrag
- Danke, simonschiller, dass du
FragmentScenario
implementiert hast undCloseable
implementiert hast. (#121, b/143774122) - Danke, simonschiller, dass du die gesamte
FragmentStrictMode
API für diese Version hinzugefügt hast. (Nr. 123, Nr. 131, Nr. 150, b/143774122, Nr. 142, b/153738653, Nr. 141, b/153738235#, {143738235) - Vielen Dank, tatocaster, dass du die
UseGetLayoutInflater
Lint-Prüfung hinzugefügt hast. (#156, b/170781346) - Vielen Dank, tatocaster, dass du die
DialogFragmentCallbacksDetector
Lint-Prüfung hinzugefügt hast. (Nr. 171, b/181780047)
Version 1.3
Version 1.3.6
21. Juli 2021
androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
und androidx.fragment:fragment-testing:1.3.6
wurden veröffentlicht. Version 1.3.6 enthält diese Commits.
Fehlerkorrekturen
- In Fragment
1.4.0-alpha03
:FragmentManager
stürzt nicht mehr ab, wenn du versuchst, ein entfernendes Fragment zu verbergen. (I573dd, b/183634730) - Die Ansicht des Fragments wird jetzt korrekt auf
GONE
festgelegt, wennhide()
verwendet wird und für die StammansichttransitionGroup=”true”
festgelegt ist. (aosp/1766655, b/193603427) FragmentActivity
entsperrt jetzt immer den gespeicherten Status, da der erste Vorgang in Lebenszyklus-Callbacks überschrieben wird. (I6db7a)
Aktualisierung der Abhängigkeit
- Aus Fragment
1.3.6
: Fragmente sind jetzt von der Aktivität1.2.4
abhängig (I3a66c)
Version 1.3.5
16. Juni 2021
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
und androidx.fragment:fragment-testing:1.3.5
wurden veröffentlicht. Version 1.3.5 enthält diese Commits.
Fehlerkorrekturen
- Eine Regression bei Übergängen von gemeinsam genutzten Elementen, die in Fragment
1.3.4
von aosp/1679887 eingeführt wurde, wurde behoben. Fragmente verarbeiten jetzt Übergangsgruppen (entweder direkt übertransitionGroup="true"
oder indirekt übertransitionName
oderbackground
) und gemeinsam genutzte Elemente geben keineIndexOutOfBoundsException
mehr aus. (I16484, b/188679569, b/188969304)
Version 1.3.4
18. Mai 2021
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
und androidx.fragment:fragment-testing:1.3.4
wurden veröffentlicht. Version 1.3.4 enthält diese Commits.
Fehlerkorrekturen
- Es wurde eine Regression behoben, die in Fragment
1.3.3
bei Verwendung derViewTreeViewModelStoreOwner.get()
API mitViewModelProvider
oder der Jetpack Compose-Methode vonviewModel()
innerhalb eines Fragments bei Verwendung von Hilt eingeführt wurde. In diesen Anwendungsfällen wird jetzt das von Ihrem Fragment bereitgestellteViewModelProvider.Factory
korrekt verwendet, wenn esgetDefaultViewModelProviderFactory()
überschreibt (wie bei@AndroidEntryPoint
-annotierten Fragmenten). Wenn Sie diese Methode nicht überschreiben, wird als Standard-Factory eineSavedStateViewModelFactory
erstellt, die ihren Status zusammen mit der Ansicht des Fragments speichert und wiederherstellt. (I5cbfa, b/186097368) - Wenn
FragmentContainerView
unter API 29 verwendet wird, werden Einsätze nicht mehr unbegrenzt weitergeleitet. Dadurch werden Probleme mit den InstanzenBottomNavigationBar
undFloatingActionButton
behoben. (I1bb78, b/186012452) - Sie können Ihr Parcelable jetzt nach dem Beenden eines Prozesses aus dem Fragment-Ergebnis-Bundle abrufen. (I65932, b/187443158)
- Wenn
transitionGroup
beim Wechsel in einer ViewGroup auf "false" gesetzt ist, erfolgt der Wechsel korrekt. (I99675)
Version 1.3.3
21. April 2021
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
und androidx.fragment:fragment-testing:1.3.3
wurden veröffentlicht. Version 1.3.3 enthält diese Commits.
Neue Funktionen
- Die Verwendung von
SavedStateViewModelFactory
funktioniert jetzt mit demSavedStateRegistryOwner
, das durch Verwendung vonViewTreeSavedStateRegistryOwner.get()
in der Ansicht des Fragments zurückgegeben wird. (I21acf, b/181577191)
Fehlerkorrekturen
- Es wurde eine in Fragment
1.3.2
eingeführte Regression behoben, die dazu führte, dasspopEnter
-Animationen nicht ausgeführt wurden, wenn einFragmentTransaction
mit einemsetPrimaryNavFragment
-Vorgang per Pop-up übergegangen wurde, wie z. B. diejenigen, die vonNavHostFragment
verwendet wurden. (I38c87, b/183877426) FragmentContainerView
sorgt jetzt dafür, dass jedemFragment
ein neuer Satz vonWindowInsets
gesendet wird. Dadurch wird sichergestellt, dass jedes Fragment die Einfügungen jetzt unabhängig nutzen kann. (I63f68, b/172153900)DialogFragment
verarbeitet jetzt korrekt Fälle, in denen ein untergeordnetes Fragment einem Container hinzugefügt wird, der dieselbe ID wie ein Container in Ihrer benutzerdefiniertenDialog
-Klasse hat. Dadurch werden Probleme in der Ansichtshierarchie behoben, wenn IDs wiederverwendet werden, die intern von Dialogfeldern wieBottomSheetDialog
verwendet werden. (Ie6279, b/180021387)FragmentManager.dump()
rückt das erste Fragment in der Liste der aktiven Fragmente jetzt ordnungsgemäß ein. (If5c33, b/183705451)
Neue Fehlerkorrekturen im State Manager
- Der neue Fragment State Manager verarbeitet jetzt Exit-Übergänge mit Ausblendungsvorgängen. (I9e4de, b/184830265)
Version 1.3.2
24. März 2021
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
und androidx.fragment:fragment-testing:1.3.2
wurden veröffentlicht. Version 1.3.2 enthält diese Commits.
Neue Fehlerkorrekturen im State Manager
- Wenn Sie den
popBackStack()
- und dencommit()
-Vorgang zusammen ausführen, wird durch den letzten Vorgang jetzt die Richtung für alle Animationen festgelegt, anstatt nur noch einige Pop-Animationen und einige Animationen auszuführen. (I7072e, b/181142246) - In Ansichten innerhalb einer Hierarchie mit gemeinsam genutzten Elementen wird der Übergangsname nicht mehr gelöscht, wenn ein Übergang in ein gemeinsam genutztes Element erfolgt. (I4d4a6, b/179934757)
Aktualisierung der Abhängigkeiten
- Das Fragment hängt jetzt von der Aktivität 1.2.2 ab, wodurch ein Problem mit der
InvalidFragmentVersionForActivityResult
-Lint-Prüfung der Aktivität bei Verwendung von Fragment 1.3.1 oder höher behoben wurde. - Das Fragment hängt jetzt vom Lebenszyklus 2.3.1 ab.
Version 1.3.1
10. März 2021
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
und androidx.fragment:fragment-testing:1.3.1
wurden veröffentlicht. Version 1.3.1 enthält diese Commits.
Neue Funktionen
- Dialogfelder in einer
DialogFragment
können jetzt über ihre DecorView auf ViewTree-Inhaber zugreifen, sodassDialogFragment
mitComposeView
verwendet werden kann. (Ib9290, b/180691023)
Fehlerkorrekturen
- Fragmente, die mithilfe von FragmentContainerView zu einer bereits
RESUMED
-Aktivität aufgestiegen sind, werden jetzt nach einer Konfigurationsänderung korrekt angezeigt. (Ie14c8, b/180538371) - Am Ende des Fragments
toString()
befindet sich kein zusätzliches}
mehr (I54705, b/177761088). - Überschriebene Methoden in FragmentActivity übernehmen jetzt ordnungsgemäß die Basismethode javaDoc (I736ce, b/139548782).
- Die Parameterdokumentation in den Dokumenten für
setFragmentResult
undsetFragmentResultListener
wurde dahingehend aktualisiert, dass keine Nullables mehr akzeptiert werden (I990ba, b/178348386).
Neue Fehlerkorrekturen im State Manager
- Ein Speicherleck in Fragmenten behoben, das durch
mFocusedView
verursacht wurde (Ib4e9e, b/179925887) - Fragmente rufen jetzt ordnungsgemäß
onCreateOptionsMenu
auf, wenn Transaktionen ein-/ausblenden verwendet werden (I8bce8, b/180255554). - Untergeordnete Fragmente mit Übergängen, die vor dem Layout des Fragments beginnen, erreichen jetzt
RESUMED
(Ic11e6, b/180825150). - Fragmente, die mit dem Tag
<fragment>
aufgebläht wurden, erreichen jetzt immerRESUMED
(I452ac, (I9fa49).
Aktualisierung der Abhängigkeiten
- Fragment 1.3.1 hängt von der Aktivität
1.2.1
ab. (I557b9)
Version 1.3.0
10. Februar 2021
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
und androidx.fragment:fragment-testing:1.3.0
wurden veröffentlicht. Version 1.3.0 enthält diese Commits.
Große Änderungen seit Version 1.2.0
- Neuer State Manager: Durch eine erhebliche Neuformulierung der internen Strukturen von
FragmentManager
wurden zahlreiche Probleme bei der Weiterleitung von Lebenszyklusereignissen, Animationen und Übergängen sowie bei der Verarbeitung verschobener Fragmente behoben. Integration der Activity Result API: Die in Activity
1.2.0
eingeführteActivityResultRegistry
API wird jetzt unterstützt, um Abläufe mitstartActivityForResult()
+onActivityResult()
undrequestPermissions()
+onRequestPermissionsResult()
zu verarbeiten, ohne Methoden in Ihrem Fragment zu überschreiben. Zusätzlich werden Hooks zum Testen dieser Abläufe bereitgestellt. Weitere Informationen finden Sie im aktualisierten Abschnitt Ergebnisse aus einer Aktivität abrufen.- In dieser Version wurden mehrere Probleme im Zusammenhang mit ungültigen Anforderungscodes und dem Senden von Berechtigungsanfragen behoben, die verhindern, dass die Activity Result API in früheren Versionen von
FragmentActivity
funktioniert. Sie müssen ein Upgrade auf Fragment 1.3.0 ausführen, um die Activity Result APIs in einemFragmentActivity
oderAppCompatActivity
verwenden zu können.
- In dieser Version wurden mehrere Probleme im Zusammenhang mit ungültigen Anforderungscodes und dem Senden von Berechtigungsanfragen behoben, die verhindern, dass die Activity Result API in früheren Versionen von
Fragment Result API: Unterstützung für die Übergabe von Ergebnissen zwischen zwei Fragmenten über neue APIs auf
FragmentManager
hinzugefügt. Dies funktioniert für Hierarchiefragmente (übergeordnet/untergeordnet), DialogFragments und Fragmente in Navigation und sorgt dafür, dass Ergebnisse nur dann an Ihr Fragment gesendet werden, wenn es mindestens den WertSTARTED
hat. Die Zielfragment-APIs wurden zugunsten dieser neuen APIs eingestellt. Weitere Informationen finden Sie unter Ergebnisse mithilfe der Fragment Result API abrufen.FragmentOnAttachListener
: DeronAttachFragment()
-Callback fürFragmentActivity
undFragment
wurde eingestellt. Eine neueFragmentOnAttachListener
wurde hinzugefügt, um eine flexiblere Alternative zu bieten. Sie ermöglicht das Delegieren vononAttachFragment()
an separate, testbare Listener und Unterstützung für das Hinzufügen eines Listeners zu FragmentManagers, mit Ausnahme des direkten untergeordneten FragmentManagers.FragmentScenario
-Verbesserungen: Die KlasseFragmentScenario
aus dem Artefaktfragment-testing
wurde in Kotlin neu geschrieben und einige Verbesserungen erhalten:FragmentScenario
verwendet jetztsetMaxLifecycle()
, ummoveToState()
zu implementieren, wodurch ein einheitliches Verhalten auf allen API-Ebenen sichergestellt und der Status des Fragments von der zugrunde liegenden Aktivität entkoppelt wird.FragmentScenario
unterstützt jetzt das Festlegen einer anfänglichenLifecycle.State
, um das Bestätigen des Fragmentstatus zu unterstützen, bevor zum ersten Mal zu jederLifecycle.State
gewechselt wird.- Es gibt jetzt eine Alternative zur
FragmentScenario
API vononFragment
in Form der Kotlin-verbesserten ErweiterungsmethodewithFragment
, mit der Sie einen Wert zurückgeben können. Insbesondere werden im gegebenen Block ausgelöste Ausnahmen noch einmal ausgelöst.
ViewTree
-Unterstützung:Fragment
unterstützt jetzt die APIsViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
undViewTreeSavedStateRegistryOwner
, die in Lebenszyklus2.3.0
und SavedState1.1.0
hinzugefügt wurden, sodass das Fragment alsViewModelStoreOwner
und einSavedStateRegistryOwner
undLifecycleOwner
zurückgegeben werden, die an den Ansichtslebenszyklus des Fragments gebunden sind, wenn einView
innerhalb einesFragment
verwendet wird.Änderungen an der
TRANSIT_
-Animation: Die Standardeffekte des Fragments,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
undTRANSIT_FRAGMENT_FADE
, verwenden jetztAnimator
anstelle vonAnimation
. Die zum Bau dieser Animatoren verwendeten Ressourcen sind jetzt privat.Einstellung von
setRetainInstance()
: Die MethodesetRetainInstance()
für Fragmente wurde eingestellt. Mit der Einführung von ViewModels haben Entwickler eine spezielle API zum Beibehalten des Zustands, die mit Aktivitäten, Fragmenten und Navigationsdiagrammen verknüpft werden kann. Auf diese Weise können Entwickler ein normales, nicht beibehaltenes Fragment verwenden und den spezifischen Status, den sie beibehalten möchten, separat halten. So wird eine gemeinsame Quelle von Datenlecks vermieden, während die nützlichen Eigenschaften einer einzelnen Erstellung und Zerstörung des beibehaltenen Status beibehalten werden (nämlich der Konstruktor desViewModel
und desonCleared()
-Callbacks, den es empfängt).Einstellung des ViewPager 1-Adapters: Mit der Veröffentlichung von ViewPager2
1.0.0
wurden die KlassenFragmentPagerAdapter
undFragmentStatePagerAdapter
für die Interaktion mitViewPager
eingestellt. Siehe Von ViewPager zu ViewPager2 migrieren.
Version 1.3.0-rc02
27. Januar 2021
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
und androidx.fragment:fragment-testing:1.3.0-rc02
wurden veröffentlicht. Version 1.3.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem ein übergeordnetes
DialogFragment
-Element nach einer Konfigurationsänderung über einem untergeordnetenDialogFragment
-Element angezeigt wurde. Untergeordnete Dialogfragmente wurden jetzt immer über einem übergeordneten Dialogfragment angezeigt. (I30806, b/177439520) - Ein Problem wurde behoben, durch das bei einem
hide
-Vorgang mit einemAnimation
das ausgeblendete Fragment am Ende der Animation aufgeblinkt wurde. (I57e22, b/175417675) - Fragmente mit Übergängen, die vor dem Anhängen der Ansichtshierarchie hinzugefügt wurden, erreichen jetzt
RESUMED
ordnungsgemäß. (I1fc1d, b/177154873)
Neue Fehlerkorrekturen im State Manager
- Die Ansicht
Lifecycle
des Fragments verarbeitet jetzt ordnungsgemäß Fälle, in denen die Ansicht des Fragments zerstört wird, bevor dasLifecycle
CREATED
erreicht. Ausnahmen wie „Kein Ereignis ab INITIALIZED“ werden vermieden. (eda2bd, b/176138645) - Fragmente mit einem
Animator
werden jetzt bei Verwendung vonFragmentContainerView
in der richtigen Reihenfolge angezeigt. (Id9aa3, b/176089197)
Version 1.3.0-rc01
16. Dezember 2020
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
und androidx.fragment:fragment-testing:1.3.0-rc01
wurden veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
onPrepareOptionsMenu()
folgt jetzt derselben Logik wieonCreateOptionsMenu()
und wird nicht mehr aufgerufen, wenn ein übergeordnetes FragmentsetMenuVisibility(false)
aufruft. (Id7de8, b/173203654)
Neue Fehlerkorrekturen im State Manager
- Ein Leck und ein visuelles Artefakt wurden behoben, wenn einem
FragmentContainerView
ein Fragment mit einemAnimation
hinzugefügt und dieses anschließend mit einem Pop-Vorgang unterbrochen wurde. (I952d8) - Es wurde ein Problem behoben, bei dem die Ansicht des Fragments in der Ansichtshierarchie verbleibt, wenn sie während der Methoden
onCreate()
oderonViewCreated()
ersetzt wurde. (I8a7d5) - Der Fokus wird jetzt ordnungsgemäß in den Stammansichten der Fragmente wiederhergestellt, wenn sie fortgesetzt werden. (Ifc84b)
- Wenn Sie Pop- und Ersetzungsvorgänge in derselben Fragmenttransaktion kombinieren, werden jetzt die richtigen Animationen angezeigt (Ifd4e4, b/170328691).
Version 1.3.0-beta02
2. Dezember 2020
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
und androidx.fragment:fragment-testing:1.3.0-beta02
wurden veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.
Neue Funktionen
FragmentScenario
wurde vollständig zu Kotlin konvertiert, wobei die Quell- und Binärkompatibilität durch die Nutzung der funktionalen Schnittstellen von Kotlin 1.4 fürFragmentAction
aufrechterhalten wurde. (I19d31)
Änderungen im Verhalten
- FragmentContainerViews, die ein Fragment nicht mithilfe des Attributs
class
oderandroid:name
in die Höhe treiben, können jetzt außerhalb vonFragmentActivity
verwendet werden. (Id4397, b/172266337) - Wenn Sie versuchen, den maximalen Lebenszyklus eines Fragments auf
DESTROYED
festzulegen, wird jetzt einIllegalArgumentException
ausgelöst (Ie7651, b/170765622). - Beim Initialisieren eines Fragmentszenarios mit dem Status
DESTROYED
wird jetzt einIllegalArgumentException
ausgelöst (I73590, b/170765622).
Neue Fehlerkorrekturen im State Manager
- Ein Problem wurde behoben, bei dem die Ansicht nicht ihren endgültigen Status erreichte, wenn ein Fragmentübergang unterbrochen wurde, bei dem eine
Animator
- oder eine derTRANSIT_FRAGMENT_
-Optionen verwendet wurde. (I92426, b/169874632) - Es wurde ein Problem behoben, bei dem Fragmente mit einem Exit-
Animation
nicht ordnungsgemäß gelöscht wurden. (I83d65) - Fragmente, deren Auswirkungen umgekehrt sind, werden jetzt korrekt abgebrochen und mit dem richtigen Eintrittseffekt neu gestartet. (I62226, b/167092035)
- Der Exit
Animator
einerhide()
wurde nicht ausgeführt. Dieses Problem wurde behoben. (Id7ffe) - Fragmente werden jetzt korrekt angezeigt, wenn sie verschoben wurden, und dann sofort gestartet. (Ie713b, b/170022857)
- Fragmente, die ihre fokussierte Ansicht während einer Animation entfernen, versuchen nicht mehr, den Fokus auf der getrennten Ansicht wiederherzustellen, sobald sie
RESUMED
erreichen (I38c65, b/172925703).
Externer Beitrag
FragmentFactory
speichert Fragmentklassen jetzt separat für verschiedeneClassLoader
-Instanzen im Cache. Vielen Dank, Simon Schiller. (#87, b/113886460)
Version 1.3.0-beta01
1. Oktober 2020
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
und androidx.fragment:fragment-testing:1.3.0-beta01
wurden veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
Neue Funktionen
setMaxLifecycle()
unterstützt jetzt das Festlegen des StatusLifecycle
aufINITIALIZING
, solange das Fragment nicht nachCREATED
verschoben wurde. (b/159662173)
API-Änderungen
- Androidx auf Kotlin 1.4 aktualisieren (Id6471, b/165307851, b/165300826)
Änderungen im Verhalten
- Fragment-Ressourcendateien wurden korrekt als privat gekennzeichnet. (aosp/1425237)
Fehlerkorrekturen
- Fragmente, die mit dem Tag
<fragment>
aufgebläht wurden, warten nun ordnungsgemäß, bis ihre Ansichten einem Container hinzugefügt wurden, bevor sie zu STARTED (I02f4c) übergehen. - Bei sichtbaren Fragmenten und dann bei
setMaxLifecycle()
bisCREATED
wird der Exit-Effekt jetzt korrekt ausgeführt. (b/165822335) - Das Entfernen eines getrennten Fragments, das nicht dem Back Stack hinzugefügt wurde, verursacht kein Speicherleck mehr. Mit freundlicher Genehmigung von Nicklas Ansman Giertz! (b/166489383)
- Aktive Fragmente haben jetzt immer einen Nicht-Null-
FragmentManager
und Fragmente mit einem Nicht-Null-FragmentManager
werden immer als aktiv angesehen. (aosp/1422346) - Für die Standardeffekte des Fragments,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
undTRANSIT_FRAGMENT_FADE
, wird jetztAnimator
anstelle vonAnimation
verwendet. (b/166155034)
Neue Fehlerkorrekturen im State Manager
- Fragmente stellen jetzt ihren Ansichtsfokus ab sofort wieder her, bevor die Animation gestartet wird. (ICC256)
- Fragmente, die nur einen Übergang von gemeinsam genutzten Elementen haben, schließen ihre Spezialeffekte jetzt ordnungsgemäß ab. Das heißt, sie werden in ihren endgültigen Zustand versetzt (Iaebc7, b/166658128).
- Fragmentansichten werden jetzt immer aus dem Container entfernt, bevor sie gelöscht werden. (ID5876)
- Der neue Zustandsmanager entfernt nun konsequent die bestehende Fragmentansicht, bevor die neue hinzugefügt wird. (I41a6e)
- Explizite Änderungen an der Sichtbarkeit einer Fragmentansicht werden jetzt vom neuen Statusmanager berücksichtigt. Wenn Sie also die Ansicht eines aufrufenden Fragments auf
INVISIBLE
setzen, bevor die Animation beginnt, bleibt sie unsichtbar. (b/164481490) - Fragmente priorisieren jetzt
Animators
gegenüberAnimations
, was bedeutet, dass ein Fragment mit beiden nur denAnimator
ausführt und dasAnimation
ignoriert. (b/167579557) - Der neue Zustandsmanager sorgt nicht mehr dafür, dass Fragmente bei der Eingabe von Animationen blinken. (b/163084315)
Bekanntes Problem
Wenn Sie den neuen Zustandsmanager verwenden und während eines Spezialeffekts auf „Zurück“ drücken, anstatt zum vorherigen Fragment zurückzukehren, wird das alte Fragment nie wieder hinzugefügt, was zu einem leeren Bildschirm führt. (b/167259187, b/167092035, b/168442830)
Version 1.3.0-alpha08
19. August 2020
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
und androidx.fragment:fragment-testing:1.3.0-alpha08
wurden veröffentlicht. Version 1.3.0-alpha08 enthält diese Commits.
Neuer State Manager
Diese Version umfasst eine umfassende Refaktorierung der internen Statusverwaltung von FragmentManager
, die sich auf die Weiterleitung von Lebenszyklusmethoden, Animationen und Übergängen sowie auf die Verarbeitung verschobener Transaktionen auswirkt. Dies ist standardmäßig aktiviert. Weitere Informationen finden Sie im Blogpost Fragments: Rebuilding the Internals. (b/139536619, b/147749580)
- Mit einer experimentellen API in
FragmentManager.enableNewStateManager(boolean)
kann gesteuert werden, ob FragmentManager den neuen State Manager verwendet. (I7b6ee)
Die folgenden Probleme werden nur bei Verwendung des neuen Statusmanagers behoben:
- Das vorherige Fragment eines
replace
-Vorgangs wird nun korrekt angehalten, bevor das neue Fragment gestartet wird. (b/161654580) - Fragmente verhindern jetzt, dass mehrere konkurrierende Animationen auf denselben Fragmenten stattfinden. Dadurch werden Fälle vermieden, in denen ein
Animation
alleTransition
-Effekte überschreiben würde oder sowohl einAnimator
als auch einTransition
bei einem einzelnen Fragment ausgeführt werden. (b/149569323) enterTransition
undexitTranstion
aller Fragmente, die ein- und wieder verlassen, werden jetzt ausgeführt und nicht mehr nur das letzte eintretende und das erste verlassende Fragment. (b/149344150)- Verschobene Fragmente bleiben nicht mehr im Status
CREATED
hängen, sondern werden stattdessen zusammen mit anderen Fragmenten inSTARTED
verschoben. (b/129035555) - Es wurde ein Problem behoben, bei dem
FragmentManager
Vorgänge in falscher Reihenfolge ausführte, wenn eine verschobene neu angeordnete Transaktion mit einer nicht neu angeordneten Transaktion vermischt wurde. (b/147297731) - Wenn mehrere Fragmente gleichzeitig angezeigt werden, sind dazwischenliegende Fragmente nicht mehr vorübergehend sichtbar, wenn Fragmente verschoben werden. (b/37140383)
FragmentManager
gibt jetzt die richtigen Fragmente zurück, wennfindFragmentById()
oderfindFragmentByTag()
innerhalb desonAttachFragment()
-Callbacks aufgerufen wird. (b/153082833)- Fragmente rufen nicht mehr
onCreateView()
für Fragmente auf, die gelöscht werden, wenn das Fragment sie ersetzt. (b/143915710) - In der Fehlermeldung beim Versuch, die Framework-
Transition
- und AndroidX-Transition
-Instanzen zu kombinieren, wird jetzt das Fragment mit dem ungültigen Übergang angegeben. (b/155574969)
Änderungen im Verhalten
- Sie können jetzt
launch()
für eineActivityResultLauncher
in deronCreate()
-Lebenszyklusmethode eines Fragments aufrufen. (b/161464278) - Wenn
registerForActivityResult()
nachonCreate()
aufgerufen wird, wird jetzt eine Ausnahme ausgelöst, die angibt, dass dies nicht zulässig ist, anstatt nach einer Konfigurationsänderung unbemerkt keine Ergebnisse zu liefern. (b/162255449) FragmentActivity
verwendet jetzt die in Activity1.2.0-alpha08
eingeführteOnContextAvailableListener
API, um den Status vonFragmentManager
wiederherzustellen. Alle Listener, die Unterklassen vonFragmentActivity
hinzugefügt werden, werden nach diesem Listener ausgeführt. (I513da)
Fehlerkorrekturen
ActivityOptions
, die bei Verwendung vonstartIntentSenderForResult()
übergeben werden, werden jetzt berücksichtigt. (b/162247961)
Bekanntes Problem
- Wenn Sie den neuen Statusmanager verwenden, führt das direkte Festlegen der Sichtbarkeit der Stammansicht des Fragments nach
onViewCreated()
und voronResume()
dazu, dass die von Ihnen festgelegte Sichtbarkeit vonFragmentManager
überschrieben wird, der die Sichtbarkeit der Stammansicht steuert. Als Behelfslösung sollten Sie immer die Vorgängehide()
undshow()
verwenden, um die Sichtbarkeit des Fragments zu ändern. (b/164481490)
Version 1.3.0-alpha07
22. Juli 2020
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
und androidx.fragment:fragment-testing:1.3.0-alpha07
wurden veröffentlicht. Version 1.3.0-alpha07 enthält diese Commits.
Neue Funktionen
FragmentScenario
unterstützt jetzt das Festlegen eines anfänglichen Lebenszyklusstatus vonCREATED
,STARTED
oderRESUMED
, anstatt das Fragment immer in den StatusRESUMED
zu verschieben. (b/159662750)- Der
FragmentScenario
API vononFragment
wurde eine Alternative in Form der mit Kotlin reifizierten ErweiterungsmethodewithFragment
hinzugefügt, mit der Sie einen Wert zurückgeben können. Insbesondere werden im gegebenen Block ausgelöste Ausnahmen noch einmal ausgelöst. (b/158697631)
Änderungen im Verhalten
FragmentScenario
verwendet jetztsetMaxLifecycle()
, ummoveToState()
zu implementieren, wodurch ein einheitliches Verhalten auf allen API-Ebenen sichergestellt und der Status des Fragments von der zugrunde liegenden Aktivität entkoppelt wird. (b/156527405)- Der von
ViewTreeSavedStateRegistryOwner
zurückgegebeneSavedStateRegistryOwner
ist jetzt an den Lebenszyklus der Fragmentansicht gebunden. Dadurch wird sichergestellt, dass sein Status gespeichert und gleichzeitig mit der Ansicht des Fragments wiederhergestellt wird. (b/158503763)
Fehlerkorrekturen
- Fragmente warten jetzt, bis die Ansicht des Fragments angehängt wurde, bevor sie
ViewCompat.requestApplyInsets()
aufrufen. So werden Fälle vermieden, in denen die Inset-Anfrage verworfen wurde. (b/158095749) - Durch das Aufrufen von
clearFragmentResultListener
wird der Lebenszyklus-Beobachter jetzt ordnungsgemäß gelöscht. (b/159274993)
Version 1.3.0-alpha06
10. Juni 2020
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
und androidx.fragment:fragment-testing:1.3.0-alpha06
wurden veröffentlicht. Version 1.3.0-alpha06 enthält diese Commits.
Neue Funktionen
- Der
onAttachFragment()
-Callback fürFragmentActivity
undFragment
wurde eingestellt. Eine neueFragmentOnAttachListener
wurde hinzugefügt, um eine flexiblere Alternative zu bieten. Sie ermöglicht das Delegieren vononAttachFragment()
an separate, testbare Listener und Unterstützung für das Hinzufügen eines anderen Listeners zu FragmentManagers als dem direkten untergeordneten FragmentManager. (I06d3d)
Fehlerkorrekturen
- Bei übergeordneten Fragmenten wird jetzt der Ansichtsstatus vor den untergeordneten Fragmenten wiederhergestellt. Dadurch wurde ein Problem mit der visuellen Sortierung nach einer Konfigurationsänderung behoben, wenn ein
DialogFragment
ein anderesDialogFragment
als untergeordnetes Fragment anzeigen würde. (b/157195715) - Es wurde ein Problem behoben, bei dem die Lint-Prüfung
UseRequireInsteadOfGet
die verkettete Nutzung der Operatoren?.
und!!
nicht korrekt verarbeitet hat. (b/157677616)
Version 1.3.0-alpha05
20. Mai 2020
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
und androidx.fragment:fragment-testing:1.3.0-alpha05
wurden veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.
Neue Funktionen
- Unterstützung für
ViewTreeViewModelStoreOwner
aus dem Lebenszyklus2.3.0-alpha03
undViewTreeSavedStateRegistryOwner
aus SavedState1.1.0-alpha01
bei Verwendung vonView
inFragment
wurde hinzugefügt. (aosp/1297993, aosp/1300264)
API-Änderungen
- Die APIs
setFragmentResult()
undsetFragmentResultListener()
verwenden jetzt einBundle
bzw.FragmentResultListener
, das nicht null ist. Wenn Sie ein zuvor festgelegtes Ergebnis oder einen zuvor festgelegten Listener explizit löschen möchten, verwenden Sie die neuen MethodenclearFragmentResult()
undclearFragmentResultListener()
. (b/155416778) - Die
setFragmentResultListener()
-Kotlin-Erweiterungen, die eine Lambda-Funktion verwenden, sind jetzt alsinline
gekennzeichnet. (b/155323404)
Änderungen im Verhalten
- Die zuvor eingestellten
startActivityForResult()
,startIntentSenderForResult()
undrequestPermissions
aufFragment
verwenden jetzt internActivityResultRegistry
. Damit entfällt die Einschränkung, dass bei Verwendung dieser APIs nur die niedrigeren Bits (unter0xFFFF
) für Ihre Anfragecodes verwendet werden. (b/155518741)
Aktualisierungen der Dokumentation
- Die Dokumentation zu den Konstruktoren
Fragment(@LayoutRes int)
undDialogFragment(@LayoutRes int)
wurde erweitert, um zu verdeutlichen, dass sie über den No-Argument-Konstruktor Ihrer abgeleiteten Klassen aufgerufen werden sollten, wenn die StandardeinstellungFragmentFactory
verwendet wird. (b/153042497)
Version 1.3.0-alpha04
29. April 2020
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
und androidx.fragment:fragment-testing:1.3.0-alpha04
wurden veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.
Neue Funktionen
- Unterstützung für die Übergabe von Ergebnissen zwischen zwei Fragmenten über neue APIs auf
FragmentManager
hinzugefügt. Dies funktioniert für Hierarchiefragmente (übergeordnet/untergeordnet), DialogFragments und Fragmente in Navigation und sorgt dafür, dass Ergebnisse nur dann an Ihr Fragment gesendet werden, wenn es mindestens den WertSTARTED
hat. (b/149787344)
API-Änderungen
- Die Zielfragment-APIs wurden eingestellt. Um Daten zwischen Fragmenten zu übergeben, sollten stattdessen die neuen Fragment Result APIs verwendet werden. (b/149787344)
- Die APIs
startActivityForResult()
/onActivityResult()
undrequestPermissions()
/onRequestPermissionsResult()
für Fragment wurden eingestellt. Verwende die Activity Result APIs. (aosp/1290887) - Nicht abwärtskompatible Änderung von Aktivität
1.2.0-alpha04
: Die MethodeprepareCall()
wurde inregisterForActivityResult()
umbenannt. (aosp/1278717)
Fehlerkorrekturen
- Die
getViewLifecycleOwner()
des Fragments wird jetzt beendet, bevoronSaveInstanceState()
aufgerufen wird. Dies spiegelt das Verhalten des Lebenszyklus des Fragments wider. (b/154645875) - Wenn
setMenuVisibility(false)
für ein Fragment aufgerufen wird, ändert sich die Sichtbarkeit der Menüs, die von seinen untergeordneten Fragmenten bereitgestellt werden, jetzt korrekt. (b/153593580) - Ein
illegalStateException
-Problem wurde behoben, das beim Hinzufügen eines Fragments zur Ansichtshierarchie einerDialogFragment
mitFragmentContainerView
hinzugefügt wurde. (b/154366601) - Die Methode
getDefaultViewModelProviderFactory()
für Fragmente stürzt nicht mehr ab, wenn Ihre Fragmente außerhalb einer Aktivität gehostet werden. (b/153762914)
Version 1.3.0-alpha03
1. April 2020
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
und androidx.fragment:fragment-testing:1.3.0-alpha03
wurden veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.
API-Änderungen
- Die
prepareCall
-Methoden fürFragment
sind jetztfinal
. (b/152439361)
Fehlerkorrekturen
- Eine in Fragment
1.3.0-alpha02
bei Verwendung vonBottomSheetDialogFragment
eingeführte Regression wurde behoben. (b/151652127, aosp/1263328, aosp/1265163) - Ein Absturz bei der Verwendung von
prepareCall
aus einem Fragment nach einer Konfigurationsänderung wurde behoben. (b/152137004) - Ein Problem wurde behoben, bei dem Übergänge mit gemeinsam genutzten Elementen und Exits bei der Verwendung von
setTargetFragment()
ignoriert wurden. (b/152023196) - Von Fragment
1.2.4
: Die Fragment ProGuard-Regeln wurden aktualisiert, um die Verschleierung beibehaltener Fragmente zu ermöglichen. (b/151605338) - In Fragment
1.2.4
: Die Lint-RegelFragmentLiveDataObserve
fürDialogFragment
-Klassen wurde deaktiviert, da Lebenszyklus und Ansichtslebenszyklus immer synchron sind. Dadurch können beim Aufrufen vonobserve
entwederthis
oderviewLifecycleOwner
verwendet werden. (b/151765086)
Abhängigkeitsänderungen
- Fragmente hängen von Activity
1.2.0-alpha03
ab, die erhebliche Verbesserungen an der in Aktivität1.2.0-alpha02
eingeführten Activity Result API aufweist.
Version 1.3.0-alpha02
18. März 2020
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
und androidx.fragment:fragment-testing:1.3.0-alpha02
wurden veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.
Neue Funktionen
- Die in Activity
1.2.0-alpha02
eingeführteActivityResultRegistry
API wird jetzt unterstützt, um die AbläufestartActivityForResult()
+onActivityResult()
undrequestPermissions()
+onRequestPermissionsResult()
zu verarbeiten, ohne die Methoden im Fragment zu überschreiben. Zusätzlich werden Hooks zum Testen dieser Abläufe bereitgestellt. Weitere Informationen finden Sie im aktualisierten Abschnitt Ergebnisse aus einer Aktivität abrufen. (b/125158199)
API-Änderungen
DialogFragment
bietet jetzt einen Konstruktor, der einen@LayoutRes
-Wert verwendet, der das Layout angibt, das durchonCreateView()
standardmäßig aufgebläht werden soll. (b/150327080)- Die Methode
onActivityCreated()
wurde eingestellt. Code, der die Ansicht des Fragments berührt, sollte inonViewCreated()
erfolgen, das direkt voronActivityCreated()
aufgerufen wird. Anderer Initialisierungscode sollte sich inonCreate()
befinden. Damit Sie speziell nach Abschluss deronCreate()
der Aktivität einen Rückruf erhalten, sollte eineLifeCycleObserver
auf derLifecycle
der Aktivität inonAttach()
registriert und entfernt werden, sobald deronCreate()
-Callback empfangen wurde. (b/144309266)
Fehlerkorrekturen
- Von Fragment
1.2.3
: Ein Fehler inDialogFragment
, der beim Aufrufen vongetLayoutInflater()
ausonCreateDialog()
zu einemStackOverflowError
führte, wurde behoben. (b/117894767, aosp/1258664) - Von Fragment
1.2.3
: Der Umfang der im Fragment enthaltenen ProGuard-Regeln wurde reduziert, damit nicht verwendete Fragmentklassen entfernt werden können. (b/149665169) - Von Fragment
1.2.3
: Falsch positive Fehler in derUseRequireInsteadOfGet
-Lint-Prüfung bei Verwendung eines lokalen Variablennamens, der den Kotlin-Attributnamen verdeckt, wurde behoben. (b/149891163) - Ab Fragment
1.2.3
:FragmentContainerView
gibt keineUnsupportedOperationException
mehr für die Verwendung des falschen Konstruktors in der Layoutvorschau aus. (b/149707833)
Bekannte Probleme
- Das Dialogfeld von
BottomSheetDialogFragment
wird nicht mehr richtig auf dem Bildschirm positioniert. (b/151652127)
Version 1.3.0-alpha01
4. März 2020
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
und androidx.fragment:fragment-testing:1.3.0-alpha01
wurden veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.
Neue Funktionen
- Die im Lebenszyklus
2.3.0-alpha01
hinzugefügte Unterstützung für dieViewTreeLifecycleOwner.get(View)
API wurde hinzugefügt, sodass sie dieviewLifecycleOwner
des Fragments alsLifecycleOwner
für alle vononCreateView()
zurückgegebenen Ansichten zurückgibt. (aosp/1182955)
API-Änderungen
- Die Methode
setRetainInstance()
für Fragmente wurde eingestellt. Mit der Einführung von ViewModels haben Entwickler eine spezielle API zum Beibehalten des Zustands, die mit Aktivitäten, Fragmenten und Navigationsdiagrammen verknüpft werden kann. Auf diese Weise können Entwickler ein normales, nicht beibehaltenes Fragment verwenden und den spezifischen Status, den sie beibehalten möchten, separat halten. So wird eine gemeinsame Quelle von Datenlecks vermieden, während die nützlichen Eigenschaften einer einzelnen Erstellung und Zerstörung des beibehaltenen Status beibehalten werden (nämlich der Konstruktor desViewModel
und desonCleared()
-Callbacks, den es empfängt). (b/143911815) - Mit der Veröffentlichung von ViewPager2
1.0.0
wurden die KlassenFragmentPagerAdapter
undFragmentStatePagerAdapter
für die Interaktion mitViewPager
eingestellt. Siehe Von ViewPager zu ViewPager2 migrieren. (b/145132715)
Fehlerkorrekturen
- Fragment ProGuard-Regeln behalten jetzt korrekt nur die verwendeten
Fragment
-Standardkonstruktorenklassen bei, die anstelle allerFragment
-Instanzen verwendet werden. Dadurch wird eine im Fragment1.2.1
eingeführte Regression behoben. (b/149665169 - Die in Fragment
1.2.2
hinzugefügtenrequire___()
-Lint-Regeln führen bei lokalen Variablen, die denselben Namen wie die verdeckten Kotlin-Attributnamen haben, nicht mehr falsch-positiv (d.h.view
) (b/149891163) FragmentContainerView
gibt bei Verwendung der Layoutvorschau in Android Studio keinenUnsupportedOperationException
mehr aus. (b/149707833)- Beibehaltene Fragmente, die nach dem Speichern des Status hinzugefügt wurden, wurden nicht kontinuierlich neu erstellt und nach jeder Konfigurationsänderung gelöscht. Dieses Problem wurde behoben. (b/145832397)
Version 1.2.5
Version 1.2.5
10. Juni 2020
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
und androidx.fragment:fragment-testing:1.2.5
wurden veröffentlicht. Version 1.2.5 enthält diese Commits.
Fehlerkorrekturen
- Die
getViewLifecycleOwner()
des Fragments wird jetzt beendet, bevoronSaveInstanceState()
aufgerufen wird. Dies spiegelt das Verhalten des Lebenszyklus des Fragments wider. Dies wurde zuvor in Fragment1.3.0-alpha04
veröffentlicht. (b/154645875) - Wenn
setMenuVisibility(false)
für ein Fragment aufgerufen wird, ändert sich die Sichtbarkeit der Menüs, die von seinen untergeordneten Fragmenten bereitgestellt werden, jetzt korrekt. Dies wurde zuvor in Fragment1.3.0-alpha04
veröffentlicht. (b/153593580)
Version 1.2.4
Version 1.2.4
1. April 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
und androidx.fragment:fragment-testing:1.2.4
wurden veröffentlicht. Version 1.2.4 enthält diese Commits.
Fehlerkorrekturen
- Die Fragment ProGuard-Regeln wurden aktualisiert, um die Verschleierung beibehaltener Fragmente zu ermöglichen. (b/151605338)
- Die Lint-Regel
FragmentLiveDataObserve
fürDialogFragment
-Klassen wurde deaktiviert, da ihr Lebenszyklus und ihr Ansichtslebenszyklus immer synchron sind. Dadurch können beim Aufrufen vonobserve
sicher entwederthis
oderviewLifecycleOwner
verwendet werden. (b/151765086)
Version 1.2.3
Version 1.2.3
18. März 2020
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
und androidx.fragment:fragment-testing:1.2.3
wurden veröffentlicht. Version 1.2.3 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Fehler in
DialogFragment
behoben, der eineStackOverflowError
verursachte, wenngetLayoutInflater()
ausonCreateDialog()
aufgerufen wurde. (b/117894767, aosp/1258665) - Der Umfang der in Fragment enthaltenen ProGuard-Regeln wurde reduziert, damit nicht verwendete Fragmentklassen entfernt werden können. (b/149665169)
- Falsch positive Ergebnisse in der
UseRequireInsteadOfGet
-Lint-Prüfung bei Verwendung eines lokalen Variablennamens, der den Kotlin-Attributnamen verdeckt, wurde behoben. (b/149891163) FragmentContainerView
gibt keinUnsupportedOperationException
mehr für die Verwendung des falschen Konstruktors in der Layoutvorschau aus. (b/149707833)
Version 1.2.2
Version 1.2.2
19. Februar 2020
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
und androidx.fragment:fragment-testing:1.2.2
wurden veröffentlicht. Version 1.2.2 enthält diese Commits.
Neue Lint-Prüfungen
- Lint empfiehlt, die
viewLifecycleOwner
alsLifecycleOwner
zu verwenden, umOnBackPressedDispatcher
inonCreateView()
,onViewCreated()
undonActivityCreated()
aufzurufen. (b/142117657) - Es wurde eine neue Lint-Prüfung hinzugefügt, die bestätigt, dass Sie beim Verwenden des Artefakts
fragment-testing
den richtigendebugImplementation
verwenden. (b/141500106) - Fragmente schlagen jetzt für alle Fragment-APIs, die sowohl ein
get
- als auch einrequire
-Äquivalent enthalten, vor, die verknüpftenrequire___()
-Methoden für aussagekräftigere Fehlermeldungen anstelle voncheckNotNull(get___())
,requireNonNull(get___())
oderget___()!!
zu verwenden. (aosp/1202883)
Fehlerkorrekturen
- Die Fragment ProGuard-Dateien wurden behoben, um R8-Warnungen zu vermeiden (b/148963981).
- Die vorhandene Lint-Prüfung wurde verbessert, sodass
viewLifecycleOwner
bei Verwendung vonobserve
zur Verarbeitung der Erweiterungsmethodenversionlivedata-ktx
vonobserve
vorgeschlagen wird. (b/148996309) - Die Formatierung bei vielen Lint-Prüfungen wurde korrigiert (aosp/1157012).
Externe Beiträge
- Vielen Dank an Zac Sweers für die
require___()
Lint-Prüfungen im Namen von Slack. (aosp/1202883)
Version 1.2.1
Version 1.2.1
5. Februar 2020
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
und androidx.fragment:fragment-testing:1.2.1
wurden veröffentlicht. Version 1.2.1 enthält diese Commits.
Fehlerkorrekturen
- Bei Fragmenten, die über die Methoden
add
undreplace
hinzugefügt werden, die eineClass
-Instanz (oder die Kotlin-reified-Version) verwenden, wird der Standardkonstruktor jetzt von ProGuard beibehalten. (b/148181315) FragmentStatePagerAdapter
undFragmentPagerAdapter
fangen beim Ausführen vonfinishUpdate()
keine vonFragmentManager
ausgelösten Ausnahmen mehr ab. (aosp/1208711)FragmentManager.findFragment()
funktionierte nicht mit Fragmenten, die über das Tag<fragment>
hinzugefügt wurden. (b/147784323)- Fragmente, die mit dem
<fragment>
-Tag aufgebläht wurden, erhalten jetzt immer einen Aufruf vononInflate()
voronCreate()
, wenn sie sich im Layout befinden. (aosp/1215856) - Durch das Aufrufen von
toString()
für eineFragmentManager
-Instanz wird keinNullPointerException
mehr ausgelöst, wenn die Aktivität bereits gelöscht wurde. (b/148189412)
Abhängigkeitsänderungen
- Die Fragment-
1.2.1
von Fragmenten sind jetzt abhängig vom gespeicherten Zustand der Lebenszyklusansicht der Ansicht (2.2.0
).
Version 1.2.0
Version 1.2.0
22. Januar 2020
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
und androidx.fragment:fragment-testing:1.2.0
wurden veröffentlicht. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.1.0
- FragmentContainerView:
FragmentContainerView
ist der dringend empfohlene Container für dynamisch hinzugefügte Fragmente. Er ersetzt die Verwendung vonFrameLayout
oder anderen Layouts. Außerdem werden dieselbenclass
-,android:name
- und optionalenandroid:tag
-Werte wie das<fragment>
-Tag unterstützt. Zum Hinzufügen dieses ersten Fragments wird jedoch eine normaleFragmentTransaction
verwendet, und nicht der von<fragment>
verwendete benutzerdefinierte Codepfad. onDestroyView()
-Timing: Fragmente warten jetzt auf Exit-Animationen, Exit-Framework-Übergänge und Beenden von AndroidX-Übergängen (bei Verwendung von Übergang1.3.0
), bevor sieonDestroyView()
aufrufen.- Klassenbasiertes
add()
undreplace()
: Es wurden neue Überlastungen vonadd()
undreplace()
fürFragmentTransaction
hinzugefügt, dieClass<? extends Fragment>
und optionaleBundle
von Argumenten annehmen. Diese Methoden verwenden IhreFragmentFactory
, um eine Instanz des hinzuzufügenden Fragments zu erstellen. Kotlin-Erweiterungen mit reifizierten Typen (z. B.fragmentTransaction.replace<YourFragment>(R.id.container)
) wurden ebenfallsfragment-ktx
hinzugefügt. - Lifecycle ViewModel SavedState-Integration:
SavedStateViewModelFactory
wird jetzt standardmäßig bei der Verwendung vonby viewModels()
,by activityViewModels()
, demViewModelProvider
-Konstruktor oderViewModelProviders.of()
mit einem Fragment verwendet. - Neue Lint-Prüfungen: Eine neue Lint-Prüfung wurde hinzugefügt, die sicherstellt, dass Sie
getViewLifecycleOwner()
verwenden, wennLiveData
vononCreateView()
,onViewCreated()
oderonActivityCreated()
beobachtet wird. - Einstellung
getFragmentManager()
: Die MethodengetFragmentManager()
undrequireFragmentManager()
für Fragment wurden durch eine einzelnegetParentFragmentManager()
-Methode ersetzt, die das Nicht-Null-FragmentManager
-Objekt zurückgibt, dem das Fragment hinzugefügt wird. MitisAdded()
können Sie feststellen, ob ein Aufruf sicher ist. - Einstellung von
FragmentManager.enableDebugLogging()
: Die statische MethodeFragmentManager.enableDebugLogging
wurde verworfen. FragmentManager berücksichtigt jetztLog.isLoggable()
für das TagFragmentManager
, sodass Sie entweder dasDEBUG
- oderVERBOSE
-Logging aktivieren können, ohne Ihre App neu zu kompilieren.
Bekannte Probleme
- Fragmente, auf die nur über das Attribut
class
oderandroid:name
auf einemFragmentContainerView
verwiesen wird, werden von ProGuard nicht automatisch aufbewahrt. In diesem Fall müssen Sie für jede Fragmentklasse manuell eine Keep-Regel hinzufügen. (b/142601969) - Wenn du ein
NavHostFragment
mitclass
oderandroid:name
in XML mitFragmentContainerView
hinzufügst, kannst dufindNavController()
nicht inonCreate()
deiner Aktivitäten verwenden. (b/142847973)
Version 1.2.0-rc05
8. Januar 2020
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
und androidx.fragment:fragment-testing:1.2.0-rc05
wurden veröffentlicht. Version 1.2.0-rc05 enthält diese Commits.
Fehlerkorrekturen
- Eine Regression in Fragment
1.2.0-rc04
bei Verwendung des<fragment>
-Tags, die dazu führte, dassonViewCreated()
beim Löschen der Aktivität falsch aufgerufen wurde, wurde behoben. (b/146290333) - Bei Fragmenten, die mit dem
<fragment>
-Tag hinzugefügt wurden, werden jetzt auch ohne Konfiguration alle Fragmente gelöscht, auch wenn sie nur manchmal im Layout vorhanden sind (d.h. nur in Ihrem Layout im Querformat). Infolgedessen werden diese Fragmente jetzt korrekt zuCREATED
verschoben, auch wenn sie nicht in Ihrem Layout enthalten sind. Sie werden nicht instanziiert, durchlaufen jedoch keine Lebenszyklusmethoden. (b/145769287)
Version 1.2.0-rc04
18. Dezember 2019
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
und androidx.fragment:fragment-testing:1.2.0-rc04
wurden veröffentlicht. Version 1.2.0-rc04 enthält diese Commits.
Fehlerkorrekturen
- Die Animationen für
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
undTRANSIT_FRAGMENT_FADE
wurden angepasst, um visuelle Probleme zu vermeiden. (b/145468417)
Version 1.2.0-rc03
4. Dezember 2019
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
und androidx.fragment:fragment-testing:1.2.0-rc03
wurden veröffentlicht. Version 1.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Eine unbeabsichtigte Änderung des Verhaltens wurde behoben, bei der entfernte Fragmente weiterhin von
findFragmentById()
/findFragmentByTag()
zurückgegeben werden, während ihre Exit-Animationen/Übergänge ausgeführt wurden. (b/143982969, aosp/1167585) - Untergeordnete Fragmente werden jetzt korrekt vor ihren übergeordneten Fragmenten gestoppt, wenn die enthaltende Aktivität
onSaveInstanceState()
aufruft. (b/144380645) - Es wurde ein Problem behoben, bei dem Ansichten fälschlicherweise als
INVISIBLE
markiert wurden, nachdem ein ausgeblendetes Fragment als Pop-up angezeigt wurde. (b/70793925) - Übergänge für gemeinsam genutzte Elemente in Fragmenten verarbeiten jetzt Ansichten, die gedreht, skaliert usw. wurden. (b/142835261)
Aktualisierungen der Dokumentation
- Die Dokumentation zur Einstellung von
setUserVisibleHint()
wurde klarer formuliert. (b/143897055) - Die Dokumentation zu
setFragmentFactory()
undgetFragmentFactory()
wurde verbessert. Jetzt wird deutlicher, dass sich das Festlegen einesFragmentFactory
auch auf untergeordnete FragmentManagers auswirkt. (aosp/1170095)
Abhängigkeitsänderungen
- Fragmente sind jetzt abhängig vom Lebenszyklus
2.2.0-rc03
, dem gespeicherten Zustand der Ansichtsmodell1.0.0-rc03
und der Aktivität1.1.0-rc03
.
Version 1.2.0-rc02
7. November 2019
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
und androidx.fragment:fragment-testing:1.2.0-rc02
wurden veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- In Kotlin verwendet die LintFix-Funktion zur Verwendung von
getViewLifecycleOwner()
bei der Beobachtung vonLiveData
ausonCreateView()
,onViewCreated()
oderonActivityCreated()
(eingeführt in Fragment1.2.0-rc01
) jetzt die Kotlin-EigenschaftszugriffssyntaxviewLifecycleOwner
anstelle vongetViewLifecycleOwner()
. (aosp/1143821)
Version 1.2.0-rc01
23. Oktober 2019
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
und androidx.fragment:fragment-testing:1.2.0-rc01
wurden veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
Neue Funktionen
FragmentContainerView
unterstützt jetzt zusätzlich zuandroid:name
dasclass
-Attribut, was der Funktionalität des<fragment>
-Tags entspricht. (b/142722242)- Es wurde eine neue Lint-Prüfung hinzugefügt, die sicherstellt, dass Sie
getViewLifecycleOwner()
verwenden, wennLiveData
vononCreateView()
,onViewCreated()
oderonActivityCreated()
beobachtet wird. (b/137122478)
Fehlerkorrekturen
- Die
onDismiss
- undonCancel
-Callbacks fürDialogFragment
garantieren jetzt, dass die an sie übergebenenDialogInterface
nicht null sind und dassgetDialog()
bei ihrer Ausführung einen anderen Wert zurückgibt. (b/141974033) FragmentContainerView
fügt jetzt das vonclass
oderandroid:name
definierte Fragment als Teil der Inflation hinzu, damitfindFragmentById()
undfindFragmentByTag()
sofort funktionieren. (b/142520327)- Ein
IllegalStateException
-Fehler inFragmentContainerView
aufgrund der Speicherung des Status behoben. (b/142580713) - Ein
UnsupportedOperationException
-Fehler inFragmentContainerView
bei verschleierterFragmentContainerView
-Klasse wurde behoben. (b/142657034)
Bekannte Probleme
- Fragmente, auf die nur über das Attribut
class
oderandroid:name
auf einemFragmentContainerView
verwiesen wird, werden von ProGuard nicht automatisch aufbewahrt. In diesem Fall müssen Sie für jede Fragmentklasse manuell eine Keep-Regel hinzufügen. Wir haben die Lint-Regel deaktiviert, die einen Wechsel zuFragmentContainerView
vorschlägt, bis das Problem durchaapt2
behoben wurde. (b/142601969)
Version 1.2.0-beta02
11. Oktober 2019
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
und androidx.fragment:fragment-testing:1.2.0-beta02
wurden veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem
onInflate()
des Fragments nicht die richtigen Attribute vonFragmentContainerView
erhielt, wodurch Fälle wieNavHostFragment
nicht mehr funktionierten. (b/142421837)
Version 1.2.0-beta01
9. Oktober 2019
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
und androidx.fragment:fragment-testing:1.2.0-beta01
wurden veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.
Neue Funktionen
FragmentContainerView
unterstützt das Hinzufügen eines anfänglichen Fragments mit zusätzlicher Unterstützung für die XML-Attributeandroid:name
und optionalandroid:tag
. Im Gegensatz zum<fragment>
-Tag verwendetFragmentContainerView
eine normaleFragmentTransaction
im Hintergrund, um das anfängliche Fragment hinzuzufügen. Dadurch sind weitereFragmentTransaction
-Vorgänge für dieFragmentContainerView
möglich und die Ansichtsbindung kann für das Layout verwendet werden. (b/139830628, b/141177981)- Fragmente enthalten jetzt eine Lint-Warnung, die eine schnelle Korrektur bietet, um
<fragment>
durchFragmentContainerView
zu ersetzen. (b/139830056)
Fehlerkorrekturen
- Problem mit
ClassCastException
bei Verwendung vonandroidx.transition
behoben. (b/140680619) - Bei Verwendung von Übergang
1.3.0-beta01
warten Fragmente jetzt auf den Abschluss vonandroidx.transition
-Übergängen (zusätzlich zu Framework-Übergängen und -Animationen, die in Fragment1.2.0-alpha03
bzw. Fragment1.2.0-alpha02
behoben wurden), bevoronDestroyView()
gesendet wird. (aosp/1119841) - Bei Verwendung von Übergang
1.3.0-beta01
brechen Fragmente jetztandroidx.transition
-Übergänge ordnungsgemäß ab, bevor neue Übergänge / Animationen im selben Container gestartet werden. (aosp/1119841) - Es wurde ein Problem in API 17 und niedriger behoben, wenn
androidx.transition
-Übergänge in der Stammansicht des Fragments inFragmentContainerView
verwendet wurden. (b/140361893) - Das
fragment-testing
-Artefakt hängt jetzt von AndroidX Test1.2.0
ab und behebt eine Inkompatibilität mit der aktuellen Version von Espresso 3.2.0. (b/139100149) - Die Verwendung von
Log.w
in FragmentManager wurde entfernt. (aosp/1126468)
Bekannte Probleme
onInflate()
des Fragments erhalten nicht die richtigen Attribute vonFragmentContainerView
, wodurch Fälle wieNavHostFragment
nicht mehr funktionieren. (b/142421837)
Version 1.2.0-alpha04
18. September 2019
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
und androidx.fragment:fragment-testing:1.2.0-alpha04
wurden veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
API-Änderungen
- Die Methoden
getFragmentManager()
undrequireFragmentManager()
fürFragment
wurden verworfen und durch eine einzelnegetParentFragmentManager()
-Methode ersetzt, die dasFragmentManager
-Objekt zurückgibt, dem das Fragment hinzugefügt wird, dem das Fragment hinzugefügt wird. MitisAdded()
können Sie feststellen, ob ein Aufruf sicher ist. (b/140574496) - Die statische Methode
FragmentManager.enableDebugLogging
wurde eingestellt. FragmentManager berücksichtigt jetztLog.isLoggable()
für das TagFragmentManager
, sodass Sie entweder dasDEBUG
- oderVERBOSE
-Logging aktivieren können, ohne Ihre App neu zu kompilieren. (aosp/1116591)
Fehlerkorrekturen
- Fragmente werden jetzt ordnungsgemäß zerstört, während Exit-Animationen auf anderen Fragmenten ausgeführt werden. (b/140574199)
- Es wurde ein Problem behoben, bei dem Fragmente
Activity.findViewById()
statt vorher nicht aufrufen. (aosp/1116431)
Version 1.2.0-alpha03
5. September 2019
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
und androidx.fragment:fragment-testing:1.2.0-alpha03
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
FragmentContainerView
ist jetztfinal
. (b/140133091)
Fehlerkorrekturen
FragmentContainerView
kehrt jetzt die Zeichenreihenfolge korrekt um, wenn Fragmente aus dem Back Stack entfernt werden. (b/139104187)- Es wurde ein Problem behoben, bei dem die falsche Animation ausgeführt wurde, wenn gleichzeitig ein Fragment auftaucht und gleichzeitig ein neues hinzugefügt wurde. (b/111659726)
- Fragmente warten jetzt (zusätzlich zu Animationen, die in Fragment
1.2.0-alpha02
behoben wurden) auf den Abschluss von Übergängen, bevoronDestroyView()
abgefertigt wird. (b/138741697)
Version 1.2.0-alpha02
7. August 2019
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
und androidx.fragment:fragment-testing:11.2.0-alpha02
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
SavedStateViewModelFactory
ist jetzt die Standard-Factory, die verwendet wird, wennby viewModels()
,by activityViewModels()
, derViewModelProvider
-Konstruktor oderViewModelProviders.of()
mit einemFragment
verwendet wird. (b/135716331)- Die Standardanimationen bei der Verwendung von
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
undTRANSIT_FRAGMENT_FADE
mitsetTransition
auf einemFragmentTransaction
wurden aktualisiert und stimmen jetzt mit den Animationen überein, die von Aktivitäten auf Android 10-Geräten verwendet werden. (aosp/1012812, aosp/1014730)
API-Änderungen
FragmentContainerView
wird als dringend empfohlener Container für dynamisch hinzugefügte Fragmente eingeführt, wodurch die Verwendung vonFrameLayout
usw. ersetzt wird, da dadurch Probleme bei der Z-Reihenfolge von Animationen und die Weiterleitung von Fenstereinfügungen an Fragmente behoben werden. (b/37036000, aosp/985243, b/136494650)- Eine statische
FragmentManager.findFragment(View)
-Methode wurde hinzugefügt, um das enthaltende Fragment aus einer durch ein Fragment aufgeblähten Ansicht abzurufen. Infragment-ktx
ist auch eine Kotlin-Erweiterung verfügbar. (aosp/1090757) - Neue Überlastungen von
add()
undreplace()
fürFragmentTransaction
hinzugefügt, die eineClass<? extends Fragment>
und optionaleBundle
von Argumenten annehmen. Diese Methoden verwenden IhreFragmentFactory
, um eine Instanz des hinzuzufügenden Fragments zu erstellen. Kotlin-Erweiterungen mit reifizierten Typen (z. B.fragmentTransaction.replace<YourFragment>(R.id.container)
) wurden ebenfallsfragment-ktx
hinzugefügt. (b/126124987) - Lebenszyklus-Callbacks von
Fragment
wurden@MainThread
-Annotationen hinzugefügt. (b/127272564) - Die APIs für den Navigationspfad-Titel unter
FragmentTransaction
undFragmentManager.BackStackEntry
wurden eingestellt. (b/138252944) - Die Methode
setTransitionStyle
fürFragmentTransaction
wurde eingestellt. (aosp/1011537). - Viele der Methoden in
FragmentManager
sind nicht mehrabstract
.FragmentManager
selbst bleibtabstract
und sollte nicht direkt instanziiert oder erweitert werden. Sie sollten weiterhin nur eine vorhandene Instanz vongetSupportFragmentManager()
,getChildFragmentManager()
usw. abrufen.
Fehlerkorrekturen
- Von Fragment
1.1.0-rc04
: Fragmente brechen jetzt verschobene Übergänge in Fragmenten korrekt ab. (b/138251858) - Von Fragment
1.1.0-rc03
: Ein Problem wurde behoben, bei dem durch mehrfaches Aufrufen vonpostponeEnterTransition()
mit einem Zeitlimit das vorherige Zeitlimit nicht abgebrochen wurde. (b/137797118) - Aus Fragment
1.1.0-rc02
: Ein Absturz inFragmentPagerAdapter
undFragmentStatePagerAdapter
beim Entfernen des aktuellen Elements wurde behoben. (b/137209870) - Fragmente warten jetzt, bis die Animationen beendet sind, bevor
onDestroyView()
gesendet wird. (b/136110528) - Fragmentanimationen von untergeordneten Fragmenten und deren Nachfolgerelemente werden jetzt ordnungsgemäß verarbeitet, wenn das übergeordnete Fragment animiert wird. (b/116675313)
- Ein
NullPointerException
wurde behoben, bei dem Übergänge mit gemeinsam genutzten Elementen verwendet wurden und ein Pop-up- und Hinzufügenvorgang kombiniert wurde. (b/120507394) - Eine Behelfslösung für
IllegalStateException
s bei Verwendung vonFragmentPagerAdapter
undFragmentStatePagerAdapter
in Robolectric-Tests wurde hinzugefügt. (b/137201343)
Version 1.2.0-alpha01
2. Juli 2019
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
und androidx.fragment:fragment-testing:1.2.0-alpha01
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- FragmentManager ruft jetzt
requestApplyInsets()
auf, nachdem die Ansicht des Fragments angehängt wurde, und direkt vor dem Aufrufen vononViewCreated()
. Dadurch wird sichergestellt, dass Ihre Ansicht immer die richtigen Einfügungen hat. (b/135945162)
Fehlerkorrekturen
- Problem mit
NullPointerException
behoben, das auftrat, wennFragmentTransaction
vorreplace()
verwendet wurde undsetPrimaryNavigationFragment()
verwendet wurde. (b/134673465)
Version 1.1.0
Version 1.1.0
5. September 2019
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
und androidx.fragment:fragment-testing:1.1.0
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Wichtige Änderungen seit Version 1.0.0
- fragment-testing: Das Artefakt
fragment-testing
bietet eineFragmentScenario
-Klasse zum isolierten Testen eines Fragments. Weitere Informationen finden Sie unter Dokumentation zu Fragmenten Ihrer App testen. - FragmentFactory: Sie können jetzt eine
FragmentFactory
auf einerFragmentManager
festlegen, um die Erstellung von Fragmentinstanzen zu verwalten. Damit entfällt die strenge Anforderung eines No-Argument-Konstruktors. - Kotlin-Attributdelegierte für ViewModels: Das Artefakt
fragment-ktx
enthält jetzt zwei Kotlin-Eigenschaftsdelegierte:by viewModels()
für den Zugriff auf ViewModels, die mit dem jeweiligen Fragment verknüpft sind, undby activityViewModels()
für den Zugriff auf ViewModels, die der Aktivität zugeordnet sind. - Max. Lebenszyklus: Sie können jetzt einen maximalen Lebenszyklusstatus für ein Fragment festlegen, indem Sie
setMaxLifecycle()
für eineFragmentTransaction
aufrufen. Dies ersetzt das mittlerweile verworfenesetUserVisibleHint()
.FragmentPagerAdapter
undFragmentStatePagerAdapter
haben einen neuen Konstruktor, mit dem Sie zum neuen Verhalten wechseln können. - FragmentActivity LayoutId-Konstruktor: Abgeleitete Klassen von
FragmentActivity
können jetzt optional einen Konstruktor fürFragmentActivity
aufrufen, der eineR.layout
-ID annimmt, um das Layout anzugeben, das als Inhaltsansicht als Alternative zum Aufrufen vonsetContentView()
inonCreate()
festgelegt werden soll. Dies ändert nichts an der Anforderung, dass Ihre Unterklasse einen No-Argument-Konstruktor haben muss. - Fragment LayoutId-Konstruktor: Abgeleitete Klassen von
Fragment
können jetzt optional einen Konstruktor fürFragment
aufrufen, der eineR.layout
-ID verwendet. Diese gibt das Layout an, das für dieses Fragment als Alternative zum Überschreiben vononCreateView()
verwendet werden soll. Das aufgeblähte Layout kann inonViewCreated()
konfiguriert werden. - Mit Zeitlimit verschieben: Eine neue Überlastung von
postponeEnterTransition()
wurde hinzugefügt, die ein Zeitlimit erfordert.
Version 1.1.0-rc04
7. August 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
und androidx.fragment:fragment-testing:1.1.0-rc04
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
- Verschobene Übergänge in Fragmenten werden jetzt korrekt per Pop-up abgebrochen. (b/138251858)
Version 1.1.0-rc03
19. Juli 2019
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
und androidx.fragment:fragment-testing:1.1.0-rc03
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
- Durch mehrmaliges Aufrufen von
postponeEnterTransition()
mit einem Zeitlimit wurden frühere Zeitüberschreitungen nicht abgebrochen. Dieses Problem wurde behoben. (b/137797118)
Version 1.1.0-rc02
17. Juli 2019
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
und androidx.fragment-testing:fragment:1.1.0-rc02
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
- Ein Absturz in
FragmentPagerAdapter
undFragmentStatePagerAdapter
beim Entfernen des aktuellen Elements wurde behoben. (b/137209870)
Version 1.1.0-rc01
2. Juli 2019
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
und androidx.fragment:fragment-testing:1.1.0-rc01
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
- Die Sichtbarkeit von Fragmenten wird jetzt korrekt aktualisiert, wenn während des Übergangs
show()
- oderhide()
-Vorgänge verwendet werden. (b/133385058) - Problem mit
NullPointerException
behoben, das auftrat, wennFragmentTransaction
vorreplace()
verwendet wurde undsetPrimaryNavigationFragment()
verwendet wurde. (b/134673465)
Version 1.1.0-beta01
5. Juni 2019
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
und androidx.fragment:fragment-testing:1.1.0-beta01
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
androidx.lifecycle.Lifecycle
-Callbacks (speziell aufSTARTED
,RESUMED
,PAUSED
,STOPPED
undDESTROYED
) für verschachtelte Fragmente sind jetzt korrekt verschachtelt. (b/133497591)OnBackPressedCallback
-Instanzen, die in deronCreate()
eines Fragments registriert sind, haben jetzt ordnungsgemäß Vorrang vor dem untergeordneten FragmentManager. (b/133175997)- Untergeordnete Fragmente werden nicht mehr animiert, wenn ihr übergeordnetes Fragment ersetzt wird. (b/121017790)
- Animationen und Übergänge von Fragmenten werden jetzt bei Verwendung von
animateLayoutChanges="true"
ignoriert. Dadurch wurde ein Problem behoben, bei dem Fragmente nicht ordnungsgemäß gelöscht wurden. (b/116257087)
Version 1.1.0-alpha09
16. Mai 2019
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
und androidx.fragment:fragment-testing:1.1.0-alpha09
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Fragmente erhalten jetzt einen Callback an eine neue
onPrimaryNavigationFragmentChanged(boolean)
-Methode, wenn sich das primäre Navigationsfragment ändert. aosp/960857
Fehlerkorrekturen
- Menüelemente, die von einem untergeordneten Fragment aufgebläht wurden, werden jetzt korrekt entfernt, wenn das übergeordnete Fragment entfernt wird. b/131581013
Version 1.1.0-alpha08
7. Mai 2019
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
und androidx.fragment:fragment-testing:1.1.0-alpha08
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Diese Version ist mit den Einstellungen 1.1.0-alpha01 bis 1.1.0-alpha04 nicht kompatibel. Aktualisieren Sie auf die Einstellungen 1.1.0-alpha05, wenn Sie diese Version von Fragmenten verwenden.
Neue Funktionen
- Es wurde eine neue Überlastung von
postponeEnterTransition()
hinzugefügt, die ein Timeout erfordert. Danach ruft das Fragment automatischstartPostponedEnterTransition()
b/120803208 auf.
API-Änderungen
- Funktionsgefährdende Änderung: Die zuvor verworfene Methode
FragmentFactory
instantiate
, für die einBundle
verwendet wurde, wurde entfernt. aosp/953856 - Wichtige Änderung: Die Konstanten
RESUME_ONLY_CURRENT_FRAGMENT
undUSE_SET_USER_VISIBLE_HINT
inFragmentPagerAdapter
undFragmentStatePagerAdapter
wurden inBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
bzw.BEHAVIOR_SET_USER_VISIBLE_HINT
umbenannt. aosp/954782
Fehlerkorrekturen
- Fragmente, deren Lebenszyklus über
setMaxLifecycle()
begrenzt wurde, werden nicht mehr fortgesetzt, bevor sie ihren endgültigen Zustand erreichen. b/131557151 - Bei Verwendung von
setMaxLifecycle(Lifecycle.State.CREATED)
wird die Ansicht von Fragmenten ordnungsgemäß zerstört. aosp/954180
Version 1.1.0-alpha07
25. April 2019
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
und androidx.fragment:fragment-testing:1.1.0-alpha07
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Sie können jetzt einen maximalen Lebenszyklusstatus für ein Fragment festlegen, indem Sie
setMaxLifecycle()
für einFragmentTransaction
aufrufen. Dies ersetzt das mittlerweile verworfenesetUserVisibleHint()
.FragmentPagerAdapter
undFragmentStatePagerAdapter
haben einen neuen Konstruktor, mit dem Sie zum neuen Verhalten wechseln können. (b/129780800)
API-Änderungen
moveToState(STARTED)
unterFragmentScenario
kann jetzt nur auf Geräten mit API 24 oder höher aufgerufen werden. (b/129880016)
Änderungen im Verhalten
- Aufgrund von (b/129907905) erhalten Fragmente auf dem Back-Stack keinen Callback von
onCreateView()
, wenn die Hosting-Aktivität neu erstellt wird.onCreateView()
wird jetzt nur dann aufgerufen, wenn das Fragment sichtbar wird (d.h. der Back Stack wird geplatzt).
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem ein
<fragment>
-Tag in XML und dercontentLayoutId
-Konstruktor vonFragmentActivity
oderAppCompatActivity
verwendet wurde. (b/129907905) - Ein Problem wurde behoben, bei dem Fragmente im Back Stack nach einer Konfigurationsänderung nicht mindestens zu
CREATED
verschoben wurden, wodurch ViewModels und untergeordnete beibehaltene Fragmente nicht korrekt entsorgt wurden. (b/129593351) - Ein Absturz in
restoreSaveState
wurde behoben, der durch eine Desynchronisierung der beibehaltenen Fragmente nach dem Speichern des Instanzstatus verursacht wurde. (b/130433793) (aosp/947824) - Es wurden Probleme behoben, bei denen ein
OnBackPressedCallback
, das mit einem Fragmentlebenszyklus hinzugefügt wurde, nicht aufgerufen wurde, wenn dasFragmentManager
einen Back Stack hätte. Weitere Informationen finden Sie unter androidx.activity 1.0.0-alpha07. (aosp/948209) LAYER_TYPE_HARDWARE
wird für Animationen nicht mehr von Fragmenten erzwungen. Wenn Sie speziell eine Hardwareebenen-Animation benötigen, legen Sie diese als Teil Ihrer Animation fest. (b/129486478)
Version 1.1.0-alpha06
3. April 2019
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
und androidx.fragment:fragment-testing:1.1.0-alpha06
wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Von FragmentManager ausgelöste Ausnahmen enthalten jetzt den Namen des Fragments in der Nachricht. (b/67759402)
API-Änderungen
Fragment
undFragmentActivity
enthalten jetzt einen zweiten Konstruktor, der einen@LayoutRes int
verwendet, der das vorherige Verhalten beim Annotieren der Klasse mit@ContentView
ersetzt. Dieser Ansatz funktioniert sowohl in Anwendungs- als auch in Bibliotheksmodulen. (b/128352521)onActivityResult()
von FragmentActivity ist jetzt korrekt als@CallSuper
gekennzeichnet. (b/127971684)- Die Methode
instantiate
der FragmentFactory, die ein Argument Bundle verwendet, wurde eingestellt. Apps sollten die neueinstantiate
-Überlastung verwenden, die kein Bundle verwendet. (b/128836103) FragmentScenario
-Methoden sind jetzt korrekt mit@StyleRes
annotiert. (aosp/924193)FragmentTabHost
wurde verworfen. (b/127971835)getThemedContext()
von FragmentActivity wurde entfernt. (aosp/934078)
Fehlerkorrekturen
- Behebung einer Regression in 1.1.0-alpha05, die dazu führte, dass das eingehende Fragment auf dem Bildschirm blinkte. (b/129405432)
- Das Problem, dass das primäre Navigationsfragment nach einer Reihe von Operationen mit popBackStack+Ersetzen+popBackStack verloren ging, wurde behoben. (b/124332597)
- Es wurde ein Problem behoben, bei dem beim Wiederherstellen des Fragmentstatus
@ContentView
-Konstruktoren für Ihre Aktivität verwendet wurden. (b/127313094) - Die Logik von
setTargetFragment()
beim Ersetzen eines vorhandenen Zielfragments durch ein Fragment, das noch nicht an FragmentManager angehängt wurde, wurde korrigiert. (aosp/932156)
Version 1.1.0-alpha05
13. März 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
und androidx.fragment:fragment-testing:1.1.0-alpha05
wurden veröffentlicht. Die vollständige Liste der in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
@ContentView
-Annotationssuchen werden jetzt im Cache gespeichert (b/123709449)
Verhaltensänderungen
- Durch das Aufrufen von
remove()
,hide()
,show()
,detach()
undsetPrimaryNavigationFragment()
mit einem Fragment, das an einen anderen FragmentManager angehängt ist, wird jetzt einIllegalStateException
ausgelöst, statt automatisch einen Fehler zu verursachen (aosp/904301).
Fehlerkorrekturen
onNewIntent
fürFragmentActivity
ist jetzt korrekt mit@CallSuper
gekennzeichnet (b/124120586)- Das Problem, dass
onDismiss()
vonDialogFragment
bei Verwendung vongetDialog().dismiss()
odergetDialog().cancel()
zweimal aufgerufen werden konnte, wurde behoben (b/126563750).
Version 1.1.0-alpha04
7. Februar 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
und androidx.fragment:fragment-testing 1.1.0-alpha04
wurden veröffentlicht.
Neue Funktionen
- Die
@ContentView
-Klassenanmerkung wird jetzt unterstützt, mit der Sie angeben können, welche Layout-XML-Datei als Alternative zum Überschreiben vononCreateView()
aufgeblasen werden soll. Es empfiehlt sich, ähnliche Arbeiten inonViewCreated()
anzusehen. (aosp/837619) fragment-testing
hängt jetzt vonandroidx.test:core-ktx
1.1.0 (stabil) ab (b/121209673)- Sie können jetzt
openActionBarOverflowOrOptionsMenu
mitFragmentScenario
verwenden, um im Fragment gehostete Optionsmenüs zu testen (b/121126668).
API-Änderungen
- Es wurde eine
requireArguments()
-Methode hinzugefügt, die ein@NonNull Bundle
zurückgibt oder einIllegalStateException
auslöst (b/121196360). - Es wurde ein Hinweis hinzugefügt, dass
getLifecycle()
,getViewLifecycleOwner()
undgetViewLifecycleOwnerLiveData()
nicht überschrieben werden sollten und in einer zukünftigen Version endgültig festgelegt werden. Reichen Sie eine Funktionsanfrage ein, wenn Sie diese Methode momentan überschreiben. (aosp/880714) - Es wurde ein Hinweis hinzugefügt, dass
getViewModelStore()
nicht überschrieben werden sollte und in einem zukünftigen Release endgültig gemacht wird. Reichen Sie eine Funktionsanfrage ein, wenn Sie diese Methode momentan überschreiben. (aosp/880713) - Ein Problem mit der Kompatibilität mit Binärprogrammen mit früheren Releases von Fragmenten wurde behoben. (aosp/887877) (aosp/889834)
Fehlerkorrekturen
- Zielfragmente werden korrekt gelöscht, wenn Sie
null
ansetTargetFragment()
übergeben. (aosp/849969) - Ein Problem wurde behoben, bei dem Zielfragmente in oder nach
onDestroy()
manchmal nicht verfügbar waren. (b/122312935) - „onDismiss()“ von DialogFragment wird jetzt vor
onDestroy()
aufgerufen. (aosp/874133) (aosp/890734)
Version 1.1.0-alpha03
17. Dezember 2018
Neue Funktionen
- Das Fragment implementiert jetzt
BundleSavedStateRegistryOwner
und hängt von der neu veröffentlichten SavedState-Bibliothek [aosp/824380] ab - Ein
by activityViewModels
-Kotlin-Property-Delegate wurde hinzugefügt, um ViewModels abzurufen, die mit der zugehörigen Aktivität verknüpft sind [b/119050253]. - Der Kotlin-Eigenschaftsdelegat
by viewModels
wurde erweitert, um eine optionale Lambda-Methode zum Abrufen vonViewModelStoreOwner
zu verwenden, mit der Sie das übergeordnete Fragment oder ein anderes benutzerdefiniertesViewModelStoreOwner
mit Code wieval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253] übergeben können.
API-Änderungen
- Mit
FragmentScenario
können Sie jetzt ein Design wieTheme.AppCompat
[b/119054431] angeben. Dies ist eine funktionsgefährdende Änderung. - Es wurde eine
requireView()
-Methode hinzugefügt, die ein@NonNull View
zurückgibt oder einIllegalStateException
auslöst [b/120241368]. - Es wurde eine
requireParentFragment()
-Methode hinzugefügt, die ein@NonNull Fragment
zurückgibt oder einIllegalStateException
auslöst [b/112103783].
Fehlerkorrekturen
- Korrigierte IllegalStateException: Fehler beim Speichern des Status b/120814739
- Fragmente, die aus dem Status der gespeicherten Instanz wiederhergestellt werden, erhalten jetzt immer ein
Bundle
ungleich null [b/119794496] - Entfernte Fragmente verwenden das
Lifecycle
-Objekt nicht mehr, wenn sie wieder hinzugefügt werden [b/118880674]
Version 1.1.0-alpha02
3. Dezember 2018
Neue Funktionen
- Mit den Kotlin-Erweiterungen von FragmentSzenario können Sie jetzt eine Lambda-Funktion für die Fragment-Konstruktion verwenden, um eine
FragmentFactory
-Instanz zu übergeben. (aosp/812913)
Fehlerkorrekturen
- IllegalStateException bei der Verwendung verschachtelter Fragmente im Back Stack behoben (b/119256498)
- Das Absturzproblem bei der Verwendung von
FragmentScenario.recreate()
mit einemFragmentFactory
(aosp/820540) wurde behoben. - Zielfragmente waren nicht zugänglich, nachdem das Fragment entfernt wurde (aosp/807634). Dieses Problem wurde behoben.
Version 1.1.0-alpha01
5. November 2018
Dies ist der erste Release des Artefakts fragment-testing
und von FragmentScenario
, der auf den androidx.test:core-APIs basiert. Weitere Informationen finden Sie in der Dokumentation zum Fragmenttest.
Neue Funktionen
- Neue FragmentSzenario-Klasse zum isolierten Testen von Fragmenten.
- Sie können jetzt für jede
FragmentManager
eineFragmentFactory
festlegen, um zu steuern, wie neue Fragmentinstanzen instanziiert werden. - Es wurde ein neuer Kotlin-Eigenschaftsdelegat
by viewModels()
zum Abrufen von ViewModels aus einem Fragment hinzugefügt. - Ausstehende Eingabeereignisse (z. B. Klicks) werden jetzt im
onStop()
eines Fragments abgebrochen.
API-Änderungen
- Die Annotationen zur Null-Zulässigkeit wurden in der Fragment API-Oberfläche erheblich erweitert.
Fehlerkorrekturen
- Problem beheben, durch das Fragment-Vorgänge in LiveData fehlschlugen (b/77944637)
Bekannte Probleme
- Auf Zielfragmente kann nicht zugegriffen werden, nachdem ein Fragment aus FragmentManager entfernt wurde.
fragment-testing
hängt vonandroidx.test:core:1.0.0-beta01
anstelle der korrektenandroidx.test:core:1.0.0
ab.