Frammento
Aggiornamento più recente | Release stabile | Candidato per la release | Versione beta | Release alpha |
---|---|---|---|---|
20 marzo 2024 | 1.6.2 | - | 1.7.0-beta01 | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a Fragment, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
trendy
dependencies { def fragment_version = "1.6.2" // 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.6.2" // 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") }
Per ulteriori informazioni sulle dipendenze, vedi Aggiungere dipendenze build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 1.7
Versione 1.7.0-beta01
20 marzo 2024
androidx.fragment:fragment-*:1.7.0-beta01
viene rilasciato. La versione 1.7.0-beta01 contiene questi commit.
Modifiche alle API
- Il valore
FragmentHostCallback
è ora scritto in Kotlin in modo che il valore nulla del tipo generico dell'host corrisponda al valore nulla del tipo restituito dionGetHost()
. (I40af5).
Correzioni di bug
- Risolto il problema per cui, quando esegui il commit di un gesto Indietro predittivo su un frammento che non si trova in un container, tale frammento non veniva mai eliminato. Il frammento verrà immediatamente spostato allo stato finale. (Ida0d9)
- Risolto un problema in Frammenti per cui l'interruzione delle transizioni in arrivo con un gesto Indietro predittivo causava l'eliminazione della visualizzazione di entrata e una schermata vuota. (Id3f22, b/319531491).
Versione 1.7.0-alpha10
7 febbraio 2024
androidx.fragment:fragment-*:1.7.0-alpha10
viene rilasciato. La versione 1.7.0-alpha10 contiene questi commit.
Correzioni di bug
- Risolto il problema noto nella precedente release Fragment in cui, utilizzando il supporto della parte posteriore predittiva di Fragment per
Animator
o la transizione AndroidX, Fragments generava unNullPointerException
dahandleOnBackProgressed
se non è mai stato aggiuntoFragmentManager.OnBackStackChangedListener
tramiteaddOnBackStackChangedListener
. (I7c835)
Versione 1.7.0-alpha09
24 gennaio 2024
androidx.fragment:fragment-*:1.7.0-alpha09
viene rilasciato. La versione 1.7.0-alpha09 contiene questi commit.
Artefatto di composizione del frammento
È stato creato un nuovo artefatto fragment-compose
che si concentra sul supporto delle app in fase di passaggio da un'architettura basata su Fragment a un'architettura completamente basata su Compose.
La prima funzionalità disponibile in questo nuovo elemento è un metodo di estensione content
su Fragment
che cerca di semplificare l'utilizzo di Compose per l'interfaccia utente di un singolo frammento, creando un ComposeView
per te e impostando il valore ViewCompositionStrategy
corretto. (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)
}
}
Nuove funzionalità
FragmentManager.OnBackStackChangedListener()
ora fornisceonBackStackChangeProgressed()
eonBackStackChangeCancelled()
per la ricezione, rispettivamente, dello stato di avanzamento predittivo e degli eventi annullati. (214b87)
Problema noto
- Quando utilizzi il supporto della Indietro predittivo di Fragment per
Animator
o la transizione ad AndroidX, Fragments genera unNullPointerException
dahandleOnBackProgressed
se non è mai stato aggiuntoFragmentManager.OnBackStackChangedListener
tramiteaddOnBackStackChangedListener
. L'aggiunta manuale di un listener consente di evitare l'arresto anomalo. Una correzione sarà disponibile nella prossima release di Fragments.
Versione 1.7.0-alpha08
10 gennaio 2024
androidx.fragment:fragment-*:1.7.0-alpha08
viene rilasciato. La versione 1.7.0-alpha08 contiene questi commit.
Pulizia
- È stata rimossa la soluzione alternativa per la Libreria transizione, che è stata corretta in Transizione
1.5.0-alpha06
. (I04356)
Versione 1.7.0-alpha07
29 novembre 2023
androidx.fragment:fragment-*:1.7.0-alpha07
viene rilasciato. La versione 1.7.0-alpha07 contiene questi commit.
Correzioni di bug
- È stato risolto un problema
NullPointerException
causato dall'impostazione di una transizione di elementi condivisi e dall'impossibilità di impostare anche una transizione di ingresso/uscita. (I8472b) - Da Frammento
1.6.2
: quando il frammento di unFragmentContainerView
aumenta in modo artificioso, i suoi stati comeFragmentManager
, Host e ID sono ora accessibili nel callbackonInflate
. (I1e44c, b/307427423). - Da Frammento
1.6.2
: quando utilizziclearBackStack
per rimuovere un insieme di frammenti, ilViewModel
di qualsiasi frammento nidificato verrà cancellato quando il valoreViewModels
del frammento principale verrà cancellato. (I6d83c, b/296173018).
Versione 1.7.0-alpha06
4 ottobre 2023
androidx.fragment:fragment-*:1.7.0-alpha06
viene rilasciato. La versione 1.7.0-alpha06 contiene questi commit.
Aggiornamento delle dipendenze
- I frammenti sono stati aggiornati in modo da dipendere dalla nuova API
animateToStart
aggiunta durante la transizione1.5.0-alpha04
.
Versione 1.7.0-alpha05
20 settembre 2023
androidx.fragment:fragment-*:1.7.0-alpha05
viene rilasciato. La versione 1.7.0-alpha05 contiene questi commit.
Nuove funzionalità
- I frammenti ora forniscono il supporto per la funzionalità Indietro predittivo quando si usano le transizioni Androidx. In questo modo puoi utilizzare il gesto Indietro per passare al frammento precedente con la transizione Androidx personalizzata prima di decidere di eseguire il commit della transazione o di annullarla tramite il gesto completato. Per attivare questa funzionalità devi dipendere dalla release Transizione
1.5.0-alpha03
. (Ib49b4, b/285175724).
Problemi noti
- Al momento si verifica un problema per cui, dopo aver annullato una volta il gesto Indietro con una transizione, la transizione non verrà eseguita nuovamente all'avvio successivo, causando una schermata vuota. La causa potrebbe essere un problema nella Libreria di transizione. (b/300157785). Se riscontri questo problema, segnala il problema relativo a Fragment con un progetto di esempio che lo riproduca. Puoi disattivare la funzionalità Indietro predittiva utilizzando
FragmentManager.enabledPredictiveBack(false)
nella sezioneonCreate()
della pagina Attività.
Versione 1.7.0-alpha04
6 settembre 2023
androidx.fragment:fragment-*:1.7.0-alpha04
viene rilasciato. La versione 1.7.0-alpha04 contiene questi commit.
Correzioni di bug
- Risolto il problema durante l'annullamento di un gesto Indietro predittivo per cui i frammenti non riportavano lo stato del ciclo di vita corretto. (I7cffe, b/297379023)
- È stata corretta una regressione in cui era consentito eseguire animazioni con transizioni. (I59f36).
- Risolto il problema relativo all'utilizzo di Indietro predittivo con frammenti per cui il tentativo di tornare indietro due volte in rapida successione sul secondo e ultimo frammento nello stack posteriore causava un arresto anomalo. (Ifa1a4).
Versione 1.7.0-alpha03
23 agosto 2023
androidx.fragment:fragment-*:1.7.0-alpha03
viene rilasciato. La versione 1.7.0-alpha03 contiene questi commit.
Correzioni di bug
- Risolto il problema relativo ai frammenti durante l'utilizzo del pulsante Indietro predittivo, a causa del quale il primo frammento dello stack posteriore del gestore di frammenti veniva ignorato e il completamento dell'attività quando si utilizzava la navigazione indietro con tre pulsanti o il gesto Indietro predittivo. (I0664b, b/295231788).
Versione 1.7.0-alpha02
9 agosto 2023
androidx.fragment:fragment-*:1.7.0-alpha02
viene rilasciato. La versione 1.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Quando usi Fragments con Gesti Indietro predittivi dall'API 34, se usi un sistema di transizione che non supporta la ricerca (
Animations
,Transitions
) o nessuna transizione, ora Fragments attenderà il completamento del gesto prima di eseguire l'azione Indietro. (I8100c)
Versione 1.7.0-alpha01
7 giugno 2023
androidx.fragment:fragment-*:1.7.0-alpha01
viene rilasciato. Questa versione è sviluppata in un ramo interno.
Nuove funzionalità
- I frammenti ora forniscono il supporto per la funzionalità in-app predittiva quando utilizzi
Animator
. In questo modo puoi usare il gesto Indietro per visualizzare il frammento precedente con il tuo Animator personalizzato prima di decidere di eseguire il commit della transazione tramite il gesto completato o di annullarla. Puoi anche disattivare questo nuovo comportamento utilizzando l'esperimento sperimentaleenablePredictiveBack()
e trasmettendofalse
.
Versione 1.6
Versione 1.6.2
1° novembre 2023
androidx.fragment:fragment-*:1.6.2
viene rilasciato. La versione 1.6.2 contiene questi commit.
Correzioni di bug
- Quando il frammento di
FragmentContainerView
aumenta in modo artificioso, i suoi stati comeFragmentManager
, Host e ID sono ora accessibili nel callbackonInflate
. (I1e44c, b/307427423). - Quando utilizzi
clearBackStack
per rimuovere un insieme di frammenti, tutti iViewModel
di un frammento nidificato verranno cancellati quando i valoriViewModels
del frammento principale verranno cancellati. (I6d83c, b/296173018).
Versione 1.6.1
26 luglio 2023
androidx.fragment:fragment-*:1.6.1
viene rilasciato. La versione 1.6.1 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui lo stato salvato, archiviato quando l'attività era stata interrotta ma non eliminata, veniva memorizzato erroneamente nella cache anche dopo che l'istanza del frammento era stata riportata allo stato
RESUMED
. Ciò causerebbe il riutilizzo dello stato memorizzato nella cache se l'istanza del frammento si trovava nello stack posteriore durante l'utilizzo dell'API per più back stack per salvare e ripristinare il frammento. (I71288, b/246289075)
Aggiornamento delle dipendenze
- Il frammento ora dipende dall'Attività 1.7.2. Questo risolve un problema per cui gli utenti Kotlin non potevano estendere
ComponentDialog
senza una dipendenza esplicita da Activity. (b/287509323)
Versione 1.6.0
7 giugno 2023
androidx.fragment:fragment-*:1.6.0
viene rilasciato. La versione 1.6.0 contiene questi commit.
Modifiche importanti dalla versione 1.5.0
- Lo stato salvato di
Fragment
è stato interamente suddiviso tra lo stato della libreria privata (classiParcelable
personalizzate) e lo stato fornito dallo sviluppatore, che ora è sempre archiviato in un fileBundle
che consente di determinare esattamente da dove ha origine lo stato di un frammento. - L'interfaccia di
FragmentManager.OnBackStackChangedListener
è stata ampliata con due ulteriori callback dionBackStackChangeStarted
eonBackStackChangeCommitted
che vengono chiamati rispettivamente con ogniFragment
prima di essere aggiunti/rimossi dallo stack di frammenti e subito dopo il commit della transazione. FragmentStrictMode
ha aggiunto un nuovoWrongNestedHierarchyViolation
che rileva quando un frammento secondario è nidificato all'interno della gerarchia View del padre, ma non è stato aggiunto alchildFragmentManager
dell'elemento principale.- Le API
Fragment
eFragmentManager
che richiedono un comandoIntent
oIntentSender
ora sono annotate correttamente con@NonNull
per evitare il passaggio di un valore null in quanto tale valore causerebbe sempre l'arresto immediato delle rispettive API del framework Android a cui questi metodi richiamano. DialogFragment
ora fornisce l'accesso alComponentDialog
sottostante tramite l'APIrequireComponentDialog()
.- Il frammento ora dipende dal ciclo di vita
2.6.1
. - Il frammento ora dipende da saveState
1.2.1
. - Il frammento ora dipende da ProfileInstaller
1.3.0
. L'artefatto
fragment-testing-manifest
separa le voci manifest dal resto dei componenti di test dei frammenti. Ciò significa che puoi:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
In questo modo si evitano conflitti dovuti al disallineamento delle versioni tra
fragment-testing
eandroidx.test
Versione 1.6.0-rc01
10 maggio 2023
androidx.fragment:fragment-*:1.6.0-rc01
viene rilasciato. La versione 1.6.0-rc01 contiene questi commit.
Correzioni di bug
- Risolto il problema che causava l'invio di
ActivityResult
con il codice di richiesta errato quando sono state effettuate più richiestestartActivityForResult
consecutive. (If0b9d, b/249519359). - Risolto il problema per cui i callback
onBackStackChangeListener
venivano inviati per transazioni che in realtà non modificavano il back stack se venivano combinate con transazioni che sì. (I0eb5c, b/279306628)
Versione 1.6.0-beta01
19 aprile 2023
androidx.fragment:fragment-*:1.6.0-beta01
viene rilasciato. La versione 1.6.0-beta01 contiene questi commit.
Correzioni di bug
- L'utilizzo di
postponeEnterTransition
con un timeout e la successiva sostituzione del frammento rinviato non comporta più la perdita del frammento rinviato. (I2ec7d, b/276375110) - I nuovi callback
onBackStackChangeStarted
eonBackStackChangeCommitted
ora invieranno un frammento solo una volta, anche se più transazioni contengono lo stesso frammento. (Ic6b69).
Versione 1.6.0-alpha09
5 aprile 2023
androidx.fragment:fragment-*:1.6.0-alpha09
viene rilasciato. La versione 1.6.0-alpha09 contiene questi commit.
Modifiche alle API
DialogFragment
ora fornisce l'accesso alComponentDialog
sottostante tramite l'APIrequireComponentDialog()
. (I022e3, b/234274777).- Le API con frammento
commitNow()
,executePendingTransactions()
epopBackStackImmediate()
sono state annotate con@MainThread
, il che significa che ora tutte genereranno errori di build quando non vengono chiamati dal thread principale invece di attendere l'esito negativo del runtime. (Ic9665, b/236538905).
Correzioni di bug
- Risolto il bug in
FragmentManager
per cui il salvataggio e il ripristino nello stesso frame potevano causare un arresto anomalo. (Ib36af, b/246519668). - Ora i callback
OnBackStackChangedListener
onBackStackChangeStarted
eonBackStackChangeCommitted
vengono eseguiti solo quando lo stack di backupFragmentManager
viene modificato. (I66055, b/274788957)
Versione 1.6.0-alpha08
22 marzo 2023
androidx.fragment:fragment-*:1.6.0-alpha08
viene rilasciato. La versione 1.6.0-alpha08 contiene questi commit.
Cambiamento del comportamento
- La tempistica del callback
OnBackStackChangedListener.onBackStackChangeCommited
è stata modificata in modo che venga eseguita prima dell'esecuzione delle operazioni sui frammenti. Ciò garantisce che al callback non venga mai passato un frammento scollegato. (I66a76, b/273568280).
Correzioni di bug
- Da Frammento
1.5.6
: è stato risolto un problema per cui la chiamata diclearFragmentResultListener
all'interno di unsetFragmentResultListener
non funzionava se ilLifecycle
fosse giàSTARTED
e un risultato fosse già disponibile. (If7458)
Aggiornamenti delle dipendenze
- Il frammento ora dipende dal ciclo di vita
2.6.1
. (586fe7) - Il frammento ora dipende da saveState
1.2.1
. (078e4e). - Il frammento ora dipende da ProfileInstaller
1.3.0
. (3fc05b)
Versione 1.6.0-alpha07
8 marzo 2023
androidx.fragment:fragment-*:1.6.0-alpha07
viene rilasciato. La versione 1.6.0-alpha07 contiene questi commit.
Correzioni di bug
- Da Frammento
1.5.6
: è stato risolto un problema per cui la rimozione di un frammento, indipendentemente dal fatto che fossero state aggiunte voci di menu o meno, rendeva non valido il menu dell'attività. (50f098, b/244336571)
Versione 1.6.0-alpha06
22 febbraio 2023
androidx.fragment:fragment-*:1.6.0-alpha06
viene rilasciato. La versione 1.6.0-alpha06 contiene questi commit.
Modifica del comportamento
- Il nuovo callback
onBackStackChangedStarted
sul dispositivoonBackStackChangedListener
diFragmentManager
verrà eseguito prima che i frammenti inizino a essere spostati negli stati target. (I34726)
Versione 1.6.0-alpha05
8 febbraio 2023
androidx.fragment:fragment-*:1.6.0-alpha05
viene rilasciato. La versione 1.6.0-alpha05 contiene questi commit.
Nuove funzionalità
- L'interfaccia di
FragmentManager.OnBackStackChagnedListener
ora offre due ulteriori callback,onBackStackChangeStarted
eonBackStackChangeCommitted
, che consentono di ottenere informazioni aggiuntive e controllare quando si verificano modifiche dello stack back inFragmentManager
. (Ib7ce5, b/238686802).
Modifiche alle API
- Le API
Fragment
eFragmentManager
che richiedonoIntent
oIntentSender
ora sono annotate correttamente con@NonNull
per evitare il trasferimento di un valore null in quanto tale valore causerebbe sempre l'arresto anomalo immediato delle rispettive API del framework Android a cui questi metodi chiamano questi metodi. (I06fd4)
Versione 1.6.0-alpha04
7 dicembre 2022
androidx.fragment:fragment-*:1.6.0-alpha04
viene rilasciato. La versione 1.6.0-alpha04 contiene questi commit.
Nuove funzionalità
FragmentStrictMode
ha aggiunto un nuovoWrongNestedHierarchyViolation
che rileva quando un frammento secondario è nidificato all'interno della gerarchia View del padre, ma non è stato aggiunto alchildFragmentManager
dell'elemento principale. (I72521, b/249299268)
Modifiche del comportamento
- Ora i frammenti ripristinano lo stato
SavedStateRegistry
prima del giornoonAttach()
, assicurando che sia disponibile da tutti i metodi di ciclo di vita successivo. (I1e2b1).
Modifiche alle API
- L'artefatto
fragment-testing-manifest
separa le voci manifest dal resto dei componenti di test dei frammenti. Ciò significa che puoi:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
In questo modo si evitano conflitti dovuti al disallineamento delle versioni tra fragment-testing
e androidx.test
.(I8e534, b/128612536)
Correzioni di bug
- Da Frammento
1.5.5
: i frammenti non salveranno più erroneamente lo statoViewModel
come parte dello stato salvato del registro di visualizzazione. (I10d2b, b/253546214).
Versione 1.6.0-alpha03
5 ottobre 2022
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
e androidx.fragment:fragment-testing:1.6.0-alpha03
vengono rilasciati. La versione 1.6.0-alpha03 contiene questi commit.
Modifiche alle API
- I corsi che estendono
DialogFragment
ora dovranno richiamare le funzionalità super nei relativi override dionDismiss()
. (I14798, b/238928865)
Correzioni di bug
- Risolte le regressioni causate dall'integrazione delle nuove interfacce di callback del provider (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) per garantire che i frammenti ricevano sempre i callback corretti. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
Versione 1.6.0-alpha02
24 agosto 2022
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
e androidx.fragment:fragment-testing:1.6.0-alpha02
vengono rilasciati. La versione 1.6.0-alpha02 contiene questi commit.
Correzioni di bug
- Da Frammento
1.5.2
: è stato risolto un problema per cui l'esecuzione di una transazionepopBackStack()
ereplace()
contemporaneamente potrebbe causare l'esecuzione errata dei frammenti in uscitaAnimation
/Animator
. (Ib1c07, b/214835303)
Versione 1.6.0-alpha01
27 luglio 2022
androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
e androidx.fragment:fragment-testing:1.6.0-alpha01
vengono rilasciati. La versione 1.6.0-alpha01 contiene questi commit.
Modifiche del comportamento
- Lo stato salvato di
Fragment
è stato interamente suddiviso tra lo stato della libreria privata (classiParcelable
personalizzate) e lo stato fornito dallo sviluppatore, che ora è sempre archiviato in un fileBundle
che consente di determinare esattamente da dove ha origine lo stato di un frammento. (b/207158202)
Correzioni di bug
- Da Fragment
1.5.1
: correggi una regressione inDialogFragmentCallbacksDetector
in cui l'utilizzo della versione lint in bundle con AGP 7.4 causerebbe l'arresto anomalo dell'lint. (b/237567009)
Aggiornamento delle dipendenze
- Da Fragment
1.5.1
: la raccolta Fragment ora dipende dal Ciclo di vita2.5.1
. (Id204c) - Da Fragment
1.5.1
: la raccolta di frammenti ora dipende dall'attività1.5.1
. (I10f07)
Versione 1.5
Versione 1.5.7
19 aprile 2023
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
e androidx.fragment:fragment-testing:1.5.7
vengono rilasciati. La versione 1.5.7 contiene questi commit.
Correzioni di bug
- L'utilizzo di
postponeEnterTransition
con un timeout e la successiva sostituzione del frammento rinviato non comporta più la perdita del frammento rinviato. (I2ec7d, b/276375110)
Versione 1.5.6
22 marzo 2023
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
e androidx.fragment:fragment-testing:1.5.6
vengono rilasciati. La versione 1.5.6 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui la rimozione di un frammento, indipendentemente dal fatto che fossero state aggiunte o meno voci di menu, rendeva non valido il menu dell'attività. (50f098, b/244336571)
- Risolto il problema per cui la chiamata a
clearFragmentResultListener
all'interno di unsetFragmentResultListener
non funzionava seLifecycle
fosse giàSTARTED
e un risultato fosse già disponibile. (If7458)
Versione 1.5.5
7 dicembre 2022
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
e androidx.fragment:fragment-testing:1.5.5
vengono rilasciati. La versione 1.5.5 contiene questi commit.
Correzioni di bug
- I frammenti non salveranno più erroneamente lo stato
ViewModel
come parte dello stato di salvataggio del registro di visualizzazione. (I10d2b, b/253546214).
Versione 1.5.4
24 ottobre 2022
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
e androidx.fragment:fragment-testing:1.5.4
vengono rilasciati. La versione 1.5.4 contiene questi commit.
Correzioni di bug
- Risolto un errore per cui l'utilizzo di un elemento
FragmentController
personalizzato con un host che non implementa un'interfaccia di callback del provider (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) e la chiamata della sua funzione di invio deprecata non potevano essere inviati ai frammenti figlio. (I9b380)
Versione 1.5.3
21 settembre 2022
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
e androidx.fragment:fragment-testing:1.5.3
vengono rilasciati. La versione 1.5.3 contiene questi commit.
Correzioni di bug
- Risolto un errore che causava ai frammenti nello stack posteriore di ricevere callback
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
eonConfigurationChanged()
. (I34581, I8dfe6, b/242570955) - I frammenti secondari nidificati non riceveranno più diversi callback
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
oonConfigurationChanged()
. (I690b3, Id0096, If9d6b, I2cba2)
Versione 1.5.2
10 agosto 2022
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
e androidx.fragment:fragment-testing:1.5.2
vengono rilasciati. La versione 1.5.2 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui l'esecuzione di una transazione di
popBackStack()
e direplace()
contemporaneamente potrebbe causare l'esecuzione errata dei frammenti in uscita (Animation
/Animator
). (Ib1c07, b/214835303)
Versione 1.5.1
27 luglio 2022
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
e androidx.fragment:fragment-testing:1.5.1
vengono rilasciati. La versione 1.5.1 contiene questi commit.
Correzioni di bug
- Correggi una regressione in
DialogFragmentCallbacksDetector
in cui l'utilizzo della versione lint in bundle con AGP 7.4 causava l'arresto anomalo di lint. (b/237567009)
Aggiornamento delle dipendenze
- La raccolta di frammenti ora dipende dal ciclo di vita
2.5.1
. (Id204c) - La libreria di frammenti ora dipende dall'Attività
1.5.1
. (I10f07)
Versione 1.5.0
29 giugno 2022
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
e androidx.fragment:fragment-testing:1.5.0
vengono rilasciati. La versione 1.5.0 contiene questi commit.
Modifiche importanti dalla versione 1.4.0
- Integrazione di CreationExtras.
Fragment
ora è in grado di fornire unViewModelProvider.Factory
stateless tramiteCreationExtras
del ciclo di vita2.5.0
. - Integrazione della finestra di dialogo dei componenti:
DialogFragment
ora utilizzaComponentDialog
tramite Attività1.5.0
come finestra di dialogo predefinita restituita daonCreateDialog()
. - Refactoring dello stato dell'istanza salvata: i frammenti hanno iniziato a cambiare il modo in cui salvano lo stato dell'istanza. Si tratta di uno sforzo per identificare chiaramente lo stato salvato nel frammento e la sua origine. Le modifiche attuali includono:
FragmentManager
ora salva lo stato dell'istanza salvata in unBundle
anziché direttamente in unParcelable
personalizzato.- I risultati impostati tramite la
Fragment Result APIs
che non sono stati ancora pubblicati vengono salvati separatamente dallo stato interno dellaFragmentManager
. - Lo stato associato a ogni singolo frammento viene ora salvato separatamente dallo stato interno di
FragmentManager
, consentendoti così di correlare la quantità di stato salvato associato a un singolo frammento con gli ID univoci presenti nel logging di debug diFragment
.
Altre modifiche
FragmentStrictMode
ora offre ai frammenti privati di terze parti la possibilità di bypassare specifiche sanzioni per violazione utilizzandoallowViolation()
con il nome della classe.- Le API Fragment per fornire un menu al
ActionBar
della tua attività sono state ritirate. Le APIMenuHost
eMenuProvider
aggiunte in Attività1.4.0
forniscono una superficie API equivalente verificabile e consapevole del ciclo di vita che i frammenti devono utilizzare.
Versione 1.5.0-rc01
11 maggio 2022
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
e androidx.fragment:fragment-testing:1.5.0-rc01
vengono rilasciati. La versione 1.5.0-rc01 contiene questi commit.
Refactoring dello stato dell'istanza salvata
- Lo stato associato a ogni singolo frammento viene ora salvato separatamente dallo stato interno di
FragmentManager
, consentendoti così di correlare la quantità di stato salvato associato a un singolo frammento con gli ID univoci presenti nel logging di debug dei frammenti. (a153e0, b/207158202).
Versione 1.5.0-beta01
20 aprile 2022
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
e androidx.fragment:fragment-testing:1.5.0-beta01
vengono rilasciati. La versione 1.5.0-beta01 contiene questi commit.
Modifiche alle API
DialogFragment
ha aggiunto un nuovo metododismissNow
che utilizzacommitNow
per la parità con la funzioneshowNow
. Tieni presente cheDialog
non verrà ignorato immediatamente, ma verrà aggiornato solo in modo sincrono lo stato diFragmentManager
. (I15c36, b/72644830).
Refactoring dello stato dell'istanza salvata
FragmentManager
ora salva lo stato dell'istanza salvata in unBundle
anziché direttamente in unParcelable
personalizzato. Questo è il primo passaggio per fornire ulteriore trasparenza riguardo a ciò che viene effettivamente salvato dai frammenti. (I93807, b/207158202)- I risultati impostati tramite le API Fragment Result che non sono stati ancora pubblicati vengono salvati separatamente dallo stato interno di
FragmentManager
. Ciò consentirà una maggiore trasparenza sui risultati che vengono salvati come parte dello stato dell'istanza salvata. (I6ea12, b/207158202).
Versione 1.5.0-alpha05
6 aprile 2022
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
e androidx.fragment:fragment-testing:1.5.0-alpha05
vengono rilasciati. La versione 1.5.0-alpha05 contiene questi commit.
Modifiche alle API
- Il valore
setHasOptionsMenu()
diFragment
è stato ritirato. Per gestire i menu e le relative voci di menu, devi utilizzare le nuove API dei menu, come indicato nelle note di rilascio del frammento1.5.0-alpha04
. (I7b4b4, b/226438239).
Versione 1.5.0-alpha04
23 marzo 2022
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
e androidx.fragment:fragment-testing:1.5.0-alpha04
vengono rilasciati. La versione 1.5.0-alpha04 contiene questi commit.
Modifiche alle API
- Le API Fragment per fornire un menu all'elemento
ActionBar
della tua attività sono state ritirate poiché associano strettamente il tuo frammento alla tua attività e non sono testabili separatamente. Le APIMenuHost
eMenuProvider
aggiunte in Attività1.4.0-alpha01
forniscono una superficie API equivalente verificabile e consapevole del ciclo di vita che i frammenti devono utilizzare. (I50a59, I20758)
Correzioni di bug
SavedStateViewFactory
ora supporta l'uso diCreationExtras
anche quando è stato inizializzato con unSavedStateRegistryOwner
. Se vengono forniti extra, gli argomenti inizializzati vengono ignorati. (I6c43b, b/224844583).
Versione 1.5.0-alpha03
23 febbraio 2022
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
e androidx.fragment:fragment-testing:1.5.0-alpha03
vengono rilasciati. La versione 1.5.0-alpha03 contiene questi commit.
Modifiche alle API
- Ora puoi passare
CreationExtras
alle funzioniby viewModels()
eby activityViewModels()
. (Ibefe7, b/217601110).
Modifiche del comportamento
DialogFragment
ora utilizzaComponentDialog
come finestra di dialogo predefinita restituita daonCreateDialog()
. (If3784, b/217618170)
Versione 1.5.0-alpha02
9 febbraio 2022
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
e androidx.fragment:fragment-testing:1.5.0-alpha02
vengono rilasciati. La versione 1.5.0-alpha02 contiene questi commit.
Nuove funzionalità
FragmentStrictMode
ora offre ai frammenti privati di terze parti la possibilità di bypassare specifiche sanzioni per violazione utilizzandoallowViolation()
con il nome della classe. (I8f678)
Versione 1.5.0-alpha01
26 gennaio 2022
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
e androidx.fragment:fragment-testing:1.5.0-alpha01
vengono rilasciati. La versione 1.5.0-alpha01 contiene questi commit.
Nuove funzionalità
Fragment
ora si integra con gli extra ViewModel Creation, introdotti nell'ambito del ciclo di vita2.5.0-alpha01
. (I3060b, b/207012585)
Correzioni di bug
- Da Frammento
1.4.1
:FragmentContainerView
non genera più un'eccezione per lo stato non valido quando gli ID vista generati da XML hanno valori negativi. (Ic185b, b/213086140). - Da Frammento
1.4.1
: quando utilizzi un lambdaownerProducer
personalizzato con la funzione lazyby viewModels()
, ora utilizzerà ildefaultViewModelProviderFactory
di quel proprietario se non viene fornito unViewModelProvider.Factory
personalizzato invece di utilizzare sempre il codice di fabbrica del frammento. (I56170, b/214106513) - È stato risolto un arresto anomalo durante il primo accesso a
ViewModel
da un callbackregisterForActivityResult()
di unFragment
. (Iea2b3).
Versione 1.4
Versione 1.4.1
26 gennaio 2022
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
e androidx.fragment:fragment-testing:1.4.1
vengono rilasciati. La versione 1.4.1 contiene questi commit.
Correzioni di bug
FragmentContainerView
non genera più un'eccezione relativa allo stato non valido quando gli ID vista generati da XML hanno valori negativi. (Ic185b, b/213086140).- Quando utilizzi un lambda
ownerProducer
personalizzato con la funzione lazyby viewModels()
, ora utilizzerà ildefaultViewModelProviderFactory
di quel proprietario se non viene fornito un valoreViewModelProvider.Factory
personalizzato, invece di utilizzare sempre i dati di fabbrica del frammento. (I56170, b/214106513)
Versione 1.4.0
17 novembre 2021
androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
e androidx.fragment:fragment-testing:1.4.0
vengono rilasciati. La versione 1.4.0 contiene questi commit.
Modifiche importanti dalla versione 1.3.0
- Le API
FragmentStrictMode
forniscono controlli di runtime che consentono di verificare che l'app o le librerie che utilizzi non chiamino API di frammenti deprecate. Quando viene rilevata una violazione, puoi scegliere di stampare un messaggio di log, attivare un listener personalizzato o causare l'arresto anomalo della tua app. L'FragmentStrictMode.Policy
che controlla quali controlli sono attivi e quali "sanzioni" possono essere attivate su unFragmentManager
con il nuovo metodosetStrictModePolicy()
. Questo criterio si applica a questoFragmentManager
e in modo transitivo a qualsiasi gestore di frammenti secondari che non impostano un proprio criterio univoco. Consulta StrictMode per i frammenti. FragmentContainerView
ora fornisce un metodogetFragment()
che restituisce il frammento aggiunto più di recente al container. Utilizza la stessa logica difindFragmentById()
con l'IDFragmentContainerView
, ma consente di concatenare la chiamata.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
ora implementaCloseable
, consentendoti di utilizzarlo con il metodouse
di Kotlin o con try-with-resources.È stato aggiunto
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
per specificare se attivare l'animazione di transizione dell'attività standard proveniente dal tuo tema nella transizione Fragmenti.L'API sperimentale di
FragmentManager.enableNewStateManager(boolean)
è stata rimossa e il nuovo gestore di stato è ora l'unica opzione disponibile.
Più back stack
FragmentManager
mantiene uno stack back-forward costituito da transazioni con frammenti che hanno utilizzato addToBackStack()
. In questo modo puoi estrarre le transazioni e tornare allo stato precedente, utilizzando i meccanismi per Salvataggio dello stato con i frammenti per consentire ai frammenti di ripristinare lo stato in modo appropriato.
Questa release amplia i meccanismi fornendo tre nuove API FragmentManager
: saveBackStack(String name)
, restoreBackStack(String name)
e clearBackStack(String name)
. Queste API utilizzano lo stesso name
di addToBackStack()
per salvare lo stato di FragmentTransaction
e di ogni frammento aggiunto a queste transazioni e consentirti di ripristinare quelle transazioni e i relativi frammenti con il relativo stato intatto. Questo ti consente di "scambiare" in modo efficace tra più stack precedenti salvando l'attuale stack precedente e ripristinando uno stack precedente salvato.
saveBackStack()
funziona in modo simile a popBackStack()
in quanto è asincrono e fa sì che tutte le transazioni relative ai frammenti tornino a quel nome specifico da invertire ("popup") e a eventuali frammenti aggiunti da eliminare e rimuovere, ma differisce in alcuni aspetti importanti:
saveBackStack()
è sempre inclusivo.- A differenza di
popBackStack()
, che inserirà tutte le transazioni nello stack posteriore se il nome specificato non viene trovato nello stack precedente o se viene fornito un nome null,saveBackStack()
non fa nulla se in precedenza non hai eseguito il commit di una transazione di frammento utilizzandoaddToBackStack()
con quel nome esatto e diverso da null. - Lo stato di tutti i frammenti aggiunti da queste transazioni viene salvato. Ciò significa che lo stato di visualizzazione di ogni frammento è archiviato, che viene richiamato
onSaveInstanceState()
di ogni frammento e che lo stato viene ripristinato, nonché tutte le istanzeViewModel
associate ai frammenti vengono conservate (e non viene chiamatoonCleared()
).
Le transazioni di frammento che possono essere utilizzate con saveBackStack()
devono soddisfare determinati criteri:
- Ogni transazione di frammento deve utilizzare
setReorderingAllowed(true)
per garantire che le transazioni possano essere ripristinate come singola operazione atomica. - L'insieme di transazioni salvato deve essere indipendente (ovvero, non deve fare riferimento esplicito ad alcun frammento al di fuori di questo insieme di transazioni) per garantire di poter essere ripristinato in qualsiasi momento, indipendentemente dalle modifiche apportate allo stack precedente nel tempo intermedio.
- Nessun frammento salvato può essere un frammento conservato o avere un frammento conservato nel loro set transitivo di frammenti figlio per garantire che
FragmentManager
non restituisca alcun riferimento ai frammenti salvati dopo il salvataggio dello stack posteriore.
Analogamente a saveBackStack()
, restoreBackStack()
e clearBackStack()
, che ripristinano uno stack precedente salvato in precedenza o cancellano rispettivamente uno stack di backup salvato in precedenza, entrambi non fanno nulla se non hai precedentemente chiamato saveBackStack()
con lo stesso nome.
Per saperne di più, consulta Più back stack: approfondimento.
Versione 1.4.0-rc01
3 novembre 2021
androidx.fragment:fragment:1.4.0-rc01
rilasciato senza modifiche rispetto al frammento 1.4.0-beta01. La versione 1.4.0-rc01 contiene questi commit.
Versione 1.4.0-beta01
27 ottobre 2021
androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
e androidx.fragment:fragment-testing:1.4.0-beta01
vengono rilasciati. La versione 1.4.0-beta01 contiene questi commit.
Correzioni di bug
- Ora i frammenti principali invieranno
onHiddenChanged()
lungo l'intera gerarchia prima di lanciare il proprio callback. (Iedc20, b/77504618). - La tastiera si chiuderà automaticamente se passi da un frammento con una tastiera aperta a un frammento con una vista di riciclo. (I8b842, b/196852211)
DialogFragment
ora utilizzasetReorderingAllowed(true)
per tutte le transazioni create quando chiamishow()
,showNow()
odismiss()
. (Ie2c14).- L'avviso lint estremamente lungo di
DetachAndAttachFragmentInSameFragmentTransaction
è stato ridotto aDetachAndAttachSameFragment
. (e9eca3)
Versione 1.4.0-alpha10
29 settembre 2021
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
e androidx.fragment:fragment-testing:1.4.0-alpha10
vengono rilasciati. La versione 1.4.0-alpha10 contiene questi commit.
Pelucchi
- È stato aggiunto l'avviso lint
DetachAndAttachFragmentInSameFragmentTransaction
per il rilevamento delle chiamate siadetach()
cheattach()
sullo stessoFragment
nello stessoFragmentTransaction
. Queste operazioni complementari si annullano a vicenda quando vengono eseguite nella stessa transazione, devono essere suddivise in transazioni separate per poter fare qualcosa. (aosp/1832956, b/200867930) - È stato aggiunto l'errore lint
FragmentAddMenuProvider
per la correzione degli utilizzi del ciclo di vita dei frammenti al ciclo di vita della vista Fragment quando si utilizza l'APIaddMenuProvider
diMenuHost
. (aosp/1830457, b/200326272)
Aggiornamenti alla documentazione
- Il messaggio relativo al ritiro delle API ora gestito dalle API Activity Result, ovvero
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
eonRequestPermissionsResult
, è stato ampliato con ulteriori dettagli. (cce80f) - Il messaggio relativo al ritiro di
onActivityCreated()
sia perFragment
sia perDialogFragment
è stato ampliato con ulteriori dettagli. (224db4)
Versione 1.4.0-alpha09
15 settembre 2021
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
e androidx.fragment:fragment-testing:1.4.0-alpha09
vengono rilasciati. La versione 1.4.0-alpha09 contiene questi commit.
Nuove funzionalità
- Ora puoi chiamare
clearBackStack(name)
per cancellare qualsiasi stato salvato in precedenza consaveBackStack(name)
. (I70cd7)
Modifiche alle API
- La classe
FragmentContainerView
è stata riscritta in Kotlin per garantire che la funzionegetFragment
rispetti correttamente la nulla. (If694a, b/189629145) - FragmentStrictMode è ora scritto in Kotlin (I11767, b/199183506)
Correzioni di bug
- Risolto il problema per cui lo stato di un frammento aggiunto con
setReorderingAllowed(true)
e poi subito rimosso prima dell'esecuzione delle transazioni in sospeso non veniva ripulito correttamente. (I8ccb8)
Versione 1.4.0-alpha08
1° settembre 2021
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
e androidx.fragment:fragment-testing:1.4.0-alpha08
vengono rilasciati. La versione 1.4.0-alpha08 contiene questi commit.
Correzioni di bug
- È stato migliorato il controllo Lint
UseRequireInsteadOfGet
per gestire meglio le parentesi ridondanti. (I2d865). - È stato migliorato il controllo del lint
UseGetLayoutInflater
per gestire altri casi limite. (Ie5423)
Versione 1.4.0-alpha07
18 agosto 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
e androidx.fragment:fragment-testing:1.4.0-alpha07
vengono rilasciati senza modifiche degne di nota. La versione 1.4.0-alpha07 contiene questi commit.
Versione 1.4.0-alpha06
4 agosto 2021
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
e androidx.fragment:fragment-testing:1.4.0-alpha06
vengono rilasciati. La versione 1.4.0-alpha06 contiene questi commit.
Correzioni di bug
- Risolto il problema con più back stack durante il rapido passaggio da uno stack all'altro, che veniva visualizzato come
IllegalStateException
durante il ripristino di unFragmentTransaction
o come seconda copia di un frammento visualizzato. (I9039f) - Risolto il problema per cui
FragmentManager
conservava una copia dello stato precedentemente salvato tramitesaveBackStack()
anche dopo il ripristino di quello stato. (Ied212) - Il metodo
dismissAllowingStateLoss()
diDialogFragment
non si arresta più in modo anomalo quando lo chiami dopo che lo stato è stato salvato quando aggiungi in modo specifico DialogFragment tramite il metodoshow(FragmentTransaction, String)
. (I84422)
Versione 1.4.0-alpha05
21 luglio 2021
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
e androidx.fragment:fragment-testing:1.4.0-alpha05
vengono rilasciati. La versione 1.4.0-alpha05 contiene questi commit.
Correzioni di bug
- Da Frammento
1.3.6
: la vista del frammento è ora impostata correttamente suGONE
quando si utilizzahide()
quando la vista principale hatransitionGroup=”true”
impostato. (aosp/1766655, b/193603427) - Da Frammento
1.3.6
: oraFragmentActivity
sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita di cui esegue l'override. (I6db7a).
Aggiornamento delle dipendenze
- Da Frammento
1.3.6
: i frammenti ora dipendono dall'attività1.2.4
(I3a66c)
Versione 1.4.0-alpha04
30 giugno 2021
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
e androidx.fragment:fragment-testing:1.4.0-alpha04
vengono rilasciati. La versione 1.4.0-alpha04 contiene questi commit.
Modifiche alle API
FragmentManager
ora utilizzaSavedStateRegistry
in background per salvare il suo stato. Anche i metodisaveAllState()
erestoreSavedState()
sono stati ritirati inFragmentController
. Se utilizziFragmentController
per ospitare frammenti all'esterno diFragmentActivity
, dovresti implementareFragmentHostCallbacks
SavedStateRegistryOwner
. (Iba68e, b/188734238).
Correzioni di bug
- Risolto il problema per cui la chiamata a
saveBackStack()
nell'ambito del supporto di più back stack non riusciva se eseguita contemporaneamente all'esecuzione di unFragmentTransaction
che utilizzavareplace()
. (I73137) - È stato corretto un
NullPointerException
che veniva generato dopo il ripristino manuale di uno stack di back-stack salvato che conteneva più transazioni quando si utilizzava l'APIrestoreBackStack()
per il supporto di più back stack. In questo modo è stato anche risolto un problema per cuisetReorderingAllowed(true)
non veniva controllato per tutte le transazioni. (I8c593) - Risolto il problema per cui
FragmentManager
continuava erroneamente a ripristinare lo stato dei frammenti salvato in precedenza anche dopo la loro rimozione daFragmentManager
, causando così una crescita continua dello stato salvato nel tempo. (I1fb8e).
Versione 1.4.0-alpha03
16 giugno 2021
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
e androidx.fragment:fragment-testing:1.4.0-alpha03
vengono rilasciati. La versione 1.4.0-alpha03 contiene questi commit.
Nuove funzionalità
- Tutte le classi Fragment StrictMode
Violation
sono state aggiornate con messaggi di errore più dettagliati che spiegano i dettagli della violazione. (b/187871638)FragmentTagUsageViolation
ora contiene un messaggio di errore più dettagliato relativo al contenitore del contenitore principale a cui sarebbe stato aggiunto il frammento. (Ic33a7)WrongFragmentContainerViolation
ora ha un messaggio di errore più dettagliato che include il container a cui veniva aggiunto il frammento. (Ib55f8).- Le classi dei casi d'uso per
TargetFragmentUsageViolation
ora dispongono di messaggi di errore più dettagliati che includono il frammento che causa la violazione e qualsiasi altra informazione contenuta. (Icc6ac) - Le classi che estendono
RetainInstanceUsageViolation
ora presentano messaggi di errore più dettagliati che includono il frammento che causa la violazione. (I6bd55). - Ora
FragmentReuseViolation
ha un messaggio di errore più dettagliato che include l'ID precedente del frammento. (I28ce2) SetUserVisibleHintViolation
ora ha un messaggio di errore più dettagliato che include l'impostazione del suggerimento visibile all'utente. (Ib2d5f)
Modifiche del comportamento
- È stata ripristinata la limitazione relativa alle chiamate a
fitsSystemWindows
su unFragmentContainerView
. Questa azione non causa più l'arresto anomalo della tua app. (6b8ddd, b/190622202)
Correzioni di bug
- Da Fragment
1.3.5
: è stata corretta una regressione nelle transizioni di elementi condivisi introdotta in Fragment1.3.4
da aosp/1679887. I frammenti ora gestiscono correttamente i gruppi di transizione (impostati direttamente tramitetransitionGroup="true"
o indirettamente tramitetransitionName
obackground
) e gli elementi condivisi non genereranno piùIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304). FragmentManager
non si arresta più in modo anomalo quando tenti di nascondere un frammento di rimozione. (I573dd, b/183634730).- Il controllo lint
OnCreateDialogIncorrectCallback
non produrrà più un arresto anomalo durante la valutazione di una variabile di primo livello. (0a9efa, b/189967522).
Versione 1.4.0-alpha02
2 giugno 2021
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
e androidx.fragment:fragment-testing:1.4.0-alpha02
vengono rilasciati. La versione 1.4.0-alpha02 contiene questi commit.
Nuove funzionalità
- Ora
FragmentStrictMode
registrerà sempre le violazioni quando viene attivato il logging tramiteFragmentManager
, indipendentemente dal criterio della modalità con restrizioni attualmente in uso. (I02df6, b/187872638). FragmentStrictMode
ora supporta l'esenzione da determinate classiFragment
dalla modalità rigorosaViolation
, consentendo a quella classe di aggirare eventuali sanzioni. (Ib4e5d, b/184786736).Il corso
FragmentStrictMode
Violation
è stato ampliato per aggiungere informazioni sulla struttura basate su ciascuna violazione. In questo modo puoi verificare esattamente la causa della violazione e il frammento della violazione (If5118, b/187871150). OgniViolation
contiene quanto segue:WrongFragmentContainerViolation
ora contiene il valoreViewGroup
a cui stava tentando di aggiungereFragment
. (I83c75, b/187871150)TargetFragmentUsageViolation
è stato espanso inSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
eGetTargetFragmentRequestCodeUsageViolation
, conSetTargetFragmentUsageViolation
contenente il frammento di destinazione e il codice di richiesta. (I741b4, b/187871150)SetUserVisibleHintViolation
ora contiene il valore booleano passato insetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
ora contiene il gruppo ViewGroup in cui il tag<fragment>
stava cercando di espandere un frammento.(I5dbbc, b/187871150)FragmentReuseViolation
ora contiene l'ID univoco dell'istanza precedente diFragment
che ha causato la violazione. (I0544d, b/187871150).RetainInstanceUsageViolation
ora è astratto e ha due sottoclassi,SetRetainInstanceUsageViolation
eGetRetainInstanceUsageViolation
, che rappresentano i due casi per il tipo di violazione. (Ic81e5, b/187871150).
Modifiche del comportamento
FragmentContainerView
ora genera un'eccezione quando tenta di modificare l'attributofitsSystemWindow
in modo programmatico o tramite XML. Gli inserti devono essere gestiti dalla vista di ogni singolo frammento. (Ie6651, b/187304502)
Versione 1.4.0-alpha01
18 maggio 2021
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
e androidx.fragment:fragment-testing:1.4.0-alpha01
vengono rilasciati. La versione 1.4.0-alpha01 contiene questi commit.
Nuove funzionalità
FragmentContainerView
ora fornisce un metodogetFragment()
che restituisce il frammento aggiunto più di recente al container. Utilizza la stessa logica difindFragmentById()
con l'IDFragmentContainerView
, ma consente di concatenare la chiamata. (Ife17a, b/162527857).val navController = binding.container.getFragment<NavHostFragment>().navController
È stato aggiunto
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
per specificare se attivare l'animazione di transizione dell'attività standard proveniente dal tuo tema nella transizione Fragmenti. (I46652)
Più back stack
FragmentManager
mantiene uno stack back-forward costituito da transazioni con frammenti che hanno utilizzato addToBackStack()
. In questo modo puoi estrarre le transazioni e tornare allo stato precedente, utilizzando i meccanismi per Salvataggio dello stato con i frammenti per consentire ai frammenti di ripristinare lo stato in modo appropriato.
Questa release amplia i meccanismi forniti fornendo due nuove API FragmentManager
: saveBackStack(String name)
e restoreBackStack(String name)
. Queste API utilizzano lo stesso name
di addToBackStack()
per salvare lo stato di FragmentTransaction
e di ogni frammento aggiunto a queste transazioni e consentirti di ripristinare quelle transazioni e i relativi frammenti con il relativo stato intatto. Questo ti consente di "scambiare" in modo efficace tra più stack precedenti salvando l'attuale stack precedente e ripristinando uno stack precedente salvato.
saveBackStack()
funziona in modo simile a popBackStack()
in quanto è asincrono e fa sì che tutte le transazioni relative ai frammenti tornino a quel nome specifico da invertire ("popup") e a eventuali frammenti aggiunti da eliminare e rimuovere, ma differisce in alcuni aspetti importanti:
saveBackStack()
è sempre inclusivo.- A differenza di
popBackStack()
, che inserirà tutte le transazioni nello stack posteriore se il nome specificato non viene trovato nello stack precedente o se viene fornito un nome null,saveBackStack()
non fa nulla se in precedenza non hai eseguito il commit di una transazione di frammento utilizzandoaddToBackStack()
con quel nome esatto e diverso da null. - Lo stato di tutti i frammenti aggiunti da queste transazioni viene salvato. Ciò significa che lo stato di visualizzazione di ogni frammento è archiviato, che viene richiamato
onSaveInstanceState()
di ogni frammento e che lo stato viene ripristinato, nonché tutte le istanzeViewModel
associate ai frammenti vengono conservate (e non viene chiamatoonCleared()
).
Le transazioni di frammento che possono essere utilizzate con saveBackStack()
devono soddisfare determinati criteri:
- Ogni transazione di frammento deve utilizzare
setReorderingAllowed(true)
per garantire che le transazioni possano essere ripristinate come singola operazione atomica. - L'insieme di transazioni salvato deve essere indipendente (ovvero, non deve fare riferimento esplicito ad alcun frammento al di fuori di questo insieme di transazioni) per garantire di poter essere ripristinato in qualsiasi momento, indipendentemente dalle modifiche apportate allo stack precedente nel tempo intermedio.
- Nessun frammento salvato può essere un frammento conservato o avere un frammento conservato nel loro set transitivo di frammenti figlio per garantire che
FragmentManager
non restituisca alcun riferimento ai frammenti salvati dopo il salvataggio dello stack posteriore.
Simile a saveBackStack()
, restoreBackStack()
non comporta nulla se non hai precedentemente chiamato saveBackStack()
con lo stesso nome. (b/80029773)
Fragment StrictMode
Le API FragmentStrictMode
forniscono controlli di runtime che consentono di verificare che l'app o le librerie che utilizzi non chiamino API di frammenti deprecate. Quando viene rilevata una violazione, puoi scegliere di stampare un messaggio di log, attivare un listener personalizzato o causare l'arresto anomalo della tua app. L'FragmentStrictMode.Policy
che controlla quali controlli sono attivi e quali "sanzioni" possono essere attivate su un FragmentManager
con il nuovo metodo setStrictModePolicy()
. Questo criterio si applica a questo FragmentManager
e in modo transitivo a qualsiasi gestore di frammenti secondari che non impostano un proprio criterio univoco. (#123, #131, #150, b/143774122)
detectFragmentReuse()
rileva se un'istanzaFragment
rimossa in precedenza viene nuovamente aggiunta aFragmentManager
. Non devi mai interagire o conservare un riferimento a un'istanzaFragment
dopo che è stata eliminata e rimossa da un'istanzaFragmentManager
. (n. 142, b/153738653)detectFragmentTagUsage()
rileva quando utilizzi il tag<fragment>
nel file XML di layout. Dovresti sempre usareFragmentContainerView
per gonfiare i frammenti nel layout. (n. 141, b/153738235)detectWrongFragmentContainer()
rileva quando aggiungi un frammento a un container che non èFragmentContainerView
. Devi sempre utilizzareFragmentContainerView
come contenitore per i frammenti nel layout. (n. 146, b/181137036)detectRetainInstanceUsage()
rileva quando utilizzi le APIsetRetainInstance()
ogetRetainInstance()
deprecate. (n. 140, b/153737954)detectSetUserVisibleHint()
rileva quando utilizzi l'APIsetUserVisibleHint()
deprecata. (n. 136, b/153738974)detectTargetFragmentUsage()
rileva quando utilizzi le API deprecatesetTargetFragment()
,getTargetFragment()
ogetTargetRequestCode()
. (n. 139, b/153737745)
Modifiche alle API
- L'API sperimentale di
FragmentManager.enableNewStateManager(boolean)
è stata rimossa e il nuovo gestore di stato è ora l'unica opzione disponibile. (I90036, b/162776418) FragmentScenario
ora implementaCloseable
, consentendoti di utilizzarlo con il metodouse
di Kotlin o con try-with-resources. (n. 121, b/143774122)
Nuovi controlli lint
- Il controllo lint
UseGetLayoutInflater
ora avvisa quando utilizziLayoutInflater.from(Context)
all'interno di unDialogFragment
. Devi sempre usare il metodogetLayoutInflater()
del frammento di dialogo per ottenere l'appropriato perLayoutInflater
. (n. 156, b/170781346) - Il controllo del lint
DialogFragmentCallbacksDetector
ora avvisa quando chiamisetOnCancelListener
osetOnDismissListener
nel metodoonCreateDialog()
diDialogFragment
. Questi listener sono di proprietà diDialogFragment
stesso e devi eseguire l'override dionCancel()
eonDismiss()
per ricevere questi callback. (#171, b/181780047, b/187524311)
Correzioni di bug
- Da Frammento 1.3.4: è stata corretta una regressione introdotta in Frammento
1.3.3
quando si utilizza l'APIViewTreeViewModelStoreOwner.get()
conViewModelProvider
o il metodo Jetpack Compose diviewModel()
all'interno di un frammento. Questi casi d'uso ora utilizzano correttamente ilViewModelProvider.Factory
fornito dal tuo frammento se sostituiscegetDefaultViewModelProviderFactory()
(come fa i frammenti annotati@AndroidEntryPoint
quando si utilizza Hilt). Se non esegui l'override di questo metodo, come valore di fabbrica predefinito viene creato unSavedStateViewModelFactory
che salva e ripristina il proprio stato insieme alla visualizzazione del frammento. (I5cbfa, b/186097368). - Da Frammento 1.3.4: quando utilizzi
FragmentContainerView
sull'API 29, gli inset non verranno più inviati a tempo indeterminato, risolvendo i problemi con le istanzeBottomNavigationBar
eFloatingActionButton
. (I1bb78, b/186012452). - A partire dal Frammento 1.3.4: ora puoi recuperare il Parcelable dal bundle dei risultati del frammento dopo la morte del processo. (I65932, b/187443158)
- Da Frammento 1.3.4: quando si esegue una transizione di elementi condivisi in un ViewGroup, se
transitionGroup
è impostato su false per il gruppo View, ora la transizione avviene correttamente. (I99675)
Contributi esterni
- Grazie a simonschiller per aver eseguito l'implementazione
FragmentScenario
diCloseable
. (n. 121, b/143774122) - Grazie a simonschiller per aver aggiunto tutta l'API
FragmentStrictMode
per questa release. (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, - Grazie tatocaster per aver aggiunto il controllo lint
UseGetLayoutInflater
. (n. 156, b/170781346) - Grazie tatocaster per aver aggiunto il controllo lint
DialogFragmentCallbacksDetector
. (#171, b/181780047)
Versione 1.3
Versione 1.3.6
21 luglio 2021
androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
e androidx.fragment:fragment-testing:1.3.6
vengono rilasciati. La versione 1.3.6 contiene questi commit.
Correzioni di bug
- Da Frammento
1.4.0-alpha03
:FragmentManager
non si arresta più in modo anomalo quando tenti di nascondere un frammento di rimozione. (I573dd, b/183634730). - La vista del frammento è ora impostata correttamente su
GONE
quando si usahide()
quando la vista principale hatransitionGroup=”true”
impostato. (aosp/1766655, b/193603427) - Ora
FragmentActivity
sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita di cui esegue l'override. (I6db7a).
Aggiornamento delle dipendenze
- Da Frammento
1.3.6
: i frammenti ora dipendono dall'attività1.2.4
(I3a66c)
Versione 1.3.5
16 giugno 2021
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
e androidx.fragment:fragment-testing:1.3.5
vengono rilasciati. La versione 1.3.5 contiene questi commit.
Correzioni di bug
- Correzione di una regressione nelle transizioni di elementi condivisi introdotta in Fragment
1.3.4
da aosp/1679887. I frammenti ora gestiscono correttamente i gruppi di transizione (impostati direttamente tramitetransitionGroup="true"
o indirettamente tramitetransitionName
obackground
) e gli elementi condivisi non genereranno piùIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304).
Versione 1.3.4
18 maggio 2021
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
e androidx.fragment:fragment-testing:1.3.4
vengono rilasciati. La versione 1.3.4 contiene questi commit.
Correzioni di bug
- È stata corretta una regressione introdotta in Frammento
1.3.3
quando si utilizzava l'APIViewTreeViewModelStoreOwner.get()
conViewModelProvider
o il metodo Jetpack Compose diviewModel()
all'interno di un frammento quando si utilizzava Hilt. Questi casi d'uso ora utilizzano correttamente ilViewModelProvider.Factory
fornito dal tuo frammento se sostituiscegetDefaultViewModelProviderFactory()
(come fanno i frammenti annotati@AndroidEntryPoint
). Se non esegui l'override di questo metodo, come valore di fabbrica predefinito viene creato unSavedStateViewModelFactory
che salva e ripristina il proprio stato insieme alla visualizzazione del frammento. (I5cbfa, b/186097368). - Quando utilizzi
FragmentContainerView
nell'API 29, i set non verranno più inviati a tempo indeterminato, risolvendo i problemi relativi alle istanzeBottomNavigationBar
eFloatingActionButton
. (I1bb78, b/186012452). - Ora puoi recuperare la particella dal bundle dei risultati del frammento dopo la morte del processo. (I65932, b/187443158)
- Durante una transizione di elementi condivisi in un ViewGroup, se il valore
transitionGroup
di ViewGroup è impostato su false, la transizione verrà eseguita correttamente. (I99675)
Versione 1.3.3
21 aprile 2021
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
e androidx.fragment:fragment-testing:1.3.3
vengono rilasciati. La versione 1.3.3 contiene questi commit.
Nuove funzionalità
- L'uso di
SavedStateViewModelFactory
ora funziona quando viene utilizzato con l'elementoSavedStateRegistryOwner
restituito utilizzandoViewTreeSavedStateRegistryOwner.get()
con la vista del frammento. (I21acf, b/181577191)
Correzioni di bug
- È stata corretta una regressione introdotta in Frammento
1.3.2
che causava la mancata esecuzione delle animazionipopEnter
quando si apriva un elementoFragmentTransaction
che includeva un'operazionesetPrimaryNavFragment
, come quelle utilizzate daNavHostFragment
. (I38c87, b/183877426) FragmentContainerView
ora assicura che ogniFragment
venga inviato un nuovo set diWindowInsets
, assicurando che ogni frammento possa ora consumare gli insiemi in modo indipendente. (I63f68, b/172153900)- Ora
DialogFragment
gestisce correttamente i casi in cui un frammento secondario viene aggiunto a un contenitore che ha lo stesso ID di un contenitore nella classeDialog
personalizzata, risolvendo i problemi di gerarchia delle visualizzazioni quando vengono riutilizzati gli ID utilizzati internamente da finestre di dialogo comeBottomSheetDialog
. (Ie6279, b/180021387) FragmentManager.dump()
ora fa correttamente il rientro del primo frammento nell'elenco dei frammenti attivi. (If5c33, b/183705451).
Nuove correzioni di bug per il gestore di stato
- Il nuovo gestore dello stato dei frammenti gestisce correttamente le transizioni di uscita con le operazioni di occultamento. (I9e4de, b/184830265).
Versione 1.3.2
24 marzo 2021
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
e androidx.fragment:fragment-testing:1.3.2
vengono rilasciati. La versione 1.3.2 contiene questi commit.
Nuove correzioni di bug per il gestore di stato
- Quando esegui insieme le operazioni
popBackStack()
ecommit()
, nell'ultima operazione verrà impostata la direzione di tutte le animazioni anziché eseguire alcune animazioni pop e alcune animazioni di Invio. (I7072e, b/181142246). - Il nome della transizione delle viste all'interno di una gerarchia di elementi condivisi non sarà più cancellato quando si esegue una transizione di elementi condivisi. (I4d4a6, b/179934757).
Aggiornamenti delle dipendenze
- Il frammento ora dipende dall'Attività 1.2.2 e viene risolto un problema relativo al controllo lint
InvalidFragmentVersionForActivityResult
dell'attività quando viene utilizzato il frammento 1.3.1 o versioni successive. - Il frammento ora dipende dal ciclo di vita 2.3.1.
Versione 1.3.1
10 marzo 2021
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
e androidx.fragment:fragment-testing:1.3.1
vengono rilasciati. La versione 1.3.1 contiene questi commit.
Nuove funzionalità
- Ora le finestre di dialogo in
DialogFragment
possono accedere ai proprietari ViewTree tramite il loro DecorView, garantendo cheDialogFragment
possa essere utilizzato conComposeView
. (Ib9290, b/180691023).
Correzioni di bug
- I frammenti gonfiati in un'attività già
RESUMED
utilizzando FragmentContainerView vengono ora visualizzati correttamente dopo una modifica della configurazione. (Ie14c8, b/180538371). - Non c'è più un
}
aggiuntivo alla fine del frammentotoString()
(I54705, b/177761088) - I metodi sostituiti in FragmentActivity ora ereditano correttamente il metodo di base javaDoc (I736ce, b/139548782)
- I documenti per
setFragmentResult
esetFragmentResultListener
hanno aggiornato la documentazione relativa ai parametri per indicare che non accetta più valori nulli (I990ba, b/178348386)
Nuove correzioni di bug per il gestore di stato
- Correzione di una perdita di memoria nei frammenti causata da
mFocusedView
(Ib4e9e, b/179925887) - I frammenti ora chiamano correttamente
onCreateOptionsMenu
quando utilizzano le transazioni Mostra/Nascondi (I8bce8, b/180255554) - I frammenti secondari con transizioni che iniziano prima della disposizione del frammento raggiungeranno correttamente
RESUMED
(Ic11e6, b/180825150) - I frammenti gonfiati utilizzando il tag
<fragment>
ora arriveranno sempre aRESUMED
(I452ac, (I9fa49)
Aggiornamenti delle dipendenze
- Il frammento 1.3.1 dipende dall'Attività
1.2.1
. (I557b9)
Versione 1.3.0
10 febbraio 2021
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
e androidx.fragment:fragment-testing:1.3.0
vengono rilasciati. La versione 1.3.0 contiene questi commit.
Importanti modifiche dalla versione 1.2.0
- Nuovo State Manager: una significativa riscrittura degli elementi interni di
FragmentManager
ha risolto numerosi problemi relativi all'invio di eventi del ciclo di vita, animazioni e transizioni e alla modalità di gestione dei frammenti posticipati. Integrazione dell'API Activity Result: è stato aggiunto il supporto dell'API
ActivityResultRegistry
introdotta nell'Attività1.2.0
per gestire i flussistartActivityForResult()
+onActivityResult()
erequestPermissions()
+onRequestPermissionsResult()
senza eseguire l'override dei metodi nel frammento, oltre a fornire hook per testare questi flussi. Consulta la pagina aggiornata Ottenere un risultato da un'attività.- Questa release corregge una serie di problemi relativi a codici di richieste non validi e all'invio di richieste di autorizzazione, che impediscono all'API Activity Result di funzionare con le versioni precedenti di
FragmentActivity
. Per utilizzare le API dei risultati di attività in unFragmentActivity
oAppCompatActivity
, devi eseguire l'upgrade al frammento 1.3.0.
- Questa release corregge una serie di problemi relativi a codici di richieste non validi e all'invio di richieste di autorizzazione, che impediscono all'API Activity Result di funzionare con le versioni precedenti di
API Fragment Result: è stato aggiunto il supporto per il passaggio dei risultati tra due frammenti tramite nuove API su
FragmentManager
. Funziona per i frammenti di gerarchia (padre/figlio), DialogFragments e frammenti in Navigazione e garantisce che i risultati vengano inviati solo al frammento quando è almenoSTARTED
. Le API del frammento di destinazione sono state ritirate a favore di queste nuove API. Consulta la sezione Ottenere risultati utilizzando l'API Fragment Result.FragmentOnAttachListener
: il callbackonAttachFragment()
suFragmentActivity
eFragment
è stato ritirato. È stato aggiunto un nuovoFragmentOnAttachListener
per fornire un'alternativa più flessibile, che consente la delega dionAttachFragment()
per gli ascoltatori separati e testabili e il supporto per l'aggiunta di un listener a FragmentManagers diverso dal tuo elemento secondario diretto FragmentManager.FragmentScenario
Miglioramenti: la classeFragmentScenario
dell'elementofragment-testing
è stata riscritta in Kotlin e ha ricevuto una serie di miglioramenti:FragmentScenario
ora utilizzasetMaxLifecycle()
per implementaremoveToState()
, garantendo un comportamento coerente a tutti i livelli API e disaccoppiando lo stato del frammento dall'attività sottostante.FragmentScenario
ora supporta l'impostazione di unLifecycle.State
iniziale per supportare l'asserzione dello stato del frammento prima di passare a ogniLifecycle.State
per la prima volta.- Ora esiste un'alternativa all'API
FragmentScenario
dionFragment
sotto forma di metodo di estensione reificata KotlinwithFragment
che ti consente di restituire un valore. In particolare, ripropone le eccezioni sollevate nel blocco specificato.
Assistenza
ViewTree
: oraFragment
supporta le APIViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
eViewTreeSavedStateRegistryOwner
aggiunte in Ciclo di vita2.3.0
e SavedState1.1.0
in modo da restituire il frammento comeViewModelStoreOwner
eSavedStateRegistryOwner
eLifecycleOwner
associati al ciclo di vita della vista del frammento quando si utilizza unView
all'interno di unFragment
.TRANSIT_
modifiche all'animazione: gli effetti predefiniti del frammento,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
eTRANSIT_FRAGMENT_FADE
, ora utilizzanoAnimator
anzichéAnimation
. Le risorse utilizzate per creare questi animatori ora sono private.Ritiro di
setRetainInstance()
: il metodosetRetainInstance()
su Fragments è stato ritirato. Con l'introduzione dei ViewModels, gli sviluppatori hanno a disposizione un'API specifica per la conservazione dello stato che può essere associata ad attività, frammenti e grafici di navigazione. In questo modo gli sviluppatori possono utilizzare un frammento normale e non conservato e mantenere separato lo stato specifico che vogliono conservare, evitando una fonte comune di perdite, mantenendo al contempo le proprietà utili di una singola creazione e eliminazione dello stato mantenuto (ovvero il costruttore diViewModel
e il callbackonCleared()
che riceve).Ritiro dell'adattatore ViewPager 1: con il rilascio di ViewPager2
1.0.0
, le classiFragmentPagerAdapter
eFragmentStatePagerAdapter
per l'interazione conViewPager
sono state ritirate. Vedi Eseguire la migrazione da ViewPager a ViewPager2.
Versione 1.3.0-rc02
27 gennaio 2021
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
e androidx.fragment:fragment-testing:1.3.0-rc02
vengono rilasciati. La versione 1.3.0-rc02 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui un elemento
DialogFragment
principale veniva visualizzato sopra un elemento secondarioDialogFragment
dopo una modifica della configurazione; i frammenti della finestra di dialogo secondaria ora appaiono sempre sopra un frammento della finestra di dialogo principale. (I30806, b/177439520) - È stato risolto il problema per cui l'esecuzione di un'operazione
hide
con unaAnimation
causava la visualizzazione del frammento nascosto alla fine dell'animazione. (I57e22, b/175417675) - I frammenti con transizioni aggiunte prima del collegamento della gerarchia delle visualizzazioni ora raggiungono correttamente
RESUMED
. (I1fc1d, b/177154873).
Nuove correzioni di bug per il gestore di stato
- La vista del frammento
Lifecycle
ora gestisce correttamente i casi in cui la vista del frammento viene eliminata prima cheLifecycle
raggiunga il valoreCREATED
, evitando le eccezioni che indicano "nessun evento inattivo da INIZIALIZZATO". (eda2bd, b/176138645) - I frammenti che utilizzano un elemento
Animator
ora vengono visualizzati nell'ordine corretto quando utilizziFragmentContainerView
. (Id9aa3, b/176089197)
Versione 1.3.0-rc01
16 dicembre 2020
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
e androidx.fragment:fragment-testing:1.3.0-rc01
vengono rilasciati. La versione 1.3.0-rc01 contiene questi commit.
Correzioni di bug
onPrepareOptionsMenu()
ora segue la stessa logica dionCreateOptionsMenu()
e non viene più chiamato quando un frammento padre chiamasetMenuVisibility(false)
. (Id7de8, b/173203654)
Nuove correzioni di bug per il gestore di stato
- È stato risolto il problema di perdita e artefatto visivo durante l'aggiunta
di un frammento con
Animation
aFragmentContainerView
e l'interruzione dell'aggiunta con un'operazione pop. (I952d8). - Risolto il problema per cui la vista del frammento restava nella gerarchia delle visualizzazioni se veniva sostituita durante i metodi
onCreate()
oonViewCreated()
. (I8a7d5). - Ora lo stato attivo viene ripristinato correttamente sulle viste principali dei frammenti quando vengono ripristinate. (Ifc84b).
- La combinazione delle operazioni pop e di sostituzione nella stessa transazione di frammento mostrerà le animazioni corrette (Ifd4e4, b/170328691)
Versione 1.3.0-beta02
2 dicembre 2020
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
e androidx.fragment:fragment-testing:1.3.0-beta02
vengono rilasciati. La versione 1.3.0-beta02 contiene questi commit.
Nuove funzionalità
FragmentScenario
è stato completamente convertito in Kotlin, mantenendo la compatibilità di origine e binaria tramite l'utilizzo delle interfacce funzionali di Kotlin 1.4 perFragmentAction
. (I19d31).
Modifiche del comportamento
- I FragmentContainerView che non gonfiano un frammento utilizzando l'attributo
class
oandroid:name
ora possono essere utilizzati al di fuori diFragmentActivity
. (Id4397, b/172266337) - Se si tenta di impostare il ciclo di vita massimo di un frammento su
DESTROYED
ora verrà generato un elementoIllegalArgumentException
(Ie7651, b/170765622) - L'inizializzazione di uno scenario frammento con uno stato
DESTROYED
ora genererà unIllegalArgumentException
(I73590, b/170765622)
Nuove correzioni di bug per il gestore di stato
- Risolto il problema per cui la vista non raggiungeva lo stato finale se si interrompeva una transizione di frammento che utilizzava un'opzione
Animator
o una delle opzioniTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Risolto un problema che impediva l'eliminazione corretta dei frammenti con un elemento
Animation
in uscita. (I83d65). - L'uscita dai frammenti i cui effetti sono stati invertiti ora vengono annullati correttamente e riavviano con l'effetto entrante. (I62226, b/167092035)
- Risolto il problema per cui l'uscita
Animator
dihide()
non veniva eseguita. (Id7ffe) - Ora i frammenti vengono visualizzati correttamente quando vengono posticipati e avviati immediatamente. (Ie713b, b/170022857).
- I frammenti che rimuovono la visualizzazione con stato attivo durante un'animazione non tenteranno più di ripristinare lo stato attivo nella vista scollegata una volta raggiunti
RESUMED
(I38c65, b/172925703)
Contributi esterni
- Ora
FragmentFactory
memorizza nella cache separatamente le classi di frammenti per diverse istanzeClassLoader
. Grazie Simon Schiller! (n. 87, b/113886460)
Versione 1.3.0-beta01
1° ottobre 2020
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
e androidx.fragment:fragment-testing:1.3.0-beta01
vengono rilasciati. La versione 1.3.0-beta01 contiene questi commit.
Nuove funzionalità
setMaxLifecycle()
ora supporta l'impostazione dello statoLifecycle
suINITIALIZING
, purché il frammento non sia stato spostato inCREATED
. (b/159662173)
Modifiche alle API
- Esegui l'upgrade di Androidx per utilizzare Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Modifiche del comportamento
- I file di risorse di frammenti sono stati impostati correttamente come privati. (aosp/1425237)
Correzioni di bug
- I frammenti aumentati utilizzando il tag
<fragment>
attenderanno correttamente che le relative visualizzazioni vengano aggiunte a un contenitore prima di passare a AVVIATO (I02f4c) - I frammenti visibili e poi da
setMaxLifecycle()
aCREATED
ora eseguono correttamente gli effetti di uscita. (b/165822335) - La rimozione di un frammento scollegato che non viene aggiunto allo stack posteriore non causa più una perdita di memoria. Per gentile concessione di Nicklas Ansman Giertz. (b/166489383)
- I frammenti attivi ora avranno sempre un valore
FragmentManager
non null, mentre i frammenti con un valoreFragmentManager
diverso da null verranno sempre considerati attivi. (aosp/1422346). - Gli effetti predefiniti del frammento,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
eTRANSIT_FRAGMENT_FADE
, ora utilizzanoAnimator
anzichéAnimation
. (b/166155034)
Nuove correzioni di bug per il gestore di stato
- Ora i frammenti ripristinano lo stato attivo della visualizzazione prima dell'avvio dell'animazione. (Icc256)
- I frammenti che hanno solo una transizione di elementi condivisi ora completano correttamente gli effetti speciali, il che significa che passano allo stato finale (Iaebc7, b/166658128)
- Prima dell'eliminazione, le viste frammenti vengono sempre rimosse dal container. (Id5876)
- Il nuovo gestore di stato ora rimuove in modo coerente la visualizzazione del frammento uscita prima di aggiungere quella entrante. (I41a6e).
- Le modifiche esplicite alla visibilità di una visualizzazione frammento vengono ora rispettate dal nuovo gestore di stato. Ciò significa che se imposti la visualizzazione di un frammento di entrata su
INVISIBLE
prima dell'inizio dell'animazione, in realtà rimarrà invisibile. (b/164481490) - I frammenti ora danno la priorità a
Animators
suAnimations
, il che significa che un frammento con entrambi eseguirà soloAnimator
e ignoreràAnimation
. (b/167579557) - Il nuovo gestore di stato non fa più lampeggiare i frammenti quando si utilizzano le animazioni. (b/163084315)
Problema noto
Quando utilizzi il nuovo gestore di stato, se premi Indietro durante l'inserimento di un effetto speciale anziché tornare al frammento precedente, il vecchio frammento non viene mai aggiunto e viene quindi visualizzata una schermata vuota. (b/167259187, b/167092035, b/168442830)
Versione 1.3.0-alpha08
19 agosto 2020
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
e androidx.fragment:fragment-testing:1.3.0-alpha08
vengono rilasciati. La versione 1.3.0-alpha08 contiene questi commit.
Nuovo State Manager
Questa release include un importante refactoring della gestione interna dello stato di FragmentManager
che influisce sull'invio di metodi di ciclo di vita, animazioni e transizioni e modalità di gestione delle transazioni posticipate. Questa opzione è abilitata per impostazione predefinita. Per maggiori dettagli, vedi il post del blog Fragments: Rebuilding the Internals. (b/139536619, b/147749580)
- È possibile usare un'API sperimentale in
FragmentManager.enableNewStateManager(boolean)
per controllare se FragmentManager utilizza il nuovo gestore di stato. (I7b6ee)
I seguenti problemi vengono risolti solo quando si utilizza il nuovo gestore di stato:
- Il frammento precedente di un'operazione
replace
è stato arrestato correttamente prima dell'avvio del nuovo frammento. (b/161654580) - I frammenti ora impediscono più animazioni concorrenti sugli stessi frammenti, evitando i casi in cui un elemento
Animation
sostituisce tutti gli effettiTransition
oppureAnimator
eTransition
su un singolo frammento vengono eseguiti entrambi. (b/149569323) enterTransition
eexitTranstion
di tutti i frammenti in entrata e in uscita vengono ora eseguiti anziché solo l'ultimo frammento di ingresso e il primo frammento uscente. (b/149344150)- I frammenti posticipati non rimangono più bloccati allo stato
CREATED
, ma si spostano invece inSTARTED
con altri frammenti. (b/129035555) - Risolto il problema per cui
FragmentManager
eseguiva operazioni nell'ordine sbagliato se si combinano una transazione riordinata posticipata e una transazione non riordinata. (b/147297731) - Se si estrae più frammenti contemporaneamente, i frammenti intermedi non saranno più temporaneamente visibili quando si rinviano i frammenti. (b/37140383)
FragmentManager
ora restituisce i frammenti corretti quando chiamifindFragmentById()
ofindFragmentByTag()
dall'interno del callbackonAttachFragment()
. (b/153082833)- I frammenti non chiamano più
onCreateView()
sui frammenti che vengono eliminati quando viene rinviato il frammento che li sostituisce. (b/143915710) - Il messaggio di errore che appare durante il tentativo di combinare le istanze
Transition
del frameworkTransition
e di AndroidX menziona ora il frammento con la transizione non valida. (b/155574969)
Modifiche del comportamento
- Ora puoi chiamare
launch()
su unActivityResultLauncher
nel metodo del ciclo di vitaonCreate()
di un frammento. (b/161464278) - La chiamata a
registerForActivityResult()
dopoonCreate()
ora genera un'eccezione che indica che questa operazione non è consentita anziché la mancata generazione di risultati dopo una modifica della configurazione. (b/162255449) FragmentActivity
ora usa l'APIOnContextAvailableListener
introdotta nella sezione Attività1.2.0-alpha08
per ripristinare lo stato diFragmentManager
. Qualsiasi listener aggiunto alle sottoclassi diFragmentActivity
verrà eseguito dopo questo listener. (I513da)
Correzioni di bug
- Gli elementi
ActivityOptions
trasmessi utilizzandostartIntentSenderForResult()
vengono ora rispettati. (b/162247961)
Problema noto
- Quando utilizzi il nuovo gestore di stato, l'impostazione diretta della visibilità della vista principale del frammento dopo il giorno
onViewCreated()
e prima del giornoonResume()
comporta l'override della visibilità impostata daFragmentManager
, che controlla la visibilità della vista principale. Come soluzione alternativa, dovresti sempre utilizzare le operazionihide()
eshow()
per modificare la visibilità del frammento. (b/164481490)
Versione 1.3.0-alpha07
22 luglio 2020
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
e androidx.fragment:fragment-testing:1.3.0-alpha07
vengono rilasciati. La versione 1.3.0-alpha07 contiene questi commit.
Nuove funzionalità
FragmentScenario
ora supporta l'impostazione di uno stato del ciclo di vita inizialeCREATED
,STARTED
oRESUMED
anziché spostare sempre il frammento sullo statoRESUMED
. (b/159662750)- È stata aggiunta un'alternativa all'API
FragmentScenario
dionFragment
sotto forma di metodo di estensione reificata KotlinwithFragment
che ti consente di restituire un valore. In particolare, ripropone le eccezioni sollevate nel blocco specificato. (b/158697631)
Modifiche del comportamento
FragmentScenario
ora utilizzasetMaxLifecycle()
per implementaremoveToState()
, garantendo un comportamento coerente a tutti i livelli API e disaccoppiando lo stato del frammento dall'attività sottostante. (b/156527405)- Il valore
SavedStateRegistryOwner
restituito daViewTreeSavedStateRegistryOwner
è ora associato al ciclo di vita della visualizzazione frammento. Questo garantisce che lo stato venga salvato e ripristinato contemporaneamente alla visualizzazione del frammento. (b/158503763)
Correzioni di bug
- I frammenti ora attendono il collegamento della vista del frammento prima di chiamare
ViewCompat.requestApplyInsets()
, evitando i casi in cui la richiesta integrata veniva ignorata. (b/158095749) - Chiamando
clearFragmentResultListener
ora si cancella correttamente l'osservatore del ciclo di vita. (b/159274993)
Versione 1.3.0-alpha06
10 giugno 2020
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
e androidx.fragment:fragment-testing:1.3.0-alpha06
vengono rilasciati. La versione 1.3.0-alpha06 contiene questi commit.
Nuove funzionalità
- Il callback
onAttachFragment()
suFragmentActivity
eFragment
è stato ritirato. È stato aggiunto un nuovoFragmentOnAttachListener
per fornire un'alternativa più flessibile, che consente la delega dionAttachFragment()
a listener testabili e separati e il supporto per l'aggiunta di un listener a FragmentManagers oltre al tuo elemento secondario diretto FragmentManager. (I06d3d)
Correzioni di bug
- Per i frammenti principali viene ora ripristinato lo stato di visualizzazione prima dei relativi frammenti figlio, in modo da risolvere un problema di ordinamento visivo dopo una modifica alla configurazione quando un
DialogFragment
mostrava un altroDialogFragment
come frammento figlio. (b/157195715) - Risolto il problema per cui il controllo lint
UseRequireInsteadOfGet
non gestiva correttamente gli utilizzi concatenati degli operatori?.
e!!
. (b/157677616)
Versione 1.3.0-alpha05
20 maggio 2020
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
e androidx.fragment:fragment-testing:1.3.0-alpha05
vengono rilasciati. La versione 1.3.0-alpha05 contiene questi commit.
Nuove funzionalità
- Aggiunto il supporto per
ViewTreeViewModelStoreOwner
da Ciclo di vita2.3.0-alpha03
eViewTreeSavedStateRegistryOwner
da SaveState1.1.0-alpha01
quando si utilizza unView
in unFragment
. (aosp/1297993, aosp/1300264)
Modifiche alle API
- Le API
setFragmentResult()
esetFragmentResultListener()
ora accettano rispettivamente un valoreBundle
e unFragmentResultListener
non null. Per cancellare esplicitamente un risultato o un listener impostati in precedenza, utilizza i nuovi metodiclearFragmentResult()
eclearFragmentResultListener()
. (b/155416778) - Le estensioni Kotlin
setFragmentResultListener()
che richiedono una lambda ora sono contrassegnate comeinline
. (b/155323404)
Modifiche del comportamento
- Gli elementi
startActivityForResult()
,startIntentSenderForResult()
erequestPermissions
precedentemente deprecati suFragment
ora utilizzano internamenteActivityResultRegistry
, rimuovendo così la limitazione relativa all'uso dei soli bit inferiori (inferiori a0xFFFF
) per i codici di richiesta quando utilizzi queste API. (b/155518741)
Aggiornamenti alla documentazione
- È stata espansa la documentazione sui costruttori
Fragment(@LayoutRes int)
eDialogFragment(@LayoutRes int)
per chiarire che dovrebbero essere richiamati dal costruttore nessun argomento delle sottoclassi quando si utilizza il costruttoreFragmentFactory
predefinito. (b/153042497)
Versione 1.3.0-alpha04
29 aprile 2020
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
e androidx.fragment:fragment-testing:1.3.0-alpha04
vengono rilasciati. La versione 1.3.0-alpha04 contiene questi commit.
Nuove funzionalità
- Aggiunto il supporto per il passaggio dei risultati tra due frammenti tramite nuove API su
FragmentManager
. Funziona per i frammenti di gerarchia (padre/figlio), DialogFragments e frammenti in Navigazione e garantisce che i risultati vengano inviati solo al frammento quando è almenoSTARTED
. (b/149787344)
Modifiche alle API
- Le API del frammento di destinazione sono state ritirate. Per passare i dati tra i frammenti, devi usare le nuove API Fragment Result. (b/149787344)
- Le API
startActivityForResult()
/onActivityResult()
erequestPermissions()
/onRequestPermissionsResult()
su Fragment sono state ritirate. Utilizza le API dei risultati delle attività. (aosp/1290887) - Modifica di interruzione da Attività
1.2.0-alpha04
: il metodoprepareCall()
è stato rinominato inregisterForActivityResult()
. (aosp/1278717)
Correzioni di bug
- Il valore
getViewLifecycleOwner()
del frammento viene ora arrestato prima della chiamata dionSaveInstanceState()
, rispecchiando il comportamento del ciclo di vita del frammento. (b/154645875) - Se chiami
setMenuVisibility(false)
su un frammento, ora viene modificata correttamente la visibilità dei menu forniti dai relativi frammenti figlio. (b/153593580) - È stato corretto un
illegalStateException
durante l'aggiunta di un frammento alla gerarchia di viste diDialogFragment
conFragmentContainerView
. (b/154366601) - Il metodo
getDefaultViewModelProviderFactory()
sui frammenti non si arresta più in modo anomalo quando i frammenti vengono ospitati al di fuori di un'attività. (b/153762914)
Versione 1.3.0-alpha03
1° aprile 2020
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
e androidx.fragment:fragment-testing:1.3.0-alpha03
vengono rilasciati. La versione 1.3.0-alpha03 contiene questi commit.
Modifiche alle API
- I metodi
prepareCall
suFragment
ora sonofinal
. (b/152439361)
Correzioni di bug
- È stata corretta una regressione introdotta nel Frammento
1.3.0-alpha02
quando si utilizzavaBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - È stato risolto l'arresto anomalo durante l'utilizzo di
prepareCall
da un frammento dopo una modifica alla configurazione. (b/152137004) - Risolto il problema per cui le transizioni degli elementi condivisi e delle uscite vengono ignorate quando si utilizza
setTargetFragment()
. (b/152023196) - Da Fragment
1.2.4
: sono state aggiornate le regole relative al frammento ProGuard per consentire l'offuscamento dei frammenti conservati. (b/151605338) - Da Fragment
1.2.4
: disabilitata la regola LintFragmentLiveDataObserve
nelle classiDialogFragment
poiché il loro ciclo di vita e il loro ciclo di vita delle visualizzazioni sono sempre sincronizzati, il che ne rende sicuro l'utilizzo dithis
oviewLifecycleOwner
durante le chiamate aobserve
. (b/151765086)
Modifiche delle dipendenze
- I frammenti dipendono dall'Attività
1.2.0-alpha03
, che ha apportato miglioramenti significativi all'API Activity Result introdotta nell'Attività1.2.0-alpha02
.
Versione 1.3.0-alpha02
18 marzo 2020
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
e androidx.fragment:fragment-testing:1.3.0-alpha02
vengono rilasciati. La versione 1.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- Aggiunto il supporto per l'API
ActivityResultRegistry
introdotto in Attività1.2.0-alpha02
per gestire i flussistartActivityForResult()
+onActivityResult()
erequestPermissions()
+onRequestPermissionsResult()
senza eseguire l'override dei metodi nel frammento, oltre a fornire hook per testare questi flussi. Consulta la pagina aggiornata Ottenere un risultato da un'attività. (b/125158199)
Modifiche alle API
DialogFragment
ora fornisce un costruttore che prende un@LayoutRes
che indica il layout cheonCreateView()
dovrebbe gonfiare per impostazione predefinita. (b/150327080)- Il metodo
onActivityCreated()
è ora deprecato. Il codice che tocca la vista del frammento deve essere eseguito inonViewCreated()
(che viene chiamato immediatamente prima dionActivityCreated()
), mentre l'altro codice di inizializzazione deve essere inonCreate()
. Per ricevere un callback specificamente quando l'attivitàonCreate()
è completa, è necessario registrare unLifeCycleObserver
sulLifecycle
dell'attività inonAttach()
e rimuoverlo dopo aver ricevuto il callbackonCreate()
. (b/144309266)
Correzioni di bug
- Da Frammento
1.2.3
: è stato corretto un bug inDialogFragment
che causavaStackOverflowError
durante la chiamata agetLayoutInflater()
dall'interno dionCreateDialog()
. (b/117894767, aosp/1258664) - Da Fragment
1.2.3
: è stato ridotto l'ambito delle regole ProGuard incluse in Fragment per garantire che le classi Fragment inutilizzate possano essere rimosse. (b/149665169) - Da Frammento
1.2.3
: sono stati corretti i falsi positivi nel controllo lintUseRequireInsteadOfGet
quando si utilizzava un nome di variabile locale con shadowing per il nome della proprietà Kotlin. (b/149891163) - Da Frammento
1.2.3
:FragmentContainerView
non genera piùUnsupportedOperationException
per aver utilizzato il costruttore errato nell'anteprima del layout. (b/149707833)
Problemi noti
BottomSheetDialogFragment
non posiziona più correttamente la finestra di dialogo sullo schermo. (b/151652127)
Versione 1.3.0-alpha01
4 marzo 2020
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
e androidx.fragment:fragment-testing:1.3.0-alpha01
vengono rilasciati. La versione 1.3.0-alpha01 contiene questi commit.
Nuove funzionalità
- Aggiunto il supporto per l'API
ViewTreeLifecycleOwner.get(View)
aggiunta in Ciclo di vita2.3.0-alpha01
in modo che restituiscaviewLifecycleOwner
del frammento comeLifecycleOwner
per tutte le visualizzazioni restituite daonCreateView()
. (aosp/1182955)
Modifiche alle API
- Il metodo
setRetainInstance()
sui frammenti è stato ritirato. Con l'introduzione dei ViewModels, gli sviluppatori hanno a disposizione un'API specifica per la conservazione dello stato che può essere associata ad attività, frammenti e grafici di navigazione. In questo modo gli sviluppatori possono utilizzare un frammento normale e non conservato e mantenere separato lo stato specifico che vogliono conservare, evitando una fonte comune di perdite, mantenendo al contempo le proprietà utili di una singola creazione e eliminazione dello stato mantenuto (ovvero il costruttore diViewModel
e il callbackonCleared()
che riceve). (b/143911815) - Con la release di ViewPager2
1.0.0
, le classiFragmentPagerAdapter
eFragmentStatePagerAdapter
per l'interazione conViewPager
sono state ritirate. Vedi Eseguire la migrazione da ViewPager a ViewPager2. (b/145132715)
Correzioni di bug
- Le regole ProGuard relative ai frammenti ora mantengono correttamente solo le classi
Fragment
dei costruttori predefiniti utilizzate anziché per tutte le istanzeFragment
; in questo modo è possibile correggere una regressione introdotta in Fragment1.2.1
. (b/149665169 - Le regole lint
require___()
aggiunte in Frammento1.2.2
non sono più falsi positivi per le variabili locali che condividono lo stesso nome dei nomi delle proprietà Kotlin oscurati (ad es.view
). (b/149891163) FragmentContainerView
non genera piùUnsupportedOperationException
quando utilizzi l'anteprima del layout in Android Studio. (b/149707833)- Risolto il problema per cui i frammenti conservati aggiunti dopo il salvataggio dello stato non venivano ricreati continuamente e poi eliminati dopo ogni modifica alla configurazione. (b/145832397)
Versione 1.2.5
Versione 1.2.5
10 giugno 2020
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
e androidx.fragment:fragment-testing:1.2.5
vengono rilasciati. La versione 1.2.5 contiene questi commit.
Correzioni di bug
- Il valore
getViewLifecycleOwner()
del frammento viene ora arrestato prima della chiamata dionSaveInstanceState()
, rispecchiando il comportamento del ciclo di vita del frammento. Questa versione era precedentemente disponibile in Frammento1.3.0-alpha04
. (b/154645875) - Se chiami
setMenuVisibility(false)
su un frammento, ora viene modificata correttamente la visibilità dei menu forniti dai relativi frammenti figlio. Questa versione era precedentemente disponibile in Frammento1.3.0-alpha04
. (b/153593580)
Versione 1.2.4
Versione 1.2.4
1° aprile 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
e androidx.fragment:fragment-testing:1.2.4
vengono rilasciati. La versione 1.2.4 contiene questi commit.
Correzioni di bug
- Sono state aggiornate le regole Fragment ProGuard per consentire l'offuscamento dei frammenti conservati. (b/151605338)
- La regola Lint
FragmentLiveDataObserve
è stata disabilitata nelle classiDialogFragment
perché il loro ciclo di vita e il loro ciclo di vita sono sempre sincronizzati, il che rende sicuro l'utilizzo dithis
oviewLifecycleOwner
durante la chiamata aobserve
. (b/151765086)
Versione 1.2.3
Versione 1.2.3
18 marzo 2020
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
e androidx.fragment:fragment-testing:1.2.3
vengono rilasciati. La versione 1.2.3 contiene questi commit.
Correzioni di bug
- Risolto un bug in
DialogFragment
che causava unStackOverflowError
durante la chiamata al numerogetLayoutInflater()
dall'interno dionCreateDialog()
. (b/117894767, aosp/1258665) - È stato ridotto l'ambito delle regole ProGuard incluse in Fragment per garantire che le classi di Fragment inutilizzate possano essere rimosse. (b/149665169)
- Sono stati corretti i falsi positivi nel controllo lint
UseRequireInsteadOfGet
quando si utilizzava un nome di variabile locale con shadowing per il nome della proprietà Kotlin. (b/149891163) FragmentContainerView
non genera piùUnsupportedOperationException
per l'utilizzo del costruttore errato nell'anteprima del layout. (b/149707833)
Versione 1.2.2
Versione 1.2.2
19 febbraio 2020
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
e androidx.fragment:fragment-testing:1.2.2
vengono rilasciati. La versione 1.2.2 contiene questi commit.
Nuovi controlli lint
- Lint suggerisce di utilizzare
viewLifecycleOwner
comeLifecycleOwner
per le chiamate inOnBackPressedDispatcher
inonCreateView()
,onViewCreated()
eonActivityCreated()
. (b/142117657) - È stato aggiunto un nuovo controllo lint che conferma che stai utilizzando il
debugImplementation
corretto quando utilizzi l'artefattofragment-testing
. (b/141500106) - I frammenti ora suggeriscono di utilizzare i metodi
require___()
associati per i messaggi di errore più descrittivi anzichécheckNotNull(get___())
,requireNonNull(get___())
oget___()!!
per tutte le API Fragment che includono un valore equivalente inget
erequire
. (aosp/1202883).
Correzioni di bug
- Correzione dei file Fragment ProGuard per evitare gli avvisi R8 (b/148963981)
- È stato migliorato il controllo Lint esistente, che suggerisce l'utilizzo di
viewLifecycleOwner
quando si utilizzaobserve
per gestire anche la versione del metodo di estensionelivedata-ktx
diobserve
. (b/148996309) - È stata corretta la formattazione di molti dei controlli lint (aosp/1157012)
Contributi esterni
- Grazie a Zac Sweers per aver contribuito ai controlli Lint di
require___()
per conto di Slack. (aosp/1202883).
Versione 1.2.1
Versione 1.2.1
5 febbraio 2020
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
e androidx.fragment:fragment-testing:1.2.1
vengono rilasciati. La versione 1.2.1 contiene questi commit.
Correzioni di bug
- Per i frammenti aggiunti tramite i metodi
add
ereplace
che utilizzano un'istanzaClass
(o le versioni reificate Kotlin) viene ora mantenuto da ProGuard il costruttore predefinito. (b/148181315) FragmentStatePagerAdapter
eFragmentPagerAdapter
non rilevano più le eccezioni generate daFragmentManager
durante l'esecuzione difinishUpdate()
. (aosp/1208711)- Risolto un problema per cui
FragmentManager.findFragment()
non funzionava con frammenti aggiunti tramite il tag<fragment>
. (b/147784323) - I frammenti gonfiati utilizzando il tag
<fragment>
ora ricevono sempre una chiamata aonInflate()
prima del giornoonCreate()
quando si trovano nel layout. (aosp/1215856). - Quando si chiama
toString()
su un'istanzaFragmentManager
, non viene più generato unNullPointerException
quando l'attività è già stata eliminata. (b/148189412)
Modifiche delle dipendenze
- I frammenti
1.2.1
ora dipendono da Lifecycle ViewModel SavingState2.2.0
.
Versione 1.2.0
Versione 1.2.0
22 gennaio 2020
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
e androidx.fragment:fragment-testing:1.2.0
vengono rilasciati. La versione 1.2.0 contiene questi commit.
Modifiche importanti dalla versione 1.1.0
- FragmentContainerView:
FragmentContainerView
è il contenitore fortemente consigliato per i frammenti aggiunti dinamicamente, che sostituisce l'utilizzo diFrameLayout
o di altri layout. Supporta inoltre gli stessi valoriclass
,android:name
eandroid:tag
facoltativo del tag<fragment>
, ma utilizza unFragmentTransaction
normale per aggiungere questo frammento iniziale, anziché il percorso di codice personalizzato utilizzato da<fragment>
. - Tempistiche
onDestroyView()
: i frammenti ora attendono il completamento delle animazioni di uscita, delle transizioni del framework di uscita e delle transizioni AndroidX (quando utilizzi la transizione1.3.0
) prima di chiamareonDestroyView()
. add()
ereplace()
basati sulla classe: sono stati aggiunti nuovi sovraccarichi diadd()
ereplace()
suFragmentTransaction
che accettano unClass<? extends Fragment>
e unBundle
di argomenti facoltativo. Questi metodi utilizzanoFragmentFactory
per creare un'istanza del frammento da aggiungere. Anche le estensioni Kotlin che utilizzano tipi reificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)
) sono state aggiunte afragment-ktx
.- Integrazione di ViewModel SaveState del ciclo di vita:
SavedStateViewModelFactory
è ora la fabbrica predefinita utilizzata quando si utilizzanoby viewModels()
,by activityViewModels()
, il costruttoreViewModelProvider
oViewModelProviders.of()
con un frammento. - Nuovi controlli lint: è stato aggiunto un nuovo controllo lint che garantisce di utilizzare
getViewLifecycleOwner()
durante l'osservazione diLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
. - Ritiro di
getFragmentManager()
: i metodigetFragmentManager()
erequireFragmentManager()
su Fragment sono stati ritirati e sostituiti con un singolo metodogetParentFragmentManager()
, che restituisce il valoreFragmentManager
non null a cui è stato aggiunto il frammento (puoi utilizzareisAdded()
per determinare se è sicuro chiamare). - Ritiro di
FragmentManager.enableDebugLogging()
: il metodoFragmentManager.enableDebugLogging
statico è stato ritirato. FragmentManager ora rispettaLog.isLoggable()
per il tagFragmentManager
, consentendoti di attivare il logging diDEBUG
oVERBOSE
senza ricompilare l'app.
Problemi noti
- I frammenti a cui viene fatto riferimento solo tramite l'attributo
class
oandroid:name
su unFragmentContainerView
non vengono conservati automaticamente da ProGuard, pertanto è necessario aggiungere manualmente una regola di Keep per ogni classe di frammento. (b/142601969) - Quando aggiungi un
NavHostFragment
usandoclass
oandroid:name
in un file XML conFragmentContainerView
, non puoi usarefindNavController()
inonCreate()
della tua attività. (b/142847973)
Versione 1.2.0-rc05
8 gennaio 2020
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
e androidx.fragment:fragment-testing:1.2.0-rc05
vengono rilasciati. La versione 1.2.0-rc05 contiene questi commit.
Correzioni di bug
- È stata corretta una regressione nel frammento
1.2.0-rc04
durante l'utilizzo del tag<fragment>
che ha causato la chiamata errata dionViewCreated()
durante l'eliminazione dell'attività. (b/146290333) - La configurazione dei frammenti aggiunti con il tag
<fragment>
viene ora cancellata correttamente, anche quando si trovano solo occasionalmente nel layout, ovvero solo nel layout orizzontale. Di conseguenza, questi frammenti vengono ora spostati correttamente inCREATED
, anche quando non si trovano nel layout, anziché creare un'istanza, ma non passano mai attraverso metodi del ciclo di vita. (b/145769287)
Versione 1.2.0-rc04
18 dicembre 2019
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
e androidx.fragment:fragment-testing:1.2.0-rc04
vengono rilasciati. La versione 1.2.0-rc04 contiene questi commit.
Correzioni di bug
- Sono state modificate le animazioni di
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
eTRANSIT_FRAGMENT_FADE
per evitare problemi visivi. (b/145468417)
Versione 1.2.0-rc03
4 dicembre 2019
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
e androidx.fragment:fragment-testing:1.2.0-rc03
vengono rilasciati. La versione 1.2.0-rc03 contiene questi commit.
Correzioni di bug
- È stata corretta una modifica non intenzionale del comportamento per cui i frammenti rimossi vengono ancora restituiti da
findFragmentById()
/findFragmentByTag()
mentre vengono eseguite animazioni/transizioni di uscita. (b/143982969, aosp/1167585) - I frammenti secondari vengono ora interrotti correttamente prima dei rispettivi elementi padre quando l'attività che le contiene chiama
onSaveInstanceState()
. (b/144380645) - Risolto il problema per cui le visualizzazioni venivano contrassegnate in modo errato
INVISIBLE
dopo aver fatto emergere un frammento nascosto. (b/70793925) - Le transizioni di elementi condivisi in frammentazione ora gestiscono le viste ruotate, ridimensionate e così via (b/142835261)
Aggiornamenti alla documentazione
- È stata chiarita la documentazione sul ritiro relativa a
setUserVisibleHint()
. (b/143897055) - È stata migliorata la documentazione su
setFragmentFactory()
egetFragmentFactory()
per indicare meglio che l'impostazione di unFragmentFactory
influirà anche sui FragmentManagers secondari. (aosp/1170095)
Modifiche delle dipendenze
- I frammenti ora dipendono da ciclo di vita
2.2.0-rc03
, Lifecycle ViewModel savedState1.0.0-rc03
e attività1.1.0-rc03
.
Versione 1.2.0-rc02
7 novembre 2019
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
e androidx.fragment:fragment-testing:1.2.0-rc02
vengono rilasciati. La versione 1.2.0-rc02 contiene questi commit.
Correzioni di bug
- Quando sei in Kotlin, la funzionalità LintFix per l'utilizzo di
getViewLifecycleOwner()
durante l'osservazione diLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
(introdotta in Fragment1.2.0-rc01
) ora utilizza la sintassi di accesso alla proprietà KotlinviewLifecycleOwner
anzichégetViewLifecycleOwner()
. (aosp/1143821).
Versione 1.2.0-rc01
23 ottobre 2019
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
e androidx.fragment:fragment-testing:1.2.0-rc01
vengono rilasciati. La versione 1.2.0-rc01 contiene questi commit.
Nuove funzionalità
- Ora
FragmentContainerView
supporta l'attributoclass
oltre aandroid:name
, rispecchiando la funzionalità del tag<fragment>
. (b/142722242) - È stato aggiunto un nuovo controllo lint che garantisce di usare
getViewLifecycleOwner()
durante l'osservazione diLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
. (b/137122478)
Correzioni di bug
- I callback
onDismiss
eonCancel
suDialogFragment
ora garantiscono che il valore diDialogInterface
passato loro non sia null e chegetDialog()
restituisca un valore non null quando vengono eseguiti. (b/141974033) FragmentContainerView
ora aggiunge il frammento definito daclass
oandroid:name
come parte dell'inflazione, assicurando chefindFragmentById()
efindFragmentByTag()
funzionino immediatamente dopo. (b/142520327)- È stato corretto un
IllegalStateException
inFragmentContainerView
a causa del salvataggio dello stato. (b/142580713) - È stato corretto un
UnsupportedOperationException
inFragmentContainerView
quando la classeFragmentContainerView
è stata offuscata. (b/142657034)
Problemi noti
- I frammenti a cui viene fatto riferimento solo tramite l'attributo
class
oandroid:name
su unFragmentContainerView
non vengono conservati automaticamente da ProGuard, pertanto è necessario aggiungere manualmente una regola di Keep per ogni classe di frammento. Abbiamo disattivato la regola Lint che suggerisce di passare aFragmentContainerView
fino a quando il problema non verrà risolto tramiteaapt2
. (b/142601969)
Versione 1.2.0-beta02
11 ottobre 2019
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
e androidx.fragment:fragment-testing:1.2.0-beta02
vengono rilasciati. La versione 1.2.0-beta02 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui
onInflate()
di Fragment non riceveva gli attributi corretti daFragmentContainerView
, con errori comeNavHostFragment
. (b/142421837)
Versione 1.2.0-beta01
9 ottobre 2019
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
e androidx.fragment:fragment-testing:1.2.0-beta01
vengono rilasciati. La versione 1.2.0-beta01 contiene questi commit.
Nuove funzionalità
FragmentContainerView
aggiunge il supporto per l'aggiunta di un frammento iniziale con ulteriore supporto per gli attributi XMLandroid:name
eandroid:tag
facoltativi. A differenza del tag<fragment>
,FragmentContainerView
utilizza un normaleFragmentTransaction
in background per aggiungere il frammento iniziale, consentendo ulteriori operazioniFragmentTransaction
suFragmentContainerView
e abilitando l'utilizzo dell'associazione delle visualizzazioni per il layout. (b/139830628, b/141177981)- I frammenti ora contengono un avviso di lanugine che offre una soluzione rapida per sostituire
<fragment>
conFragmentContainerView
. (b/139830056)
Correzioni di bug
- È stato corretto un
ClassCastException
durante l'utilizzo diandroidx.transition
. (b/140680619) - Quando utilizzi la Transizione
1.3.0-beta01
, i frammenti ora attendono il completamento diandroidx.transition
transizioni (oltre a transizioni e animazioni del framework, risolte rispettivamente in Frammento1.2.0-alpha03
e Frammento1.2.0-alpha02
) prima di inviareonDestroyView()
. (aosp/1119841). - Quando utilizzi la Transizione
1.3.0-beta01
, ora i frammenti annullano correttamente le transizioniandroidx.transition
prima di avviare nuove transizioni / animazioni nello stesso contenitore. (aosp/1119841). - Risolto il problema nell'API 17 e versioni precedenti quando si utilizzano le transizioni
androidx.transition
nella vista principale del frammento quando si utilizzaFragmentContainerView
. (b/140361893) - L'elemento
fragment-testing
ora dipende dal test1.2.0
di AndroidX, risolvendo un'incompatibilità con l'ultimo Espresso 3.2.0. (b/139100149) - Utilizzo di
Log.w
rimosso in FragmentManager. (aosp/1126468).
Problemi noti
- Il valore
onInflate()
del frammento non riceve attributi corretti daFragmentContainerView
, con casi di interruzione comeNavHostFragment
. (b/142421837)
Versione 1.2.0-alpha04
18 settembre 2019
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
e androidx.fragment:fragment-testing:1.2.0-alpha04
vengono rilasciati. La versione 1.2.0-alpha04 contiene questi commit.
Modifiche alle API
- I metodi
getFragmentManager()
erequireFragmentManager()
suFragment
sono stati deprecati e sostituiti con un singolo metodogetParentFragmentManager()
, che restituisce il valoreFragmentManager
non null a cui viene aggiunto il frammento (puoi utilizzareisAdded()
per determinare se è sicuro chiamare). (b/140574496) - Il metodo statico
FragmentManager.enableDebugLogging
è stato ritirato. FragmentManager ora rispettaLog.isLoggable()
per il tagFragmentManager
, consentendoti di attivare il logging diDEBUG
oVERBOSE
senza ricompilare l'app. (aosp/1116591)
Correzioni di bug
- I frammenti vengono ora eliminati correttamente mentre sono in esecuzione le animazioni di uscita su altri frammenti. (b/140574199)
- Risolto il problema per cui Fragments chiamava
Activity.findViewById()
mentre prima non lo faceva. (aosp/1116431)
Versione 1.2.0-alpha03
5 settembre 2019
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
e androidx.fragment:fragment-testing:1.2.0-alpha03
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche alle API
FragmentContainerView
ora èfinal
. (b/140133091)
Correzioni di bug
FragmentContainerView
ora inverte correttamente l'ordine di disegno quando estraggono i frammenti dalla pila posteriore. (b/139104187)- Risolto il problema per cui veniva eseguita l'animazione sbagliata quando si esceva un frammento e veniva aggiunto contemporaneamente un nuovo frammento. (b/111659726)
- I frammenti ora attendono la fine delle transizioni (oltre alle animazioni, che è stata corretta in Frammento
1.2.0-alpha02
) prima di inviareonDestroyView()
. (b/138741697)
Versione 1.2.0-alpha02
7 agosto 2019
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
e androidx.fragment:fragment-testing:11.2.0-alpha02
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
SavedStateViewModelFactory
è ora il valore di fabbrica predefinito utilizzato quando si usanoby viewModels()
,by activityViewModels()
, il costruttoreViewModelProvider
oViewModelProviders.of()
conFragment
. (b/135716331)- Le animazioni predefinite quando utilizzi
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
eTRANSIT_FRAGMENT_FADE
consetTransition
suFragmentTransaction
sono state aggiornate in modo che corrispondano alle animazioni utilizzate dalle attività sui dispositivi Android 10. (aosp/1012812, aosp/1014730)
Modifiche alle API
- Presenta
FragmentContainerView
come container fortemente consigliato per i frammenti aggiunti dinamicamente, sostituendo l'uso diFrameLayout
e così via, poiché corregge i problemi di ordinamento Z delle animazioni e l'invio di riquadri delle finestre ai frammenti. (b/37036000, aosp/985243, b/136494650) - È stato aggiunto un metodo
FragmentManager.findFragment(View)
statico per recuperare il frammento contenente da una visualizzazione gonfiata da un frammento. Un'estensione Kotlin è disponibile anche infragment-ktx
. (aosp/1090757) - Sono stati aggiunti nuovi sovraccarichi di
add()
ereplace()
suFragmentTransaction
che accettanoClass<? extends Fragment>
eBundle
di argomenti facoltativi. Questi metodi utilizzanoFragmentFactory
per creare un'istanza del frammento da aggiungere. Anche l'estensione Kotlin che utilizzano tipi reificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)
) è stata aggiunta afragment-ktx
. (b/126124987) @MainThread
annotazioni sono state aggiunte aFragment
callback del ciclo di vita. (b/127272564)- Le API correlate al titolo del breadcrumb su
FragmentTransaction
eFragmentManager.BackStackEntry
sono state ritirate. (b/138252944) - Il metodo
setTransitionStyle
suFragmentTransaction
è stato ritirato. (aosp/1011537) - Molti dei metodi in
FragmentManager
non sono piùabstract
. L'istanzaFragmentManager
rimaneabstract
e non deve essere creata o estesa direttamente; dovresti continuare a ricevere un'istanza esistente solo dagetSupportFragmentManager()
,getChildFragmentManager()
e così via.
Correzioni di bug
- Da Frammento
1.1.0-rc04
: ora i frammenti annullano correttamente le transizioni posticipate sui frammenti. (b/138251858) - Da Frammento
1.1.0-rc03
: è stato risolto un problema per cui la chiamata apostponeEnterTransition()
con un timeout più di una volta non comportava l'annullamento dei timeout precedenti. (b/137797118) - Da Frammento
1.1.0-rc02
: è stato corretto un arresto anomalo inFragmentPagerAdapter
eFragmentStatePagerAdapter
durante la rimozione dell'elemento corrente. (b/137209870) - I frammenti attendono la fine delle animazioni prima di inviare
onDestroyView()
. (b/136110528) - Le animazioni di frammenti dei frammenti figlio e dei relativi discendenti vengono ora gestite correttamente durante l'animazione del frammento principale. (b/116675313)
- È stato risolto un problema
NullPointerException
durante l'utilizzo delle transizioni di elementi condivisi e la combinazione di un'operazione Pop e Add. (b/120507394) - È stata aggiunta una soluzione alternativa a
IllegalStateException
quando utilizziFragmentPagerAdapter
eFragmentStatePagerAdapter
nei test Robolectric. (b/137201343)
Versione 1.2.0-alpha01
2 luglio 2019
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
e androidx.fragment:fragment-testing:1.2.0-alpha01
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- FragmentManager ora chiama
requestApplyInsets()
dopo aver collegato la vista del frammento e direttamente prima di chiamareonViewCreated()
, garantendo che la visualizzazione abbia sempre gli insiemi corretti. (b/135945162)
Correzioni di bug
- È stato corretto un
NullPointerException
durante l'inserimento di unFragmentTransaction
che utilizzavasetPrimaryNavigationFragment()
prima del giornoreplace()
. (b/134673465)
Versione 1.1.0
Versione 1.1.0
5 settembre 2019
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
e androidx.fragment:fragment-testing:1.1.0
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche importanti dalla versione 1.0.0
- fragment-testing: l'artefatto
fragment-testing
fornisce una classeFragmentScenario
per testare un frammento in isolamento. Per ulteriori dettagli, consulta la documentazione relativa al test dei frammenti dell'app. - FragmentManufacturer: ora puoi impostare un
FragmentFactory
su unFragmentManager
per gestire la creazione di istanze di frammento, rimuovendo il requisito rigido che prevede un costruttore senza argomenti. - Delegati della proprietà Kotlin per ViewModels: l'elemento
fragment-ktx
ora contiene due delegati della proprietà Kotlin:by viewModels()
per l'accesso ai ViewModel associati al singolo frammento eby activityViewModels()
per l'accesso ai ViewModel con ambito all'attività. - Ciclo di vita massimo: ora puoi impostare uno stato di ciclo di vita massimo per un frammento chiamando
setMaxLifecycle()
suFragmentTransaction
. Questo sostituisce il, ora deprecatosetUserVisibleHint()
.FragmentPagerAdapter
eFragmentStatePagerAdapter
hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. - Costruttore FragmentActivity LayoutId: le sottoclassi
FragmentActivity
ora possono facoltativamente richiamare un costruttore suFragmentActivity
che accetta un IDR.layout
, a indicare il layout che dovrebbe essere impostato come visualizzazione del contenuto in alternativa alla chiamata disetContentView()
inonCreate()
. Questo non cambia il requisito che prevede che la sottoclasse abbia un costruttore senza argomento. - Costruttore LayoutId del frammento: le sottoclassi
Fragment
ora possono richiamare un costruttore suFragment
che accetta un IDR.layout
, indicando il layout da utilizzare per questo frammento come alternativa all'override dionCreateView()
. Il layout potenziato può essere configurato inonViewCreated()
. - Posticipa con un timeout: è stato aggiunto un nuovo sovraccarico di
postponeEnterTransition()
che richiede un timeout.
Versione 1.1.0-rc04
7 agosto 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
e androidx.fragment:fragment-testing:1.1.0-rc04
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Ora i frammenti annullano correttamente le transizioni posticipate sui frammenti. (b/138251858)
Versione 1.1.0-rc03
19 luglio 2019
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
e androidx.fragment:fragment-testing:1.1.0-rc03
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Risolto il problema per cui la chiamata a
postponeEnterTransition()
con un timeout più di una volta non annullava i timeout precedenti. (b/137797118)
Versione 1.1.0-rc02
17 luglio 2019
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
e androidx.fragment-testing:fragment:1.1.0-rc02
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato risolto un arresto anomalo in
FragmentPagerAdapter
eFragmentStatePagerAdapter
durante la rimozione dell'elemento corrente. (b/137209870)
Versione 1.1.0-rc01
2 luglio 2019
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
e androidx.fragment:fragment-testing:1.1.0-rc01
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Ora i frammenti aggiornano correttamente la propria visibilità quando vengono utilizzate le operazioni
show()
ohide()
durante l'esecuzione della transizione. (b/133385058) - È stato corretto un
NullPointerException
durante l'inserimento di unFragmentTransaction
che utilizzavasetPrimaryNavigationFragment()
prima del giornoreplace()
. (b/134673465)
Versione 1.1.0-beta01
5 giugno 2019
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
e androidx.fragment:fragment-testing:1.1.0-beta01
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- I callback
androidx.lifecycle.Lifecycle
(correlati in modo specifico aSTARTED
,RESUMED
,PAUSED
,STOPPED
eDESTROYED
) per i frammenti nidificati ora sono nidificati correttamente. (b/133497591) OnBackPressedCallback
istanze registrate inonCreate()
di Fragment ora hanno correttamente la precedenza sul FragmentManager figlio. (b/133175997)- I frammenti figlio non vengono più animati quando il frammento padre viene sostituito. (b/121017790)
- Le animazioni e le transizioni di frammenti vengono ora ignorate quando si utilizza
animateLayoutChanges="true"
; in questo modo viene risolto un problema per cui i frammenti non venivano eliminati correttamente. (b/116257087)
Versione 1.1.0-alpha09
16 maggio 2019
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
e androidx.fragment:fragment-testing:1.1.0-alpha09
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche alle API
- I frammenti ora ricevono un callback a un nuovo metodo
onPrimaryNavigationFragmentChanged(boolean)
quando cambia il frammento di navigazione principale. aosp/960857
Correzioni di bug
- Le voci di menu gonfiate da un frammento secondario ora vengono rimosse correttamente quando viene rimosso il frammento principale. b/131581013
Versione 1.1.0-alpha08
7 maggio 2019
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
e androidx.fragment:fragment-testing:1.1.0-alpha08
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Questa release non è compatibile con le Preferenze dalla versione 1.1.0-alpha01 alla 1.1.0-alpha04. Esegui l'upgrade alle Preferenze 1.1.0-alpha05 quando utilizzi questa versione di Fragments.
Nuove funzionalità
- È stato aggiunto un nuovo sovraccarico di
postponeEnterTransition()
che richiede un timeout, dopodiché il frammento chiamerà automaticamentestartPostponedEnterTransition()
b/120803208
Modifiche alle API
- Modifica di interruzione: il metodo
FragmentFactory
instantiate
precedentemente obsoleto che richiedeva unBundle
è stato rimosso. aosp/953856 - Modifica d'interruzione: le costanti
RESUME_ONLY_CURRENT_FRAGMENT
eUSE_SET_USER_VISIBLE_HINT
inFragmentPagerAdapter
eFragmentStatePagerAdapter
sono state rinominate rispettivamenteBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
eBEHAVIOR_SET_USER_VISIBLE_HINT
. aosp/954782
Correzioni di bug
- I frammenti il cui ciclo di vita è stato limitato tramite
setMaxLifecycle()
non vengono più ripresi prima di raggiungere lo stato finale. b/131557151 - Quando utilizzi
setMaxLifecycle(Lifecycle.State.CREATED)
, la vista dei frammenti verrà eliminata correttamente. aosp/954180
Versione 1.1.0-alpha07
25 aprile 2019
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
e androidx.fragment:fragment-testing:1.1.0-alpha07
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Ora puoi impostare uno stato di ciclo di vita massimo per un frammento chiamando
setMaxLifecycle()
suFragmentTransaction
. Questo sostituisce il, ora deprecatosetUserVisibleHint()
.FragmentPagerAdapter
eFragmentStatePagerAdapter
hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. (b/129780800)
Modifiche alle API
- Ora è possibile chiamare
moveToState(STARTED)
suFragmentScenario
solo su dispositivi con API 24 e versioni successive. (b/129880016)
Modifiche del comportamento
- Di conseguenza (b/129907905), i frammenti nello stack posteriore non riceveranno un callback a
onCreateView()
quando viene ricreata l'attività di hosting. OraonCreateView()
verrà chiamato solo quando il frammento diventa visibile (ad esempio, lo stack posteriore viene aperto).
Correzioni di bug
- Risolto il problema durante l'utilizzo di un tag
<fragment>
in XML e del costruttorecontentLayoutId
diFragmentActivity
oAppCompatActivity
. (b/129907905) - Risolto il problema per cui i frammenti nello stack posteriore non venivano spostati almeno su
CREATED
dopo una modifica alla configurazione, causando lo smaltimento corretto dei modelli ViewModel e dei frammenti conservati per i figli. (b/129593351) - Risolto un arresto anomalo in
restoreSaveState
causato dalla desincronizzazione dei frammenti conservati dopo il salvataggio dello stato dell'istanza. (b/130433793) (aosp/947824) - Sono stati risolti i problemi per cui un
OnBackPressedCallback
aggiunto con un ciclo di vita dei frammenti non veniva chiamato se ilFragmentManager
aveva uno stack back-forward. Per maggiori dettagli, vedi androidx.activity 1.0.0-alpha07. (aosp/948209). - I frammenti non applicano più
LAYER_TYPE_HARDWARE
per le animazioni. Se hai bisogno specificamente di un'animazione a livello hardware, impostala come parte dell'animazione. (b/129486478)
Versione 1.1.0-alpha06
3 aprile 2019
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
e androidx.fragment:fragment-testing:1.1.0-alpha06
vengono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Le eccezioni generate da FragmentManager ora includono il nome del frammento nel messaggio. (b/67759402)
Modifiche alle API
Fragment
eFragmentActivity
ora contengono un secondo costruttore che prende un@LayoutRes int
, che sostituisce il precedente comportamento di annotazione della classe con@ContentView
. Questo approccio funziona sia nei moduli delle app sia delle librerie. (b/128352521)onActivityResult()
di FragmentActivity è ora contrassegnato correttamente come@CallSuper
. (b/127971684)- Il metodo
instantiate
di FragmentIndustry che utilizza un bundle di argomenti è stato deprecato e le app devono utilizzare il nuovo overloadinstantiate
che non accetta un bundle. (b/128836103) - I metodi
FragmentScenario
ora sono annotati correttamente con@StyleRes
. (aosp/924193) - L'API
FragmentTabHost
è stata ritirata. (b/127971835) - L'elemento
getThemedContext()
di FragmentActivity è stato rimosso. (aosp/934078)
Correzioni di bug
- È stata corretta una regressione in 1.1.0-alpha05 che causava il flashing del frammento in entrata sullo schermo. (b/129405432)
- Risolto il problema per cui il frammento di navigazione principale andava perso dopo una serie di operazioni popBackStack+sostituzione+popBackStack. (b/124332597)
- Risolto il problema durante l'utilizzo dei costruttori
@ContentView
nell'attività durante il ripristino dello stato del frammento. (b/127313094) - È stata corretta la logica di
setTargetFragment()
durante la sostituzione di un frammento di destinazione esistente con un frammento non ancora associato a FragmentManager. (aosp/932156)
Versione 1.1.0-alpha05
13 marzo 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
e androidx.fragment:fragment-testing:1.1.0-alpha05
vengono rilasciati. L'elenco completo dei commit inclusi in questa versione è disponibile qui.
Nuove funzionalità
@ContentView
ricerche di annotazioni ora sono memorizzate nella cache (b/123709449)
Modifiche del comportamento
- La chiamata a
remove()
,hide()
,show()
,detach()
esetPrimaryNavigationFragment()
con un frammento collegato a un altro FragmentManager ora genera unIllegalStateException
anziché un errore silenziosa (aosp/904301)
Correzioni di bug
onNewIntent
perFragmentActivity
è ora contrassegnato correttamente con@CallSuper
(b/124120586)- Risolto il problema per cui
onDismiss()
diDialogFragment
poteva essere chiamato due volte quando si utilizzavagetDialog().dismiss()
ogetDialog().cancel()
(b/126563750)
Versione 1.1.0-alpha04
7 febbraio 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
e androidx.fragment:fragment-testing 1.1.0-alpha04
vengono rilasciati.
Nuove funzionalità
- Aggiunto il supporto per l'annotazione della classe
@ContentView
, che consente di indicare quale file XML di layout deve essere aumentato in modo artificioso in alternativa all'override dionCreateView()
. Ti consigliamo di visualizzare il lavoro correlato inonViewCreated()
. (aosp/837619) fragment-testing
ora dipende dalla versione stabile diandroidx.test:core-ktx
1.1.0 (b/121209673)- Ora puoi utilizzare
openActionBarOverflowOrOptionsMenu
conFragmentScenario
per testare i menu delle opzioni ospitate da Fragment (b/121126668)
Modifiche alle API
- È stato aggiunto un metodo
requireArguments()
che restituisce@NonNull Bundle
o generaIllegalStateException
(b/121196360) - È stata aggiunta una nota che indica che i criteri
getLifecycle()
,getViewLifecycleOwner()
egetViewLifecycleOwnerLiveData()
non devono essere sostituiti e saranno resi definitivi in una release futura. Invia una richiesta di funzionalità se al momento stai sostituendo questo metodo. (aosp/880714) - È stata aggiunta una nota che indica che
getViewModelStore()
non deve essere sostituito e sarà reso definitivo in una release futura. Invia una richiesta di funzionalità se al momento stai sostituendo questo metodo. (aosp/880713) - Risolto un problema di compatibilità binaria con le release precedenti di Fragments. (aosp/887877) (aosp/889834)
Correzioni di bug
- I frammenti target vengono cancellati correttamente quando passi
null
asetTargetFragment()
. (aosp/849969) - Risolto il problema per cui i frammenti di destinazione a volte non erano disponibili a partire dal giorno
onDestroy()
. (b/122312935) - Ora il comando onDismiss() di DialogFragment viene chiamato prima del giorno
onDestroy()
. (aosp/874133) (aosp/890734)
Versione 1.1.0-alpha03
17 dicembre 2018
Nuove funzionalità
- Il frammento ora implementa
BundleSavedStateRegistryOwner
e dipende dalla nuova libreria SaveState [aosp/824380] - È stato aggiunto un delegato della proprietà Kotlin
by activityViewModels
per recuperare i modelli ViewModel associati all'attività contenitore [b/119050253] - Il delegato della proprietà Kotlin
by viewModels
è stato ampliato per utilizzare un metodo lambda facoltativo per ottenere ilViewModelStoreOwner
, che ti consente di passare nel frammento principale o in un altroViewModelStoreOwner
personalizzato con codice comeval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
Modifiche alle API
FragmentScenario
ora consente di specificare un tema, ad esempioTheme.AppCompat
[b/119054431]. Questa è una modifica che provoca un errore.- È stato aggiunto un metodo
requireView()
che restituisce@NonNull View
o generaIllegalStateException
[b/120241368] - È stato aggiunto un metodo
requireParentFragment()
che restituisce@NonNull Fragment
o generaIllegalStateException
[b/112103783]
Correzioni di bug
- Risolto il problema di PendingStateException: errore di salvataggio dello stato b/120814739
- I frammenti ripristinati dallo stato dell'istanza salvata ora riceveranno sempre un valore
Bundle
non null [b/119794496] - I frammenti rimossi non riutilizzano più l'oggetto
Lifecycle
se vengono aggiunti di nuovo [b/118880674]
Versione 1.1.0-alpha02
3 dicembre 2018
Nuove funzionalità
- Le estensioni Kotlin di FragmentScenario ora consentono di utilizzare una lambda per la creazione di frammenti come alternativa al passaggio in un'istanza
FragmentFactory
. (aosp/812913)
Correzioni di bug
- Correzione di un'eccezione sobrioStateException quando si utilizzano frammenti nidificati nello stack posteriore (b/119256498)
- Risolto il problema di arresto anomalo durante l'utilizzo di
FragmentScenario.recreate()
conFragmentFactory
(aosp/820540) - Risolto il problema per cui i frammenti target non erano accessibili dopo la rimozione del frammento (aosp/807634)
Versione 1.1.0-alpha01
5 novembre 2018
Questa è la prima release dell'elemento fragment-testing
e di FragmentScenario
, che si basa sulle API androidx.test:core. Per ulteriori dettagli, consulta la documentazione relativa al test dei frammenti.
Nuove funzionalità
- Nuova classe FragmentScenario per il test dei frammenti in isolamento.
- Ora puoi impostare un
FragmentFactory
su qualsiasiFragmentManager
per controllare il modo in cui creare le istanze di nuove istanze di Fragment. - È stato aggiunto un nuovo delegato della proprietà Kotlin
by viewModels()
per il recupero di componenti ViewModel da un frammento. - Gli eventi di input in attesa (come i clic) ora vengono annullati in
onStop()
di un frammento.
Modifiche alle API
- Sono state ampliate significativamente le annotazioni con supporto di valori null sulla superficie dell'API Fragment.
Correzioni di bug
- Risolvi un problema che ha causato l'esito negativo delle operazioni relative ai frammenti dall'interno di LiveData (b/77944637)
Problemi noti
- Non è possibile accedere ai frammenti di destinazione dopo che un frammento è stato rimosso da FragmentManager.
fragment-testing
dipende daandroidx.test:core:1.0.0-beta01
anziché daandroidx.test:core:1.0.0
corretto.