Frammento
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
12 febbraio 2025 | 1.8.6 | - | - | - |
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 elementi necessari nel file build.gradle
per la tua app o il tuo modulo:
Alla moda
dependencies { def fragment_version = "1.8.3" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.3" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.
Versione 1.8
Versione 1.8.6
12 febbraio 2025
androidx.fragment:fragment-*:1.8.6
viene rilasciato. La versione 1.8.6 contiene questi commit.
Correzioni di bug
- L'override
setOnApplyWindowInsetsListener
diFragmentContainerView
ora accetta un ascoltatore nullo, in linea con quanto consentito dal framework. (I575f0, b/282790626)
Versione 1.8.5
30 ottobre 2024
androidx.fragment:fragment-*:1.8.5
viene rilasciato. La versione 1.8.5 contiene questi commit.
Correzioni di bug
- È stato corretto un problema relativo a
IllegalStateException
attivato dasaveBackStack
solo dopo l'annullamento o l'interruzione di un gesto Indietro predittivo. (I3387d, b/342419080)
Versione 1.8.4
2 ottobre 2024
androidx.fragment:fragment-*:1.8.4
viene rilasciato. La versione 1.8.4 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui la pressione rapida del pulsante Indietro del sistema o l'esecuzione rapida del gesto Indietro causava l'arresto anomalo di Fragments quando si utilizzano le transizioni AndroidX. (Ibc038, b/364804225)
- È stato risolto un problema nei frammenti per cui l'interruzione di un gesto di ritorno predittivo inviava il gestore dei frammenti a uno stato indefinito e poteva anche mostrare il frammento sbagliato. (If82e2, b/338624457)
- È stato corretto un problema con
UninitializedPropertyAccessException
inAndroidFragment
quando viene sostituita dinamicamente la classe utilizzata dall'istanzaAndroidFragment
. (I12dea)
Versione 1.8.3
4 settembre 2024
androidx.fragment:fragment-*:1.8.3
viene rilasciato. La versione 1.8.3 contiene questi commit.
Correzioni di bug
FragmentManager
ora prende correttamente in considerazione le operazioni in attesa durante la gestione del gesto Indietro predittivo. In questo modo, il ripristino del sistema non causerà più unIndexOutOfBoundsException
. (I9ba32, b/342316801)AndroidFragment
non si arresta più in modo anomalo se viene aggiunto alla composizione mentre lo stato dell'attività/del frammento contenente è già stato salvato. (I985e9, b/356643968)
Versione 1.8.2
24 luglio 2024
androidx.fragment:fragment-*:1.8.2
viene rilasciato. La versione 1.8.2 contiene questi commit.
Correzioni di bug
AndroidFragment
ora gestisce correttamente i casi in cui il frammento principale viene inserito nella pila di ritorno del frammento, evitando i problemi di "Nessuna visualizzazione trovata per l'ID" quando si torna a quel frammento. (I94608)- I frammenti aggiunti tramite il metodo
FragmentTransaction.add
che accetta unViewGroup
ora aspettanoonContainerAvailable
prima di passare aonStart()
. Ciò influisce sugli utenti di quell'API, comeAndroidFragment
, che ora attende cheAndroidFragment
inserisca nuovamente la composizione prima di spostarla inonStart()
. (I94608)
Versione 1.8.1
26 giugno 2024
androidx.fragment:fragment-*:1.8.1
viene rilasciato. La versione 1.8.1 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui i frammenti senza un contenitore venivano immediatamente
DESTROYED
all'avvio di un gesto di ritorno predittivo. Ora vengono mantenuti nello statoCREATED
fino al termine del gesto. (If6b83, b/345244539)
Versione 1.8.0
12 giugno 2024
androidx.fragment:fragment-*:1.8.0
viene rilasciato. La versione 1.8.0 contiene questi commit.
Modifiche importanti dalla versione 1.7.0
- L'elemento
fragment-compose
ora contiene un elementoAndroidFragment
Composable
che consente di aggiungere frammenti alla gerarchia di Compose tramite il nome della classe del frammento. Gestisce automaticamente il salvataggio e il ripristino dello stato del frammento. Questo approccio deve essere utilizzato come sostituto diretto dell'approccio consigliato in precedenza che prevede l'utilizzo diAndroidViewBinding
per gonfiare un frammento. - Il callback
onBackStackChangeCancelled
nell'interfacciaOnBackStackChangedListener
diFragmentManager
viene ora attivato nell'ambito dell'esecuzione delle operazioni inFragmentManager
, avvicinandolo alla tempistica del callbackonBackStackChangeCommitted
.
Versione 1.8.0-rc01
29 maggio 2024
androidx.fragment:fragment-*:1.8.0-rc01
viene rilasciato. La versione 1.8.0-rc01 contiene questi commit.
Correzioni di bug
- Il callback
onBackStackChangeCancelled
nell'interfacciaFragmentManagers OnBackStackChangedListener
ora viene attivato nell'ambito dell'esecuzione delle operazioni inFragmentManager
, avvicinandolo in termini di tempistica al callbackonBackStackChangeCommitted
. (I5ebfb, b/332916112)
Versione 1.8.0-beta01
14 maggio 2024
androidx.fragment:fragment-*:1.8.0-beta01
viene rilasciato. La versione 1.8.0-beta01 contiene questi commit.
Correzioni di bug
- Da Fragment
1.7.1
: il pulsante Indietro predittivo verrà ora eseguito solo per le transazioni in cui tutti i frammenti hanno un animatore o una transizione Androidx cercabile. In questo modo viene risolto un problema per cui l'annullamento di una transazione parzialmente cercabile causava una schermata nera. (I43037, b/339169168)
Versione 1.8.0-alpha02
17 aprile 2024
androidx.fragment:fragment-*:1.8.0-alpha02
viene rilasciato. La versione 1.8.0-alpha02 contiene questi commit.
Correzioni di bug
- Da Frammento
1.7.0-rc02
: sono stati aggiunti i log per indicare il motivo per cui l'impostazione di unsharedElement
senza altre transizioni non andrà a buon fine. (Iec48e) - Dal Fragment
1.7.0-rc02
: è stato risolto un bug per cui si verificava un arresto anomalo se a una transazione veniva aggiunto un elemento condiviso non cercabile in cui tutte le altre transizioni erano cercabili. Ora la transazione verrà considerata correttamente non cercabile. (I18ccd)
Versione 1.8.0-alpha01
3 aprile 2024
androidx.fragment:fragment-*:1.8.0-alpha01
viene rilasciato. La versione 1.8.0-alpha01 contiene questi commit.
Nuove funzionalità
- Il nuovo
AndroidFragment
Composable
consente di aggiungere frammenti alla gerarchia di Compose tramite il nome della classe del frammento. Gestisce automaticamente il salvataggio e il ripristino dello stato del frammento. Può essere utilizzato come sostituto diretto di AndroidViewBindingComposable
.(b/312895363, Icf841)
Modifiche alla documentazione
- Documentazione aggiornata per le API
OnBackStackChangedListener
per indicare quando vengono chiamate e come devono essere utilizzate. (I0bfd9)
Aggiornamento delle dipendenze
- Il frammento ora dipende da Profile Installer 1.3.1.
Versione 1.7
Versione 1.7.1
14 maggio 2024
androidx.fragment:fragment-*:1.7.1
viene rilasciato. La versione 1.7.1 contiene questi commit.
Correzioni di bug
- Il pulsante Indietro predittivo verrà ora eseguito solo per le transazioni in cui tutti i frammenti hanno un animatore o una transizione Androidx cercabile. In questo modo viene risolto un problema per cui l'annullamento di una transazione parzialmente cercabile causava una schermata vuota. (I43037, b/339169168)
Versione 1.7.0
1° maggio 2024
androidx.fragment:fragment-*:1.7.0
viene rilasciato. La versione 1.7.0 contiene questi commit.
Supporto dei gesti di ritorno predittivi
- I frammenti ora supportano il ritorno in-app predittivo quando si utilizza
Animator
o AndroidX Transition 1.5.0. In questo modo, gli utenti possono utilizzare il gesto Indietro per vedere il frammento precedente cercando l'animatore/la transizione prima di decidere se confermare la transazione completando il gesto o annullarla.
Sistema di transizione | Risorsa XML | Supporta il gesto Indietro predittivo |
---|---|---|
Animation |
R.anim |
No |
Animator |
R.animator |
Sì |
Framework Transition |
R.transition |
No |
AndroidX Transition con Transition 1.4.1 o versioni precedenti |
R.transition |
No |
AndroidX Transition con Transition 1.5.0 |
R.transition |
Sì |
Se riscontri problemi con il supporto di Indietro predittivo in Fragment dopo aver attivato il gesto Indietro predittivo, segnala un problema relativo a Fragment con un progetto di esempio che riproduca il problema. Puoi disattivare il pulsante Indietro predittivo utilizzando FragmentManager.enabledPredictiveBack(false)
nella sezione onCreate()
della tua attività.
FragmentManager.OnBackStackChangedListener()
ora fornisce onBackStackChangeProgressed()
e onBackStackChangeCancelled()
per ricevere rispettivamente gli avanzamenti di navigazione a ritroso predittivi e gli eventi annullati.
Elemento Artifact Compose del frammento
È stato creato un nuovo elemento fragment-compose
incentrato 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 mira a semplificare l'utilizzo di Compose per l'interfaccia utente di un singolo frammento creando un ComposeView
per te e impostando il ViewCompositionStrategy
corretto.
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)
}
}
Versione 1.7.0-rc02
17 aprile 2024
androidx.fragment:fragment-*:1.7.0-rc02
viene rilasciato. La versione 1.7.0-rc02 contiene questi commit.
Correzioni di bug
- Sono stati aggiunti i log per indicare il motivo per cui l'impostazione di un
sharedElement
senza altre transizioni non andrà a buon fine. (Iec48e) - È stato corretto un bug per cui si verificava un arresto anomalo se a una transazione veniva aggiunto un elemento condiviso non avanzabile in cui tutte le altre transizioni erano avanzabili. Ora la transazione verrà considerata correttamente non cercabile. (I18ccd)
Versione 1.7.0-rc01
3 aprile 2024
androidx.fragment:fragment-*:1.7.0-rc01
viene rilasciato. La versione 1.7.0-rc01 contiene questi commit.
Aggiornamento delle dipendenze
- Il frammento ora dipende da Profile Installer 1.3.1.
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 all'API
FragmentHostCallback
ora è scritto in Kotlin in modo che la nullabilità del tipo generico dell'host corrisponda a quella del tipo di ritorno dionGetHost()
. (I40af5)
Correzioni di bug
- È stato risolto un problema per cui, quando si eseguiva un gesto Indietro predittivo su un frammento non presente in un contenitore, il frammento non veniva mai distrutto. Il frammento verrà ora spostato immediatamente nello stato finale. (Ida0d9)
- È stato risolto un problema in Frammenti per cui l'interruzione delle transizioni in arrivo con un gesto di ritorno predittivo eliminava la visualizzazione in entrata e lasciava 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
- È stato risolto il problema noto nella release precedente di Fragment, in cui l'utilizzo del supporto di Indietro predittivo di Fragment per
Animator
o AndroidX Transition causava l'emissione di unNullPointerException
dahandleOnBackProgressed
se non è mai stato aggiunto unFragmentManager.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.
Elemento Artifact Compose del frammento
È stato creato un nuovo elemento fragment-compose
incentrato 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 mira a semplificare l'utilizzo di Compose per l'interfaccia utente di un singolo frammento creando un ComposeView
per te e impostando il 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 ricevere rispettivamente gli avanzamenti di ritorno predittivi e gli eventi annullati. (214b87)
Problema noto
- Quando utilizzi il supporto di Indietro predittivo di Fragment per
Animator
o AndroidX Transition, Fragments genera unNullPointerException
dahandleOnBackProgressed
se non è mai stato aggiunto unFragmentManager.OnBackStackChangedListener
tramiteaddOnBackStackChangedListener
. Se aggiungi manualmente un ascoltatore, il problema verrà risolto. 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 raccolta Transizione, che è stata risolta 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 corretto un errore
NullPointerException
causato dall'impostazione di una transizione di elemento condiviso e dalla mancata impostazione di una transizione di entrata/uscita. (I8472b) - Da Fragment
1.6.2
: quando il frammento di unFragmentContainerView
viene espanso, i relativi stati, comeFragmentManager
, Host e id, sono ora accessibili nel callbackonInflate
. (I1e44c, b/307427423) - Da Fragment
1.6.2
: quando utilizziclearBackStack
per rimuovere un insieme di frammenti, qualsiasiViewModel
del frammento nidificato verrà ora cancellato quando vengono cancellati iViewModels
del frammento principale. (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
- Fragments è stato aggiornato in modo da dipendere dalla nuova API
animateToStart
aggiunta nella 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 supportano il pulsante Indietro predittivo quando si utilizzano le transizioni AndroidX. In questo modo puoi utilizzare il gesto Indietro per andare al frammento precedente con la transizione AndroidX personalizzata prima di decidere se confermare o annullare la transazione tramite il gesto completato. Per attivare questa funzionalità, devi utilizzare la release Transition
1.5.0-alpha03
. (Ib49b4, b/285175724)
Problemi noti
- Al momento si verifica un problema per cui, dopo aver annullato un gesto Indietro con una transizione una volta, la transizione non viene eseguita la volta successiva che avvii il gesto Indietro, causando una schermata vuota. Il problema potrebbe essere causato da un problema nella raccolta Transizione. (b/300157785). Se riscontri questo problema, registra un problema relativo a Fragment con un progetto di esempio che lo riproduca. Puoi disattivare il pulsante Indietro predittivo utilizzando
FragmentManager.enabledPredictiveBack(false)
nella sezioneonCreate()
della tua 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 un problema relativo all'annullamento di un gesto di ritorno predittivo in cui i frammenti non riuscivano a raggiungere lo stato del ciclo di vita corretto. (I7cffe, b/297379023)
- Sono state corrette delle regressioni per cui le animazioni erano consentite con le transizioni. (I59f36)
- È stato risolto un problema relativo all'utilizzo di Indietro predittivo con i frammenti: il tentativo di tornare indietro due volte in rapida successione nell'ultimo frammento della pila Indietro 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
- È stato risolto un problema relativo ai frammenti quando si utilizza il pulsante Indietro predittivo che causava il salto del primo frammento nella pila Indietro del gestore dei frammenti e il completamento dell'attività quando si utilizza il pulsante Indietro di sistema tramite la navigazione 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 utilizzi Fragments con i gesti di ritorno predittivi dall'API 34, se utilizzi un sistema di transizione che non supporta la ricerca (
Animations
,Transitions
) o nessuna transizione, Fragments ora 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 supportano il pulsante Indietro in-app predittivo quando si utilizza
Animator
. In questo modo puoi utilizzare il gesto Indietro per vedere il frammento precedente con l'Animatore personalizzato prima di decidere se confermare la transazione tramite il gesto di completamento o annullare. Puoi anche disattivare questo nuovo comportamento utilizzando la funzionalità sperimentaleenablePredictiveBack()
e passandofalse
.
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 un
FragmentContainerView
viene gonfiato, i relativi stati, comeFragmentManager
, Host e id, sono ora accessibili nel callbackonInflate
. (I1e44c, b/307427423) - Quando utilizzi
clearBackStack
per rimuovere un insieme di frammenti, tutti iViewModel
dei frammenti nidificati verranno cancellati quando vengono cancellati iViewModels
del frammento principale. (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 memorizzato quando l'attività è stata interrotta, ma non distrutta, veniva memorizzato in modo errato nella cache anche dopo che l'istanza del frammento era stata spostata di nuovo nello stato
RESUMED
. Ciò causerebbe il riutilizzo dello stato memorizzato nella cache se l'istanza del frammento si trovasse nella pila di ritorno quando utilizzi l'API di più pile di ritorno per salvare e ripristinare il frammento. (I71288, b/246289075)
Aggiornamento delle dipendenze
- Ora il frammento dipende da Activity 1.7.2. Questo risolve un problema per cui gli utenti di Kotlin non potevano estendere
ComponentDialog
senza una dipendenza esplicita da Attività. (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 dei
Fragment
è stato suddiviso interamente tra lo stato della libreria privata (classiParcelable
personalizzate) e lo stato fornito dallo sviluppatore, che ora viene sempre archiviato in unBundle
che consente di determinare esattamente l'origine dello stato di un frammento. - L'interfaccia
FragmentManager.OnBackStackChangedListener
è stata ampliata con due callback aggiuntivi dionBackStackChangeStarted
eonBackStackChangeCommitted
che vengono chiamati con ogniFragment
rispettivamente prima che vengano aggiunti/rimossi dalla pila di ritorno del frammento e subito dopo l'commit della transazione. FragmentStrictMode
ha aggiunto un nuovoWrongNestedHierarchyViolation
che rileva quando un frammento secondario è nidificato nella gerarchia di visualizzazione del relativo elemento principale, ma non è aggiunto alchildFragmentManager
dell'elemento principale.- Le API
Fragment
eFragmentManager
che accettano unIntent
o unIntentSender
sono ora correttamente annotate con@NonNull
per impedire il passaggio di un valore nullo, in quanto un valore nullo farebbe sempre arrestare in modo anomalo le rispettive API del framework Android chiamate da questi metodi. DialogFragment
ora fornisce l'accesso aComponentDialog
sottostante tramite l'APIrequireComponentDialog()
.- Ora il frammento dipende dal ciclo di vita
2.6.1
. - Il frammento ora dipende da SavedState
1.2.1
. - Ora il frammento dipende da ProfileInstaller
1.3.0
. L'elemento
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 a uno scostamento tra le versioni
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
- È stato risolto il problema che causava l'invio di
ActivityResult
con il codice di richiesta errato quando sono state effettuate più richieste distartActivityForResult
consecutivamente. (If0b9d, b/249519359) - È stato risolto un problema per cui i callback
onBackStackChangeListener
venivano inviati per le transazioni che non modificavano effettivamente la pila precedente se erano mescolati con le transazioni che lo fanno. (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 posticipato non comporta più la perdita del frammento posticipato. (I2ec7d, b/276375110) - I nuovi callback
onBackStackChangeStarted
eonBackStackChangeCommitted
ora inviano un frammento una sola 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 all'API
DialogFragment
ora fornisce l'accesso aComponentDialog
sottostante tramite l'APIrequireComponentDialog()
. (I022e3, b/234274777)- Le API dei frammenti
commitNow()
,executePendingTransactions()
epopBackStackImmediate()
sono state annotate con@MainThread
, il che significa che ora tutte genereranno errori di compilazione quando non vengono chiamate dal thread principale anziché attendere l'errore in fase di esecuzione. (Ic9665, b/236538905)
Correzioni di bug
- È stato corretto un bug in
FragmentManager
per cui il salvataggio e il ripristino nello stesso frame potevano causare un arresto anomalo. (Ib36af, b/246519668) - I callback
OnBackStackChangedListener
onBackStackChangeStarted
eonBackStackChangeCommitted
ora vengono eseguiti solo quando viene modificata la pila di ritornoFragmentManager
. (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.
Modifica del comportamento
- La temporizzazione del callback
OnBackStackChangedListener.onBackStackChangeCommited
è stata modificata in modo da essere eseguita prima delle operazioni sui frammenti. In questo modo, al callback non verrà mai passato un frammento scollegato. (I66a76, b/273568280)
Correzioni di bug
- Da Fragment
1.5.6
: è stato risolto un problema per cui la chiamata aclearFragmentResultListener
all'interno di unsetFragmentResultListener
non funzionava seLifecycle
era giàSTARTED
e un risultato era già disponibile. (If7458)
Aggiornamenti delle dipendenze
- Ora il frammento dipende dal ciclo di vita
2.6.1
. (586fe7) - Il frammento ora dipende da SavedState
1.2.1
. (078e4e) - Ora il frammento 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 Fragment
1.5.6
: è stato risolto un problema per cui la rimozione di qualsiasi frammento, indipendentemente dal fatto che avesse aggiunto o meno elementi del menu, invalidava 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
onBackStackChangedStarted
callback suonBackStackChangedListener
diFragmentManager
verrà ora eseguito prima che i frammenti inizino a spostarsi verso i relativi 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
FragmentManager.OnBackStackChagnedListener
ora offre due callback aggiuntivi,onBackStackChangeStarted
eonBackStackChangeCommitted
, che forniscono ulteriori informazioni e controllo quando si verificano modifiche allo stack precedente inFragmentManager
. (Ib7ce5, b/238686802)
Modifiche all'API
- Le API
Fragment
eFragmentManager
che accettano unIntent
o unIntentSender
sono ora correttamente annotate con@NonNull
per impedire il passaggio di un valore nullo, in quanto un valore nullo farebbe sempre arrestare in modo anomalo le rispettive API del framework Android chiamate da 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 nella gerarchia di visualizzazione del relativo elemento principale, ma non è aggiunto alchildFragmentManager
dell'elemento principale. (I72521, b/249299268)
Modifiche al comportamento
- Ora i frammenti ripristinano il loro stato
SavedStateRegistry
prima dionAttach()
, in modo che sia disponibile da tutti i metodi di ciclo di vita verso l'alto. (I1e2b1)
Modifiche all'API
- L'elemento
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 allo sfasamento 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
nell'ambito dello stato salvato del registry della 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 all'API
- Le classi che estendono
DialogFragment
ora dovranno chiamare super nelle sostituzioni dionDismiss()
. (I14798, b/238928865)
Correzioni di bug
- Sono state corrette 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 appropriati. (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 Fragment
1.5.2
: è stato corretto un problema per cui l'esecuzione di una transazionepopBackStack()
e unareplace()
contemporaneamente poteva causare l'esecuzione diAnimation
/Animator
errati nei frammenti in uscita. (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 al comportamento
- Lo stato salvato dei
Fragment
è stato suddiviso interamente tra lo stato della libreria privata (classiParcelable
personalizzate) e lo stato fornito dallo sviluppatore, che ora viene sempre archiviato in unBundle
che consente di determinare esattamente l'origine dello stato di un frammento. (b/207158202)
Correzioni di bug
- Da Fragment
1.5.1
: correzione di una regressione inDialogFragmentCallbacksDetector
in cui l'utilizzo della versione di lint inclusa in AGP 7.4 causava un arresto anomalo di lint. (b/237567009)
Aggiornamento delle dipendenze
- Da Componente
1.5.1
: la libreria dei componenti ora dipende dal ciclo di vita2.5.1
. (Id204c) - Da Frammento
1.5.1
: la libreria dei frammenti ora dipende da 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 posticipato non comporta più la perdita del frammento posticipato. (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
- È stato risolto un problema per cui la rimozione di qualsiasi frammento, indipendentemente dal fatto che avesse aggiunto voci di menu o meno, invalidava il menu dell'attività. (50f098, b/244336571)
- È stato risolto un problema per cui la chiamata a
clearFragmentResultListener
all'interno di unsetFragmentResultListener
non funzionava seLifecycle
era giàSTARTED
ed era già disponibile un risultato. (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
nell'ambito dello stato salvato del registry della 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
- È stato corretto un errore relativo all'utilizzo di un
FragmentController
personalizzato con un host che non implementa un'interfaccia di callback del provider (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) e alla chiamata della relativa funzione di invio deprecata che non riusciva a inviare ai frammenti secondari. (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
- È stato corretto un errore che causava il ricevimento di callback
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
eonConfigurationChanged()
da parte dei frammenti nello stack precedente. (I34581, I8dfe6, b/242570955) - I frammenti figlio nidificati non riceveranno più più 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
- È stato risolto un problema per cui l'esecuzione di una transazione
popBackStack()
e unareplace()
contemporaneamente poteva causare l'esecuzione delAnimation
/Animator
errato nei frammenti in uscita. (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
- È stata risolta una regressione in
DialogFragmentCallbacksDetector
per cui l'utilizzo della versione di lint inclusa in 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 raccolta di frammenti ora dipende da 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
senza stato tramiteCreationExtras
di Lifecycle2.5.0
. - Integrazione della finestra di dialogo del componente: ora
DialogFragment
utilizzaComponentDialog
tramite l'attività1.5.0
come finestra di dialogo predefinita restituita daonCreateDialog()
. - Refactoring dello stato dell'istanza salvato: i frammenti hanno iniziato a cambiare il modo in cui salvano lo stato dell'istanza. Questo è un tentativo di identificare chiaramente lo stato salvato nel frammento e la relativa origine. Le modifiche attuali includono quanto segue:
FragmentManager
ora salva lo stato dell'istanza salvata in unBundle
anziché direttamente in unParcelable
personalizzato.- I risultati impostati tramite
Fragment Result APIs
che non sono ancora stati pubblicati vengono ora salvati separatamente dallo stato interno delFragmentManager
. - Lo stato associato a ogni singolo frammento viene ora salvato separatamente dallo stato interno di
FragmentManager
, consentendo di correlare la quantità di stato salvato associata a un singolo frammento con gli ID univoci presenti nel logging di debug diFragmentManager
.Fragment
Altre modifiche
FragmentStrictMode
ora offre la possibilità ai frammenti di terze parti privati di bypassare sanzioni per violazioni specifiche 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 Activity1.4.0
forniscono una superficie API equivalente testabile 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 del
FragmentManager
, consentendo di correlare la quantità di stato salvato associata 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 all'API
- A
DialogFragment
è stato aggiunto un nuovo metododismissNow
che utilizzacommitNow
per parità con la funzioneshowNow
. Tieni presente che in questo modoDialog
non verrà chiuso immediatamente, ma verrà aggiornato 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. Si tratta del primo passo per garantire una maggiore trasparenza su ciò che viene effettivamente salvato da Fragments. (I93807, b/207158202)- I risultati impostati tramite le API Fragment Result che non sono ancora stati pubblicati vengono ora salvati separatamente dallo stato interno di
FragmentManager
. In questo modo, avrai una maggiore trasparenza sui risultati che vengono salvati nell'ambito 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 all'API
setHasOptionsMenu()
diFragment
è stato deprecato. Per gestire i menu e i relativi elementi, è necessario utilizzare le nuove API di 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 all'API
- Le API Fragment per fornire un menu al
ActionBar
della tua attività sono state ritirate perché accoppiano strettamente il frammento all'attività e non sono verificabili singolarmente. Le APIMenuHost
eMenuProvider
aggiunte in Activity1.4.0-alpha01
forniscono una superficie API equivalente testabile e consapevole del ciclo di vita che i frammenti devono utilizzare. (I50a59, I20758)
Correzioni di bug
SavedStateViewFactory
ora supporta l'utilizzo diCreationExtras
anche se è 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 all'API
- Ora puoi passare
CreationExtras
alle funzioniby viewModels()
eby activityViewModels()
. (Ibefe7, b/217601110)
Modifiche al comportamento
DialogFragment
ora utilizzaComponentDialog
come dialogo predefinito restituito 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 la possibilità ai frammenti di terze parti privati di aggirare sanzioni per violazioni specifiche 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 ViewModel CreationExtras, introdotto nell'ambito del ciclo di vita2.5.0-alpha01
. (I3060b, b/207012585)
Correzioni di bug
- Dal Frammento
1.4.1
:FragmentContainerView
non genera più un'eccezione di stato illegale quando gli ID vista generati da XML hanno valori negativi. (Ic185b, b/213086140) - Dal componente
1.4.1
: quando utilizzi un lambdaownerProducer
personalizzato con la funzione lazyby viewModels()
, ora verrà utilizzato ildefaultViewModelProviderFactory
del proprietario se non viene fornito unownerProducer
personalizzato, anziché utilizzare sempre la factory del componente.ViewModelProvider.Factory
(I56170, b/214106513) - È stato corretto un arresto anomalo quando si accede a un
ViewModel
per la prima volta da unregisterForActivityResult()
callback 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 di stato illegale quando gli ID vista generati da XML hanno valori negativi. (Ic185b, b/213086140)- Quando viene utilizzata una lambda
ownerProducer
personalizzata con la funzione lazyby viewModels()
, ora verrà utilizzato ildefaultViewModelProviderFactory
del proprietario se non viene fornito unViewModelProvider.Factory
personalizzato, anziché utilizzare sempre la factory 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 ti consentono di verificare che la tua app o le librerie di cui hai bisogno non chiamino API di frammenti ritirate. Quando viene rilevata una violazione, puoi scegliere di stampare un messaggio di log, attivare il tuo ascoltatore personalizzato o arrestare in modo anomalo l'app. IlFragmentStrictMode.Policy
che controlla quali controlli sono abilitati e quali "sanzioni" vengono attivate può essere impostato su unFragmentManager
tramite il nuovo metodosetStrictModePolicy()
. Questo criterio si applica aFragmentManager
e, in modo trasitivo, a tutti i gestori dei 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 contenitore. Utilizza la stessa logica difindFragmentById()
con l'ID diFragmentContainerView
, ma consente di collegare la chiamata.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
ora implementaCloseable
, il che ti consente di utilizzarlo con il metodouse
di Kotlin o con try-with-resources.È stato aggiunto
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
il parametro per specificare se attivare l'animazione di transizione Attività standard presa dal tema nella transizione dei frammenti.L'API sperimentale di
FragmentManager.enableNewStateManager(boolean)
è stata rimossa e il nuovo gestore degli stati è ora l'unica opzione disponibile.
Più serie di foto simili
FragmentManager
gestisce uno stack di ritorno composto da transazioni di frammenti che hanno utilizzato addToBackStack()
. In questo modo puoi visualizzare queste transazioni e tornare allo stato precedente, utilizzando i meccanismi per il salvataggio dello stato con i frammenti per consentire ai frammenti di ripristinare il loro stato in modo appropriato.
Questa release espande questi 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 del FragmentTransaction
e lo stato di ogni frammento aggiunto in queste transazioni e ti consentono di ripristinare in un secondo momento le transazioni e i relativi frammenti con lo stato invariato. In questo modo puoi "spostarti" efficacemente tra più serie di schede precedenti salvando la serie corrente e ripristinando una serie salvata.
saveBackStack()
funziona in modo simile a popBackStack()
in quanto è asincrono e comporta l'annullamento di tutte le transazioni dei frammenti che rimandano a quel nome specifico ("popped") e la distruzione e la rimozione di eventuali frammenti aggiunti, ma differisce in alcuni aspetti importanti:
saveBackStack()
è sempre incluso.- A differenza di
popBackStack()
, che mostra tutte le transazioni nello stack secondario se il nome specificato non viene trovato nello stack secondario o se viene fornito un nome null,saveBackStack()
non fa nulla se non hai eseguito in precedenza il commit di una transazione del frammento utilizzandoaddToBackStack()
con quel nome esatto non nullo. - Lo stato di tutti i frammenti aggiunti da queste transazioni viene salvato. Ciò significa che lo stato della visualizzazione di ogni frammento viene memorizzato,
onSaveInstanceState()
di ogni frammento viene chiamato e lo stato viene ripristinato e tutte le istanze diViewModel
associate a questi frammenti vengono conservate (eonCleared()
non viene chiamato su di esse).
Le transazioni dei frammenti che possono essere utilizzate con saveBackStack()
devono soddisfare determinati criteri:
- Ogni transazione del frammento deve utilizzare
setReorderingAllowed(true)
per garantire che le transazioni possano essere ripristinate come un'unica operazione atomica. - L'insieme di transazioni salvate deve essere autonomo (ovvero non deve fare riferimento esplicito a frammenti esterni a questo insieme di transazioni) per garantire che possano essere ripristinate in un secondo momento, indipendentemente dalle modifiche apportate allo stack precedente nel frattempo.
- Nessun frammento salvato può essere un frammento mantenuto o avere un frammento mantenuto nel proprio insieme transitivo di frammenti figlio per garantire che
FragmentManager
non restituisca riferimenti ai frammenti salvati dopo il salvataggio della pila di ritorno.
Analogamente a saveBackStack()
, restoreBackStack()
e clearBackStack()
, che rispettivamente ripristinano o cancellano una pila di chiamate salvata in precedenza, non fanno nulla se non hai chiamato in precedenza saveBackStack()
con lo stesso nome.
Per ulteriori informazioni, consulta Più stack Indietro: un'analisi approfondita.
Versione 1.4.0-rc01
3 novembre 2021
androidx.fragment:fragment:1.4.0-rc01
rilasciato senza modifiche rispetto a Fragment 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 inviano
onHiddenChanged()
giù per tutta la gerarchia prima di avviare il proprio callback. (Iedc20, b/77504618) - Ora la tastiera si chiude automaticamente quando passi da un frammento con una tastiera aperta a un frammento con una vista recycler. (I8b842, b/196852211)
DialogFragment
ora utilizzasetReorderingAllowed(true)
per tutte le transazioni che crea quando chiamishow()
,showNow()
odismiss()
. (Ie2c14)- L'avviso Lint estremamente lungo di
DetachAndAttachFragmentInSameFragmentTransaction
è stato abbreviato inDetachAndAttachSameFragment
. (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.
Lint
- È stato aggiunto l'avviso
DetachAndAttachFragmentInSameFragmentTransaction
lint per rilevare le chiamate sia adetach()
che aattach()
sullo stessoFragment
nello stessoFragmentTransaction
. Poiché queste operazioni complementari si annullano a vicenda quando vengono eseguite nella stessa transazione, devono essere suddivise in transazioni separate per poter effettivamente fare qualcosa. (aosp/1832956, b/200867930) - È stato aggiunto l'errore di lint
FragmentAddMenuProvider
per correggere gli utilizzi del ciclo di vita del frammento nel ciclo di vita della visualizzazione del frammento quando si utilizza l'APIaddMenuProvider
diMenuHost
. (aosp/1830457, b/200326272)
Aggiornamenti della documentazione
- Il messaggio di ritiro per le API ora gestite dalle API di risultati attività, ovvero
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
eonRequestPermissionsResult
, sono stati tutti espansi con ulteriori dettagli. (cce80f) - Il messaggio di ritiro di
onActivityCreated()
sia perFragment
che perDialogFragment
è stato espanso 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 all'API
- La classe
FragmentContainerView
è stata riscritta in Kotlin per garantire che la funzionegetFragment
rispetti correttamente la nullabilità. (If694a, b/189629145) - FragmentStrictMode è ora scritto in Kotlin (I11767, b/199183506)
Correzioni di bug
- È stato risolto un problema per cui lo stato di un frammento
aggiunto con
setReorderingAllowed(true)
e poi rimosso immediatamente prima dell'esecuzione delle transazioni in attesa 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
UseRequireInsteadOfGet
controllo Lint per gestire meglio le parentesi ridondanti. (I2d865) - È stato migliorato il
UseGetLayoutInflater
controllo Lint per gestire casi limite aggiuntivi. (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 significative. 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
- È stato risolto un problema relativo a più serie di elementi nascosti quando si passa rapidamente da una serie all'altra, che venivano visualizzate come
IllegalStateException
durante il ripristino di unFragmentTransaction
o come una seconda copia di un frammento. (I9039f) - È stato risolto un problema per cui
FragmentManager
manteneva una copia dello stato precedentemente salvato tramitesaveBackStack()
anche dopo il suo recupero. (Ied212) - Il metodo
dismissAllowingStateLoss()
diDialogFragment
non si arresta più in modo anomalo quando lo chiami dopo aver salvato lo stato quando aggiungi specificamente 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 Fragment
1.3.6
: la visualizzazione del frammento è ora impostata correttamente suGONE
quando si utilizzahide()
se nella visualizzazione principale è impostatotransitionGroup=”true”
. (aosp/1766655, b/193603427) - Da Fragment
1.3.6
: oraFragmentActivity
sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita che sostituisce. (I6db7a)
Aggiornamento delle dipendenze
- Da Frammento
1.3.6
: ora i frammenti 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 all'API
FragmentManager
ora utilizzaSavedStateRegistry
sotto il cofano per salvare il proprio stato. Anche i metodisaveAllState()
erestoreSavedState()
sono stati deprecati inFragmentController
. Se utilizziFragmentController
per ospitare frammenti al di fuori diFragmentActivity
, devi implementareSavedStateRegistryOwner
inFragmentHostCallbacks
. (Iba68e, b/188734238)
Correzioni di bug
- Risolto un problema per cui la chiamata a
saveBackStack()
nell'ambito del supporto di più backstack non andava a buon fine se eseguita contemporaneamente all'esecuzione di unFragmentTransaction
che utilizzavareplace()
. (I73137) - È stato corretto un
NullPointerException
che si verificava dopo il ripristino manuale di un back stack salvato contenente più transazioni quando si utilizzava l'APIrestoreBackStack()
per il supporto di più back stack. È stato inoltre risolto un problema per cuisetReorderingAllowed(true)
non veniva controllato per tutte le transazioni. (I8c593) - È stato risolto un problema per cui
FragmentManager
continuava erroneamente a ripristinare lo stato precedentemente salvato dei frammenti anche dopo la rimozione di questi frammenti daFragmentManager
, causando così un aumento continuo 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 che contiene il contenitore principale a cui sarebbe stato aggiunto il frammento. (Ic33a7)WrongFragmentContainerViolation
ora ha un messaggio di errore più dettagliato che include il contenitore a cui veniva aggiunto il frammento. (Ib55f8)- Le classi di casi d'uso per
TargetFragmentUsageViolation
ora includono messaggi di errore più dettagliati per includere il frammento che causa la violazione e qualsiasi altra informazione in esso contenuta. (Icc6ac) - Le classi che estendono
RetainInstanceUsageViolation
ora hanno messaggi di errore più dettagliati che includono il frammento che causa la violazione. (I6bd55) FragmentReuseViolation
ora 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 il valore impostato per il suggerimento visibile all'utente. (Ib2d5f)
Modifiche al comportamento
- È stata ripristinata la limitazione per le chiamate a
fitsSystemWindows
su unFragmentContainerView
. L'app non si arresta più in modo anomalo. (6b8ddd, b/190622202)
Correzioni di bug
- Da Frammento
1.3.5
: è stata corretta una regressione nelle transizioni degli elementi condivisi introdotta in Frammento1.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ù erroriIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304) FragmentManager
non si arresterà più in modo anomalo quando provi a nascondere un frammento in fase di rimozione. (I573dd, b/183634730)- Il controllo lint di
OnCreateDialogIncorrectCallback
non causerà 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 la registrazione è attivata tramiteFragmentManager
, indipendentemente dal criterio di modalità con restrizioni attualmente in uso. (I02df6, b/187872638) FragmentStrictMode
ora supporta l'esenzione di determinate classiFragment
dalla modalità rigorosaViolation
, consentendo a queste classi di bypassare eventuali penalità. (Ib4e5d, b/184786736)La classe
FragmentStrictMode
Violation
è stata espansa per aggiungere informazioni sulla struttura in base a ogni violazione. In questo modo puoi verificare esattamente cosa ha causato la violazione, oltre al frammento in violazione (If5118, b/187871150). OgniViolation
contiene quanto segue:WrongFragmentContainerViolation
ora contieneViewGroup
a cui si stava tentando di aggiungereFragment
. (I83c75, b/187871150)TargetFragmentUsageViolation
è stato espanso inSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
eGetTargetFragmentRequestCodeUsageViolation
, conSetTargetFragmentUsageViolation
contenente il frammento target e il codice di richiesta. (I741b4, b/187871150)SetUserVisibleHintViolation
ora contiene il valore booleano passato asetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
ora contiene il ViewGroup in cui il tag<fragment>
stava tentando di gonfiare 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 al comportamento
FragmentContainerView
ora genera un'eccezione quando si tenta di modificare l'attributofitsSystemWindow
tramite codice o XML. Le rientranze devono essere gestite dalla visualizzazione 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 contenitore. Utilizza la stessa logica difindFragmentById()
con l'ID diFragmentContainerView
, ma consente di collegare la chiamata. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
È stato aggiunto
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
il parametro per specificare se attivare l'animazione di transizione Attività standard presa dal tema nella transizione dei frammenti. (I46652)
Più serie di foto simili
FragmentManager
gestisce uno stack di ritorno composto da transazioni di frammenti che hanno utilizzato addToBackStack()
. In questo modo puoi visualizzare queste transazioni e tornare allo stato precedente, utilizzando i meccanismi per il salvataggio dello stato con i frammenti per consentire ai frammenti di ripristinare il loro stato in modo appropriato.
Questa release amplia questi meccanismi fornendo due nuove API FragmentManager
: saveBackStack(String name)
e restoreBackStack(String name)
. Queste API utilizzano lo stesso name
di addToBackStack()
per salvare lo stato del FragmentTransaction
e lo stato di ogni frammento aggiunto in queste transazioni e ti consentono di ripristinare in un secondo momento le transazioni e i relativi frammenti con lo stato invariato. In questo modo puoi "spostarti" efficacemente tra più serie di schede precedenti salvando la serie corrente e ripristinando una serie salvata.
saveBackStack()
funziona in modo simile a popBackStack()
in quanto è asincrono e comporta l'annullamento di tutte le transazioni dei frammenti che rimandano a quel nome specifico ("popped") e la distruzione e la rimozione di eventuali frammenti aggiunti, ma differisce in alcuni aspetti importanti:
saveBackStack()
è sempre incluso.- A differenza di
popBackStack()
, che mostra tutte le transazioni nello stack secondario se il nome specificato non viene trovato nello stack secondario o se viene fornito un nome null,saveBackStack()
non fa nulla se non hai eseguito in precedenza il commit di una transazione del frammento utilizzandoaddToBackStack()
con quel nome esatto non nullo. - Lo stato di tutti i frammenti aggiunti da queste transazioni viene salvato. Ciò significa che lo stato della visualizzazione di ogni frammento viene memorizzato,
onSaveInstanceState()
di ogni frammento viene chiamato e lo stato viene ripristinato e tutte le istanze diViewModel
associate a questi frammenti vengono conservate (eonCleared()
non viene chiamato su di esse).
Le transazioni dei frammenti che possono essere utilizzate con saveBackStack()
devono soddisfare determinati criteri:
- Ogni transazione del frammento deve utilizzare
setReorderingAllowed(true)
per garantire che le transazioni possano essere ripristinate come un'unica operazione atomica. - L'insieme di transazioni salvate deve essere autonomo (ovvero non deve fare riferimento esplicito a frammenti esterni a questo insieme di transazioni) per garantire che possano essere ripristinate in un secondo momento, indipendentemente dalle modifiche apportate allo stack precedente nel frattempo.
- Nessun frammento salvato può essere un frammento mantenuto o avere un frammento mantenuto nel proprio insieme transitivo di frammenti figlio per garantire che
FragmentManager
non restituisca riferimenti ai frammenti salvati dopo il salvataggio della pila di ritorno.
Come saveBackStack()
, restoreBackStack()
non fa nulla se non hai già chiamato saveBackStack()
con lo stesso nome. (b/80029773)
Modalità StrictMode dei frammenti
Le API FragmentStrictMode
forniscono controlli di runtime che ti consentono di verificare che la tua app o le librerie di cui hai bisogno non chiamino API di frammenti ritirate. Quando viene rilevata una violazione, puoi scegliere di stampare un messaggio di log, attivare il tuo ascoltatore personalizzato o arrestare in modo anomalo l'app. Il FragmentStrictMode.Policy
che controlla quali controlli sono abilitati e quali "sanzioni" vengono attivate può essere impostato su un FragmentManager
tramite il nuovo metodo setStrictModePolicy()
. Questo criterio si applica a FragmentManager
e, in modo trasitivo, a tutti i gestori dei frammenti secondari che non impostano un proprio criterio univoco. (#123, #131, #150, b/143774122)
detectFragmentReuse()
rileva se un'istanzaFragment
rimossa in precedenza viene aggiunta di nuovo a unFragmentManager
. Non devi mai interagire con un'istanza diFragment
o conservare un riferimento a essa dopo che è stata distrutta e rimossa da unFragmentManager
. (#142, b/153738653)detectFragmentTagUsage()
rileva quando utilizzi il tag<fragment>
nel layout XML. Devi sempre utilizzareFragmentContainerView
quando gonfi i frammenti all'interno del layout. (#141, b/153738235)detectWrongFragmentContainer()
rileva quando aggiungi un frammento a un contenitore che non è unFragmentContainerView
. Devi sempre utilizzareFragmentContainerView
come contenitore per i frammenti nel layout. (#146, b/181137036)detectRetainInstanceUsage()
rileva quando utilizzi le APIsetRetainInstance()
ogetRetainInstance()
deprecate. (#140, b/153737954)detectSetUserVisibleHint()
rileva quando utilizzi l'APIsetUserVisibleHint()
obsoleta. (#136, b/153738974)detectTargetFragmentUsage()
rileva quando utilizzi le APIsetTargetFragment()
,getTargetFragment()
ogetTargetRequestCode()
obsolete. (#139, b/153737745)
Modifiche all'API
- L'API sperimentale di
FragmentManager.enableNewStateManager(boolean)
è stata rimossa e il nuovo gestore degli stati è ora l'unica opzione disponibile. (I90036, b/162776418) FragmentScenario
ora implementaCloseable
, il che ti consente di utilizzarlo con il metodouse
di Kotlin o con try-with-resources. (#121, b/143774122)
Nuovi controlli Lint
- Il controllo Lint
UseGetLayoutInflater
ora avvisa quando viene utilizzatoLayoutInflater.from(Context)
all'interno di unDialogFragment
. Devi sempre utilizzare il metodogetLayoutInflater()
del frammento di dialogo per ottenere il valore appropriato perLayoutInflater
. (#156, b/170781346) - Il controllo Lint di
DialogFragmentCallbacksDetector
ora avvisa quando viene chiamatosetOnCancelListener
osetOnDismissListener
nel metodoonCreateDialog()
di unDialogFragment
. Questi ascoltatori sono di proprietà delDialogFragment
stesso e devi sostituireonCancel()
eonDismiss()
per ricevere questi callback. (#171, b/181780047, b/187524311)
Correzioni di bug
- Dal Fragment 1.3.4: è stata corretta una regressione introdotta nel Fragment
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 correttamenteViewModelProvider.Factory
fornito dal tuo frammento se sostituiscegetDefaultViewModelProviderFactory()
(come fanno i frammenti annotati@AndroidEntryPoint
quando si utilizza Hilt). Se non sostituisci questo metodo, viene creato unSavedStateViewModelFactory
che salva e ripristina il proprio stato insieme alla visualizzazione del frammento come valore predefinito. (I5cbfa, b/186097368) - Dal Frammento 1.3.4: quando utilizzi
FragmentContainerView
sull'API 29, gli insets non verranno più inviati indefinitamente, risolvendo i problemi relativi alle istanzeBottomNavigationBar
eFloatingActionButton
. (I1bb78, b/186012452) - Da Fragment 1.3.4: ora puoi recuperare il tuo Parcelable dal bundle del risultato del frammento dopo l'interruzione del processo. (I65932, b/187443158)
- Dal Fragment 1.3.4: quando esegui una transizione di elementi condivisi su un ViewGroup, se
transitionGroup
è impostato su false, ora la transizione verrà eseguita correttamente. (I99675)
Contributo esterno
- Grazie a simonschiller per aver fatto in modo che
FragmentScenario
implementasseCloseable
. (#121, b/143774122) - Grazie a simonschiller per aver aggiunto l'intera API
FragmentStrictMode
a questa release. (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - Grazie a tatocaster per aver aggiunto il controllo lint
UseGetLayoutInflater
. (#156, b/170781346) - Grazie a 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 Fragment
1.4.0-alpha03
:FragmentManager
non avrà più arresti anomali quando provi a nascondere un frammento in fase di rimozione. (I573dd, b/183634730) - La visualizzazione del frammento è ora impostata correttamente su
GONE
quando si utilizzahide()
se nella visualizzazione principale è impostatotransitionGroup=”true”
. (aosp/1766655, b/193603427) - Ora
FragmentActivity
sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita che sostituisce. (I6db7a)
Aggiornamento delle dipendenze
- Da Frammento
1.3.6
: ora i frammenti 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
- È stata corretta una regressione nelle transizioni degli elementi condivisi introdotta nel Frammento
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ù erroriIndexOutOfBoundsException
. (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 Fragment
1.3.3
quando si utilizza l'APIViewTreeViewModelStoreOwner.get()
conViewModelProvider
o il metodo Jetpack Compose diviewModel()
all'interno di un frammento quando si utilizza Hilt. Questi casi d'uso ora utilizzano correttamente il valoreViewModelProvider.Factory
fornito dal frammento se sostituiscegetDefaultViewModelProviderFactory()
(come fanno i frammenti annotati@AndroidEntryPoint
). Se non sostituisci questo metodo, viene creato unSavedStateViewModelFactory
che salva e ripristina il proprio stato insieme alla visualizzazione del frammento come valore predefinito. (I5cbfa, b/186097368) - Quando utilizzi
FragmentContainerView
sull'API 29, gli inset non verranno più inviati indefinitamente, risolvendo i problemi relativi alle istanzeBottomNavigationBar
eFloatingActionButton
. (I1bb78, b/186012452) - Ora puoi recuperare il tuo Parcelable dal bundle del risultato del frammento dopo l'interruzione del processo. (I65932, b/187443158)
- Quando esegui una transizione di elementi condivisi su un ViewGroup, se
transitionGroup
è impostato su false, ora 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'utilizzo di
SavedStateViewModelFactory
ora funziona se utilizzato conSavedStateRegistryOwner
restituito da l'utilizzo diViewTreeSavedStateRegistryOwner.get()
con la visualizzazione del frammento. (I21acf, b/181577191)
Correzioni di bug
- È stata corretta una regressione introdotta nel componente
1.3.2
che causava l'interruzione dell'esecuzione delle animazionipopEnter
quando veniva visualizzato unFragmentTransaction
che includeva un'operazionesetPrimaryNavFragment
, come quelle utilizzate daNavHostFragment
. (I38c87, b/183877426) FragmentContainerView
ora garantisce che a ogniFragment
venga inviato un nuovo insieme diWindowInsets
, in modo che ogni frammento possa ora utilizzare in modo indipendente gli intarsi. (I63f68, b/172153900)DialogFragment
ora 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 dalle finestre di dialogo comeBottomSheetDialog
. (Ie6279, b/180021387)FragmentManager.dump()
ora inserisce correttamente i rientri nel primo frammento dell'elenco dei frammenti attivi. (If5c33, b/183705451)
Correzioni di bug del nuovo State Manager
- Il nuovo gestore dello stato del frammento ora gestisce correttamente le transizioni di uscita con 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.
Correzioni di bug del nuovo State Manager
- Quando esegui contemporaneamente le operazioni
popBackStack()
ecommit()
, ora l'ultima operazione imposterà la direzione per tutte le animazioni anziché eseguire alcune animazioni pop e alcune animazioni di entrata. (I7072e, b/181142246) - Le visualizzazioni all'interno di una gerarchia di elementi condivisi non avranno più il nome della transizione cancellato quando viene eseguita una transizione di elementi condivisi. (I4d4a6, b/179934757)
Aggiornamenti delle dipendenze
- Ora Fragment dipende da Activity 1.2.2, risolvendo un problema con il controllo lint
InvalidFragmentVersionForActivityResult
di Activity quando si utilizza Fragment 1.3.1 o versioni successive. - Il frammento ora dipende da Lifecycle 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 all'interno di un
DialogFragment
possono accedere ai proprietari di ViewTree tramite DecorView, garantendo cheDialogFragment
possa essere utilizzato conComposeView
. (Ib9290, b/180691023)
Correzioni di bug
- I frammenti gonfiati in un'attività
RESUMED
esistente utilizzando FragmentContainerView ora vengono visualizzati correttamente dopo una modifica della configurazione. (Ie14c8, b/180538371) - Non è più presente un
}
aggiuntivo alla fine del frammentotoString()
(I54705, b/177761088) - I metodi sostituiti in FragmentActivity ora ereditano correttamente il metodo base javaDoc (I736ce, b/139548782)
- La documentazione di
setFragmentResult
esetFragmentResultListener
è stata aggiornata per indicare che non accettano più valori null (I990ba, b/178348386)
Correzioni di bug del nuovo State Manager
- È stata risolta una perdita di memoria nei frammenti causata da
mFocusedView
(Ib4e9e, b/179925887) - I frammenti ora chiamano correttamente
onCreateOptionsMenu
quando si utilizzano le transazioni di visualizzazione/nascondimento (I8bce8, b/180255554) - I frammenti secondari con transizioni che iniziano prima della disposizione del frammento ora raggiungeranno correttamente
RESUMED
(Ic11e6, b/180825150) - I frammenti gonfiati utilizzando il tag
<fragment>
ora verranno sempre visualizzati inRESUMED
(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.
Modifiche principali dalla versione 1.2.0
- Nuovo gestore degli stati: una significativa riscrittura degli elementi interni di
FragmentManager
ha risolto numerosi problemi relativi all'invio di eventi di ciclo di vita, animazioni e transizioni e alla gestione dei frammenti posticipati. Integrazione dell'API Activity Result: è stato aggiunto il supporto per l'API
ActivityResultRegistry
introdotta in Attività1.2.0
per gestire i flussistartActivityForResult()
+onActivityResult()
erequestPermissions()
+onRequestPermissionsResult()
senza eseguire l'override dei metodi nel frammento, oltre a fornire hook per il test di questi flussi. Consulta l'articolo aggiornato Ottenere un risultato da un'attività.- Questa release corregge una serie di problemi relativi a codici di richiesta non validi e all'invio di richieste di autorizzazione che impediscono il funzionamento dell'API Activity Result nelle versioni precedenti di
FragmentActivity
. Per utilizzare le API Activity Result in unFragmentActivity
oAppCompatActivity
, devi eseguire l'upgrade a Fragment 1.3.0.
- Questa release corregge una serie di problemi relativi a codici di richiesta non validi e all'invio di richieste di autorizzazione che impediscono il funzionamento dell'API Activity Result nelle versioni precedenti di
API Fragment Result: è stato aggiunto il supporto per il passaggio dei risultati tra due frammenti tramite nuove API il giorno
FragmentManager
. Questo funziona per i frammenti di gerarchia (principale/secondario), DialogFragment e i frammenti in Navigation e garantisce che i risultati vengano inviati al tuo frammento solo se è almenoSTARTED
. Le API dei frammenti target sono state ritirate a favore di queste nuove API. Consulta Ottenere risultati utilizzando l'API Fragment Result.FragmentOnAttachListener
: il callbackonAttachFragment()
suFragmentActivity
eFragment
è stato deprecato. È stato aggiunto un nuovoFragmentOnAttachListener
per fornire un'alternativa più flessibile, che consente la delega dionAttachFragment()
a listener separati e verificabili e il supporto per l'aggiunta di un listener a FragmentManager diversi dal FragmentManager diretto.Miglioramenti a
FragmentScenario
: 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 su tutti i livelli dell'API e disaccoppiando lo stato del frammento dall'attività sottostante.FragmentScenario
ora supporta l'impostazione di unLifecycle.State
iniziale per supportare l'affermazione dello stato del frammento prima di passare a ogniLifecycle.State
per la prima volta.- Ora esiste un'alternativa all'API
FragmentScenario
dionFragment
sotto forma del metodo di estensione reificato di KotlinwithFragment
che consente di restituire un valore. In particolare, riavvia le eccezioni sollevate nel blocco specificato.
Supporto di
ViewTree
:Fragment
ora supporta le APIViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
eViewTreeSavedStateRegistryOwner
aggiunte in Lifecycle2.3.0
e SavedState1.1.0
in modo da restituire il frammento comeViewModelStoreOwner
e unSavedStateRegistryOwner
e unLifecycleOwner
legati al ciclo di vita della vista del frammento quando si utilizza unView
all'interno di unFragment
.Modifiche all'animazione
TRANSIT_
: gli effetti predefiniti dei frammenti,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
eTRANSIT_FRAGMENT_FADE
, ora utilizzanoAnimator
anzichéAnimation
. Le risorse utilizzate per creare questi animatori sono ora private.Ritiro di
setRetainInstance()
: il metodosetRetainInstance()
in Fragments è stato ritirato. Con l'introduzione dei ViewModel, gli sviluppatori hanno a disposizione un'API specifica per mantenere lo stato che può essere associata ad attività, frammenti e grafici di navigazione. In questo modo, gli sviluppatori possono utilizzare un normale frammento non mantenuto e mantenere separato lo stato specifico che vogliono conservare, evitando una fonte comune di perdite e mantenendo le proprietà utili di una singola creazione e distruzione 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. Consulta 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
- È stato risolto un problema per cui un
DialogFragment
principale veniva visualizzato sopra unDialogFragment
secondario dopo una modifica alla configurazione. Ora i frammenti di finestra di dialogo secondari vengono sempre visualizzati sopra un frammento di finestra di dialogo principale. (I30806, b/177439520) - È stato risolto il problema per cui l'esecuzione di un'operazione
hide
con unAnimation
faceva lampeggiare il frammento nascosto alla fine dell'animazione. (I57e22, b/175417675) - I frammenti con le transizioni aggiunte prima dell'aggancio della gerarchia delle visualizzazioni ora raggiungono correttamente
RESUMED
. (I1fc1d, b/177154873)
Correzioni di bug del nuovo State Manager
- La vista del frammento
Lifecycle
ora gestisce correttamente i casi in cui la vista del frammento viene distrutta prima cheLifecycle
raggiungaCREATED
, evitando eccezioni che indicano "nessun evento da INITIALIZED". (eda2bd, b/176138645) - I frammenti che utilizzano un
Animator
ora vengono visualizzati nell'ordine corretto quando si utilizzaFragmentContainerView
. (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 principale chiamasetMenuVisibility(false)
. (Id7de8, b/173203654)
Correzioni di bug del nuovo State Manager
- È stato corretto un problema di perdita e di artefatti visivi quando si aggiunge un frammento con un
Animation
a unFragmentContainerView
e poi si interrompe l'aggiunta con un'operazione pop. (I952d8) - È stato risolto un problema per cui la visualizzazione del frammento rimaneva nella gerarchia delle visualizzazioni se veniva sostituita durante i metodi
onCreate()
oonViewCreated()
. (I8a7d5) - Ora lo stato attivo viene ripristinato correttamente nelle visualizzazioni principali del frammento quando vengono riprese. (Ifc84b)
- La combinazione di operazioni di pop e sostituzione nella stessa transazione del frammento ora mostrerà le animazioni appropriate (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à con il codice sorgente e i file binari tramite l'utilizzo delle interfacce funzionali di Kotlin 1.4 perFragmentAction
. (I19d31)
Modifiche al comportamento
- Le viste FragmentContainer che non gonfiano un frammento utilizzando l'attributo
class
oandroid:name
ora possono essere utilizzate all'esterno di unFragmentActivity
. (Id4397, b/172266337) - Il tentativo di impostare il ciclo di vita massimo di un frammento su
DESTROYED
ora genera un erroreIllegalArgumentException
(Ie7651, b/170765622) - L'inizializzazione di un FragmentScenario con uno stato
DESTROYED
ora genera unIllegalArgumentException
(I73590, b/170765622)
Correzioni di bug del nuovo State Manager
- È stato risolto un problema per cui la visualizzazione non raggiungeva lo stato finale se interrompi una transizione di frammento che utilizzava un
Animator
o una delle opzioniTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Risolto un problema che impediva la distruzione corretta dei frammenti con un
Animation
in uscita. (I83d65) - I frammenti di uscita con effetti invertiti ora vengono annullati e riavviati correttamente con l'effetto di entrata corretto. (I62226, b/167092035)
- È stato risolto un problema per cui l'istruzione di uscita
Animator
di unhide()
non veniva eseguita. (Id7ffe) - I frammenti ora vengono visualizzati correttamente quando vengono posticipati e poi avviati immediatamente. (Ie713b, b/170022857)
- I frammenti che rimuovono la visualizzazione attivata durante un'animazione non tenteranno più di ripristinare lo stato attivo sulla visualizzazione scollegata una volta raggiunto
RESUMED
(I38c65, b/172925703)
Contributo esterno
FragmentFactory
ora memorizza nella cache le classi di frammenti separatamente per istanzeClassLoader
diverse. Grazie Simon Schiller. (#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
, a condizione che il frammento non sia stato spostato inCREATED
. (b/159662173)
Modifiche all'API
- Esegui l'upgrade di androidx per utilizzare Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Modifiche al comportamento
- I file di risorse dei frammenti sono stati impostati correttamente come privati. (aosp/1425237)
Correzioni di bug
- I frammenti gonfiati utilizzando il tag
<fragment>
ora aspetteranno correttamente che le relative visualizzazioni vengano aggiunte a un contenitore prima di passare a STARTED (I02f4c) - I frammenti visibili e da
setMaxLifecycle()
aCREATED
ora eseguono correttamente i relativi effetti di uscita. (b/165822335) - La rimozione di un frammento scollegato che non viene aggiunto alla pila di ritorno non causa più una perdita di memoria. Per gentile concessione di Nicklas Ansman Giertz. (b/166489383)
- Ora i frammenti attivi avranno sempre un
FragmentManager
non nullo e i frammenti con unFragmentManager
non nullo verranno sempre considerati attivi. (aosp/1422346) - Gli effetti predefiniti dei frammenti,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
eTRANSIT_FRAGMENT_FADE
, ora utilizzanoAnimator
anzichéAnimation
. (b/166155034)
Correzioni di bug del nuovo State Manager
- Ora i frammenti ripristinano correttamente lo stato di messa a fuoco della visualizzazione appena prima di iniziare l'animazione. (Icc256)
- I frammenti che hanno solo una transizione di elementi condivisi ora completano correttamente i propri effetti speciali, il che significa che passano effettivamente al loro stato finale (Iaebc7, b/166658128)
- Ora le visualizzazioni dei frammenti vengono sempre rimosse dal contenitore prima di essere distrutte. (Id5876)
- Il nuovo gestore degli stati ora rimuove in modo coerente la visualizzazione del frammento in uscita prima di aggiungerne una in entrata. (I41a6e)
- Le modifiche esplicite alla visibilità di una vista del frammento ora vengono rispettate dal nuovo gestore dello stato. Ciò significa che se imposti la visualizzazione di un frammento in entrata su
INVISIBLE
prima dell'inizio dell'animazione, rimarrà invisibile. (b/164481490) - Ora i frammenti danno la priorità a
Animators
rispetto aAnimations
, il che significa che un frammento con entrambi eseguirà soloAnimator
e ignoreràAnimation
. (b/167579557) - Il nuovo gestore degli stati non causa più l'intermittenza dei frammenti quando si utilizzano le animazioni di entrata. (b/163084315)
Problema noto
Quando utilizzi il nuovo gestore degli stati, se premi Indietro durante l'inserimento di un effetto speciale anziché tornare al frammento precedente, il vecchio frammento non viene mai aggiunto di nuovo, il che comporta la visualizzazione di 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 gestore dello stato
Questa release include un refactoring importante della gestione dello stato interno di FragmentManager
che influisce sull'invio di metodi di ciclo di vita, animazioni e transizioni e sulla modalità di gestione delle transazioni posticipate. Questa opzione è attiva per impostazione predefinita. Per ulteriori dettagli, consulta il post del blog Fragments: Rebuilding the Internals. (b/139536619, b/147749580)
- In
FragmentManager.enableNewStateManager(boolean)
è possibile utilizzare un'API sperimentale per controllare se FragmentManager utilizza il nuovo gestore dello stato. (I7b6ee)
I seguenti problemi vengono risolti solo quando si utilizza il nuovo gestore degli stati:
- Il frammento precedente di un'operazione
replace
viene ora interrotto correttamente prima dell'avvio del nuovo frammento. (b/161654580) - Ora i frammenti impediscono la presenza di più animazioni concorrenti negli stessi frammenti, evitando i casi in cui un
Animation
sostituisca tutti gli effettiTransition
o in cui vengano eseguiti sia unAnimator
sia unTransition
in un singolo frammento. (b/149569323) - Ora vengono eseguiti
enterTransition
eexitTranstion
di tutti i frammenti in entrata e in uscita, anziché solo l'ultimo frammento in entrata e il primo in uscita. (b/149344150) - I frammenti posticipati non rimangono più bloccati nello stato
CREATED
, ma passano allo statoSTARTED
insieme ad altri frammenti. (b/129035555) - Risolto un problema per cui
FragmentManager
eseguiva operazioni fuori sequenza quando mescolava una transazione riordinata posticipata e una transazione non riordinata. (b/147297731) - L'apertura di più frammenti contemporaneamente non comporterà più la visibilità temporanea dei frammenti intermedi quando si rimanda l'inserimento dei frammenti. (b/37140383)
FragmentManager
ora restituisce i frammenti corretti quando chiamafindFragmentById()
ofindFragmentByTag()
dall'interno del callbackonAttachFragment()
. (b/153082833)- I frammenti non chiamano più
onCreateView()
sui frammenti che vengono distrutti quando il frammento che li sostituisce viene posticipato. (b/143915710) - Il messaggio di errore visualizzato quando si tenta di combinare le istanze del framework
Transition
e di AndroidXTransition
ora menziona il frammento con la transizione non valida. (b/155574969)
Modifiche al comportamento
- Ora puoi chiamare
launch()
su unActivityResultLauncher
nel metodo del ciclo di vitaonCreate()
di un frammento. (b/161464278) - Ora, se chiami
registerForActivityResult()
dopoonCreate()
, viene generata un'eccezione che indica che questa operazione non è consentita, anziché non generare risultati dopo una modifica della configurazione. (b/162255449) FragmentActivity
ora utilizza l'APIOnContextAvailableListener
introdotta nell'attività1.2.0-alpha08
per ripristinare lo stato delFragmentManager
. Eventuali listener aggiunti alle sottoclassi diFragmentActivity
verranno eseguiti dopo questo listener. (I513da)
Correzioni di bug
ActivityOptions
trasmesso quando si utilizzastartIntentSenderForResult()
sono ora rispettati. (b/162247961)
Problema noto
- Quando utilizzi il nuovo gestore dello stato, se imposti direttamente la visibilità della vista principale del frammento dopo
onViewCreated()
e prima dionResume()
, la visibilità impostata viene sostituita daFragmentManager
, che controlla la visibilità della vista principale. Come soluzione alternativa, devi 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 un iniziale stato di ciclo di vitaCREATED
,STARTED
oRESUMED
anziché spostare sempre il frammento nello statoRESUMED
. (b/159662750)- È stata aggiunta un'alternativa all'API
FragmentScenario
dionFragment
sotto forma del metodo di estensione reified di KotlinwithFragment
che consente di restituire un valore. In particolare, riavvia le eccezioni sollevate nel blocco specificato. (b/158697631)
Modifiche al comportamento
FragmentScenario
ora utilizzasetMaxLifecycle()
per implementaremoveToState()
, garantendo un comportamento coerente su tutti i livelli dell'API e disaccoppiando lo stato del frammento dall'attività sottostante. (b/156527405)- L'oggetto
SavedStateRegistryOwner
restituito daViewTreeSavedStateRegistryOwner
è ora associato al ciclo di vita della vista del frammento. In questo modo, lo stato viene salvato e ripristinato contemporaneamente alla visualizzazione del frammento. (b/158503763)
Correzioni di bug
- Ora i frammenti aspettano che la visualizzazione del frammento venga collegata prima di chiamare
ViewCompat.requestApplyInsets()
, evitando i casi in cui la richiesta di insenatura veniva ignorata. (b/158095749) - Ora la chiamata a
clearFragmentResultListener
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 deprecato. È stato aggiunto un nuovoFragmentOnAttachListener
per fornire un'alternativa più flessibile, che consente la delega dionAttachFragment()
a listener separati e verificabili e il supporto per l'aggiunta di un listener ai gestori dei frammenti diversi dal gestore dei frammenti diretto. (I06d3d)
Correzioni di bug
- Ora lo stato di visualizzazione dei frammenti principali viene ripristinato prima di quello dei frammenti secondari, risolvendo un problema di ordinamento visivo dopo una modifica della configurazione quando un
DialogFragment
mostrava un altroDialogFragment
come frammento secondario. (b/157195715) - Risolto un problema per cui il controllo Lint di
UseRequireInsteadOfGet
non gestiva correttamente gli utilizzi in catena 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à
- È stato aggiunto il supporto per
ViewTreeViewModelStoreOwner
da Lifecycle2.3.0-alpha03
eViewTreeSavedStateRegistryOwner
da SavedState1.1.0-alpha01
quando si utilizza unView
all'interno di unFragment
. (aosp/1297993, aosp/1300264)
Modifiche all'API
- Le API
setFragmentResult()
esetFragmentResultListener()
ora accettano rispettivamenteBundle
eFragmentResultListener
non nulli. Per cancellare esplicitamente un risultato o un ascoltatore impostato in precedenza, utilizza i nuovi metodiclearFragmentResult()
eclearFragmentResultListener()
. (b/155416778) - Le estensioni Kotlin
setFragmentResultListener()
che accettano un lambda ora sono contrassegnate comeinline
. (b/155323404)
Modifiche al comportamento
startActivityForResult()
,startIntentSenderForResult()
erequestPermissions
inFragment
, precedentemente deprecati, ora utilizzano internamenteActivityResultRegistry
, rimuovendo così la limitazione all'utilizzo solo dei bit più bassi (inferiori a0xFFFF
) per i codici di richiesta quando si utilizzano queste API. (b/155518741)
Aggiornamenti della documentazione
- È stata ampliata la documentazione sui costruttori
Fragment(@LayoutRes int)
eDialogFragment(@LayoutRes int)
per chiarire che devono essere chiamati dal costruttore senza argomenti dei sottoclassi quando si utilizzaFragmentFactory
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à
- È stato aggiunto il supporto per il passaggio dei risultati tra due frammenti tramite nuove API su
FragmentManager
. Questo funziona per i frammenti di gerarchia (principale/secondario), DialogFragment e i frammenti in Navigation e garantisce che i risultati vengano inviati al tuo frammento solo se è almenoSTARTED
. (b/149787344)
Modifiche all'API
- Le API dei frammenti target sono state ritirate. Per passare dati tra i frammenti, è invece consigliabile utilizzare le nuove API FragmentResult. (b/149787344)
- Le API
startActivityForResult()
/onActivityResult()
erequestPermissions()
/onRequestPermissionsResult()
in Fragment sono state ritirate. Utilizza le API di risultati attività. (aosp/1290887) - Modifica in violazione dell'attività
1.2.0-alpha04
: il metodoprepareCall()
è stato rinominato inregisterForActivityResult()
. (aosp/1278717)
Correzioni di bug
getViewLifecycleOwner()
del frammento viene ora interrotto prima che venga chiamatoonSaveInstanceState()
, rispecchiando il comportamento del ciclo di vita del frammento. (b/154645875)- Ora l'istruzione
setMenuVisibility(false)
in un frammento modifica correttamente la visibilità dei menu forniti dai suoi frammenti secondari. (b/153593580) - È stato corretto un problema
illegalStateException
relativo all'aggiunta di un frammento alla gerarchia delle visualizzazioni di unDialogFragment
conFragmentContainerView
. (b/154366601) - Il metodo
getDefaultViewModelProviderFactory()
sui frammenti non si arresta più in modo anomalo quando li ospiti 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 all'API
- I metodi
prepareCall
suFragment
ora sonofinal
. (b/152439361)
Correzioni di bug
- È stata risolta una regressione introdotta nel componente Fragment
1.3.0-alpha02
quando si utilizzaBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - È stato corretto un arresto anomalo durante l'utilizzo di
prepareCall
da un frammento dopo una modifica della configurazione. (b/152137004) - Risolto un problema per cui le transizioni di elementi e uscita condivisi vengono ignorate quando si utilizza
setTargetFragment()
. (b/152023196) - Da Fragment
1.2.4
: sono state aggiornate le regole di ProGuard per i frammenti per consentire l'oscuramento dei frammenti conservati. (b/151605338) - Da Fragment
1.2.4
: è stata disattivata la regola di lintFragmentLiveDataObserve
per le classiDialogFragment
perché il loro ciclo di vita e il ciclo di vita della vista sono sempre sincronizzati, quindi è possibile utilizzarethis
oviewLifecycleOwner
quando si chiamaobserve
. (b/151765086)
Modifiche alle 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à
- È stato aggiunto il supporto per l'API
ActivityResultRegistry
introdotta 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 il test di questi flussi. Consulta l'articolo aggiornato Ottenere un risultato da un'attività. (b/125158199)
Modifiche all'API
DialogFragment
ora fornisce un costruttore che accetta un@LayoutRes
che indica il layout cheonCreateView()
deve gonfiare per impostazione predefinita. (b/150327080)- Il metodo
onActivityCreated()
è stato deprecato. Il codice che tocca la visualizzazione del frammento deve essere inserito inonViewCreated()
(che viene chiamato immediatamente prima dionActivityCreated()
) e l'altro codice di inizializzazione deve essere inserito inonCreate()
. Per ricevere un callback specificamente quando ilonCreate()
dell'attività è completato, unLifeCycleObserver
deve essere registrato nelLifecycle
dell'attività inonAttach()
e rimosso una volta ricevuto il callbackonCreate()
. (b/144309266)
Correzioni di bug
- Da Fragment
1.2.3
: è stato risolto un bug inDialogFragment
che causava unStackOverflowError
quando si chiamavagetLayoutInflater()
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 eliminate. (b/149665169) - Da Fragment
1.2.3
: sono stati corretti i falsi positivi nel controllo LintUseRequireInsteadOfGet
quando si utilizza un nome di variabile locale che oscura il nome della proprietà Kotlin. (b/149891163) - Dal componente
1.2.3
:FragmentContainerView
non genera più unUnsupportedOperationException
per l'utilizzo del 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à
- È stato aggiunto il supporto dell'API
ViewTreeLifecycleOwner.get(View)
aggiunta in Lifecycle2.3.0-alpha01
in modo che restituisca ilviewLifecycleOwner
del frammento comeLifecycleOwner
per tutte le visualizzazioni restituite daonCreateView()
. (aosp/1182955)
Modifiche all'API
- Il metodo
setRetainInstance()
in Fragments è stato deprecato. Con l'introduzione dei ViewModel, gli sviluppatori hanno a disposizione un'API specifica per mantenere lo stato che può essere associata ad attività, frammenti e grafici di navigazione. In questo modo, gli sviluppatori possono utilizzare un normale frammento non mantenuto e mantenere separato lo stato specifico che vogliono conservare, evitando una fonte comune di perdite e mantenendo le proprietà utili di una singola creazione e distruzione dello stato mantenuto (ovvero il costruttore diViewModel
e il callbackonCleared()
che riceve). (b/143911815) - Con il rilascio di ViewPager2
1.0.0
, le classiFragmentPagerAdapter
eFragmentStatePagerAdapter
per interagire conViewPager
sono state ritirate. Consulta Eseguire la migrazione da ViewPager a ViewPager2. (b/145132715)
Correzioni di bug
- Le regole di ProGuard di Fragment ora mantengono correttamente solo le classi
Fragment
dei costruttori predefiniti utilizzati anziché per tutte le istanzeFragment
, correggendo una regressione introdotta in Fragment1.2.1
. (b/149665169 - Le regole Lint
require___()
aggiunte nel Frammento1.2.2
non generano più falsi positivi per le variabili locali che condividono lo stesso nome dei nomi delle proprietà Kotlin ombreggiate (ad es.view
). (b/149891163) FragmentContainerView
non genera più unUnsupportedOperationException
quando si utilizza l'anteprima del layout in Android Studio. (b/149707833)- È stato risolto un problema per cui i frammenti mantenuti aggiunti dopo il salvataggio dello stato non venivano continuamente ricreati e poi distrutti dopo ogni modifica della 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
getViewLifecycleOwner()
del frammento viene ora interrotto prima che venga chiamatoonSaveInstanceState()
, rispecchiando il comportamento del ciclo di vita del frammento. Questa funzionalità è stata rilasciata in precedenza nel Fragment1.3.0-alpha04
. (b/154645875)- Ora l'istruzione
setMenuVisibility(false)
in un frammento modifica correttamente la visibilità dei menu forniti dai suoi frammenti secondari. Questa funzionalità è stata rilasciata in precedenza nel Fragment1.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 di ProGuard per i frammenti per consentire l'oscuramento dei frammenti conservati. (b/151605338)
- È stata disattivata la regola di lint
FragmentLiveDataObserve
per le classiDialogFragment
perché il loro ciclo di vita e il ciclo di vita della visualizzazione sono sempre sincronizzati, il che rende sicuro l'utilizzo dithis
oviewLifecycleOwner
quando si chiamaobserve
. (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
- È stato risolto un bug in
DialogFragment
che causava unStackOverflowError
durante la chiamata digetLayoutInflater()
daonCreateDialog()
. (b/117894767, aosp/1258665) - È stato ridotto l'ambito delle regole ProGuard incluse di Fragment per garantire che le classi Fragment inutilizzate possano essere eliminate. (b/149665169)
- Sono stati corretti i falsi positivi nel controllo Lint
UseRequireInsteadOfGet
quando si utilizza un nome di variabile locale che oscura il nome della proprietà Kotlin. (b/149891163) FragmentContainerView
non genera più unUnsupportedOperationException
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 aOnBackPressedDispatcher
inonCreateView()
,onViewCreated()
eonActivityCreated()
. (b/142117657) - È stato aggiunto un nuovo controllo Lint che conferma che stai utilizzando il
debugImplementation
corretto quando utilizzi l'elementofragment-testing
. (b/141500106) - Ora Fragments suggerisce di utilizzare i metodi
require___()
associati per messaggi di errore più descrittivi anzichécheckNotNull(get___())
,requireNonNull(get___())
oget___()!!
per tutte le API Fragment che includono sia un equivalente diget
che direquire
. (aosp/1202883)
Correzioni di bug
- Sono stati corretti i file ProGuard di Fragment per evitare avvisi R8 (b/148963981)
- È stato migliorato il controllo Lint esistente che suggerisce di utilizzare
viewLifecycleOwner
quando si utilizzaobserve
per gestire anche la versione del metodo di estensionelivedata-ktx
diobserve
. (b/148996309) - È stata corretta la formattazione di molti controlli Lint (aosp/1157012)
Contributi esterni
- Grazie a Zac Sweers per aver contribuito con i controlli di lint
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
- I frammenti aggiunti tramite i metodi
add
ereplace
che accettano un'istanzaClass
(o le versioni con reificazione di Kotlin) ora hanno il loro costruttore predefinito mantenuto da ProGuard. (b/148181315) FragmentStatePagerAdapter
eFragmentPagerAdapter
non intercettano più le eccezioni lanciate daFragmentManager
durante l'esecuzione difinishUpdate()
. (aosp/1208711)- È stato risolto un problema per cui
FragmentManager.findFragment()
non funzionava con i frammenti aggiunti tramite il tag<fragment>
. (b/147784323) - I frammenti gonfiati utilizzando il tag
<fragment>
ora ricevono sempre una chiamata aonInflate()
prima dionCreate()
quando sono nel layout. (aosp/1215856) - La chiamata a
toString()
su un'istanzaFragmentManager
non genera più unNullPointerException
quando l'attività è già stata distrutta. (b/148189412)
Modifiche alle dipendenze
- I frammenti
1.2.1
ora dipendono da Lifecycle ViewModel SavedState2.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 vivamente consigliato per i frammenti aggiunti dinamicamente, che sostituisce l'utilizzo diFrameLayout
o di altri layout. Supporta anche gli stessiclass
,android:name
eandroid:tag
facoltativi del tag<fragment>
, ma utilizza un normaleFragmentTransaction
per aggiungere questo frammento iniziale anziché il percorso del codice personalizzato utilizzato da<fragment>
. - Tempi di
onDestroyView()
: ora i frammenti aspettano il completamento delle animazioni di uscita, delle transizioni di uscita del framework e delle transizioni di uscita di AndroidX (se si utilizza Transizione1.3.0
) prima di chiamareonDestroyView()
. add()
ereplace()
basati su classi: sono stati aggiunti nuovi sovraccarichi diadd()
ereplace()
suFragmentTransaction
che accettano unClass<? extends Fragment>
e unBundle
facoltativo di argomenti. Questi metodi utilizzanoFragmentFactory
per creare un'istanza del frammento da aggiungere. Afragment-ktx
sono state aggiunte anche le estensioni Kotlin che utilizzano tipi reificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)
).- Integrazione di SavedState con ViewModel del ciclo di vita:
SavedStateViewModelFactory
è ora la factory 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 l'utilizzo di
getViewLifecycleOwner()
quando si osservaLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
. - Ritiro di
getFragmentManager()
: i metodigetFragmentManager()
erequireFragmentManager()
in Fragment sono stati ritirati e sostituiti da un unico metodogetParentFragmentManager()
, che restituisce l'elementoFragmentManager
non nullo a cui viene aggiunto il frammento (puoi utilizzareisAdded()
per determinare se è sicuro chiamarlo). - Ritiro di
FragmentManager.enableDebugLogging()
: il metodo staticoFragmentManager.enableDebugLogging
è stato ritirato. FragmentManager ora rispettaLog.isLoggable()
per il tagFragmentManager
, consentendoti di attivare la registrazione diDEBUG
oVERBOSE
senza ricompilare l'app.
Problemi noti
- I frammenti a cui si fa riferimento solo tramite l'attributo
class
oandroid:name
in unFragmentContainerView
non vengono conservati automaticamente da ProGuard, pertanto devi aggiungere manualmente una regola keep per ogni classe di frammento. (b/142601969) - Quando aggiungi un
NavHostFragment
utilizzandoclass
oandroid:name
in XML conFragmentContainerView
, non puoi utilizzarefindNavController()
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
quando si utilizza il tag<fragment>
, che causava la chiamata errata dionViewCreated()
durante l'eliminazione dell'attività. (b/146290333) - I frammenti aggiunti con il tag
<fragment>
ora hanno correttamente la non configurazione cancellata anche se a volte sono presenti nel layout (ad es. solo nel layout orizzontale). Di conseguenza, questi frammenti vengono ora spostati correttamente inCREATED
anche quando non sono presenti nel layout, anziché essere istanziati, ma senza mai passare attraverso i metodi di 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 regolate le animazioni per
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 del comportamento involontaria per cui i frammenti rimossi vengono comunque restituiti da
findFragmentById()
/findFragmentByTag()
durante l'esecuzione delle animazioni/transizioni di uscita. (b/143982969, aosp/1167585) - I frammenti secondari vengono ora interrotti correttamente prima dei relativi elementi principali quando l'attività contenente chiama
onSaveInstanceState()
. (b/144380645) - È stato risolto un problema per cui le visualizzazioni venivano contrassegnate erroneamente come
INVISIBLE
dopo l'apertura di un frammento nascosto. (b/70793925) - Le transizioni degli elementi condivisi dei frammenti ora gestiscono le visualizzazioni che sono state ruotate, ridimensionate e così via (b/142835261)
Aggiornamenti della documentazione
- È stata chiarita la documentazione relativa al ritiro di
setUserVisibleHint()
. (b/143897055) - È stata migliorata la documentazione su
setFragmentFactory()
egetFragmentFactory()
per indicare meglio che l'impostazione di unFragmentFactory
influisce anche sui FragmentManager secondari. (aosp/1170095)
Modifiche alle dipendenze
- Ora i frammenti dipendono da Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
e Activity1.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
- In Kotlin, la correzione Lint per l'utilizzo di
getViewLifecycleOwner()
quando si osservaLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
(introdotta nel 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à
FragmentContainerView
ora supporta l'attributoclass
oltre aandroid:name
, rispecchiando la funzionalità del tag<fragment>
. (b/142722242)- È stato aggiunto un nuovo controllo Lint che garantisce l'utilizzo di
getViewLifecycleOwner()
quando si osservaLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
. (b/137122478)
Correzioni di bug
- I callback
onDismiss
eonCancel
suDialogFragment
ora garantiscono cheDialogInterface
passato a loro non sia nullo e chegetDialog()
restituisca un valore non nullo quando vengono eseguiti. (b/141974033) FragmentContainerView
ora aggiunge il frammento definito daclass
oandroid:name
nell'ambito dell'inflazione, garantendo il funzionamento difindFragmentById()
efindFragmentByTag()
immediatamente dopo. (b/142520327)- È stato corretto un
IllegalStateException
inFragmentContainerView
a causa del salvataggio dello stato. (b/142580713) - È stato corretto un problema relativo a
UnsupportedOperationException
inFragmentContainerView
quando la classeFragmentContainerView
è offuscata. (b/142657034)
Problemi noti
- I frammenti a cui si fa riferimento solo tramite l'attributo
class
oandroid:name
in unFragmentContainerView
non vengono conservati automaticamente da ProGuard, pertanto devi aggiungere manualmente una regola keep per ogni classe di frammento. Abbiamo disattivato la regola Lint che suggerisce di passare aFragmentContainerView
finché 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 un problema per cui
onInflate()
del frammento non riceveva gli attributi appropriati daFragmentContainerView
, causando errori in casi 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 il supporto aggiuntivo per gli attributi XMLandroid:name
eandroid:tag
facoltativi. A differenza del tag<fragment>
,FragmentContainerView
utilizza un normaleFragmentTransaction
sotto il cofano per aggiungere il frammento iniziale, consentendo ulteriori operazioniFragmentTransaction
suFragmentContainerView
e l'utilizzo di View Binding per il layout. (b/139830628, b/141177981)- Fragments ora contiene un avviso Lint che offre una soluzione rapida per sostituire
<fragment>
conFragmentContainerView
. (b/139830056)
Correzioni di bug
- È stato corretto un
ClassCastException
quando si utilizzaandroidx.transition
. (b/140680619) - Quando utilizzi la transizione
1.3.0-beta01
, ora i frammenti aspettano il completamento delle transizioniandroidx.transition
(oltre alle transizioni e alle animazioni del framework, che sono state corrette rispettivamente in Frammento1.2.0-alpha03
e Frammento1.2.0-alpha02
) prima di inviareonDestroyView()
. (aosp/1119841) - Quando utilizzi Transizione
1.3.0-beta01
, ora Fragments annulla correttamente le transizioniandroidx.transition
prima di avviare nuove transizioni / animazioni nello stesso contenitore. (aosp/1119841) - È stato risolto un problema nell'API 17 e versioni precedenti relativo all'utilizzo delle transizioni
androidx.transition
nella visualizzazione principale del frammento quando si utilizzaFragmentContainerView
. (b/140361893) - L'elemento
fragment-testing
ora dipende da AndroidX Test1.2.0
, risolvendo un'incompatibilità con la versione più recente di Espresso 3.2.0. (b/139100149) - È stato rimosso l'utilizzo di
Log.w
in FragmentManager. (aosp/1126468)
Problemi noti
- Gli elementi
onInflate()
del frammento non ricevono attributi appropriati daFragmentContainerView
, causando errori 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 all'API
- I metodi
getFragmentManager()
erequireFragmentManager()
inFragment
sono stati ritirati e sostituiti da un singolo metodogetParentFragmentManager()
, che restituisce ilFragmentManager
non nullo a cui viene aggiunto il frammento (puoi utilizzareisAdded()
per determinare se è sicuro chiamarlo). (b/140574496) - Il metodo statico
FragmentManager.enableDebugLogging
è stato deprecato. FragmentManager ora rispettaLog.isLoggable()
per il tagFragmentManager
, consentendoti di attivare la registrazione diDEBUG
oVERBOSE
senza dover ricompilare l'app. (aosp/1116591)
Correzioni di bug
- Ora i frammenti vengono distrutti correttamente durante l'esecuzione delle animazioni di uscita su altri frammenti. (b/140574199)
- È stato risolto un problema per cui i frammenti chiamavano
Activity.findViewById()
, mentre in precedenza non lo facevano. (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 all'API
FragmentContainerView
è diventatofinal
. (b/140133091)
Correzioni di bug
FragmentContainerView
ora inverte correttamente l'ordine di disegno quando estrae i frammenti dallo stack precedente. (b/139104187)- È stato risolto un problema per cui veniva eseguita l'animazione sbagliata quando si apriva un frammento e si aggiungeva un nuovo frammento contemporaneamente. (b/111659726)
- Ora i frammenti aspettano il completamento delle transizioni (oltre alle animazioni, che è stato corretto nel 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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
SavedStateViewModelFactory
è ora la fabbrica predefinita utilizzata quando si utilizzanoby viewModels()
,by activityViewModels()
, il costruttoreViewModelProvider
oViewModelProviders.of()
con unFragment
. (b/135716331)- Le animazioni predefinite quando si utilizzano
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
consetTransition
su unFragmentTransaction
sono state aggiornate in modo da corrispondere alle animazioni utilizzate dalle attività sui dispositivi Android 10. (aosp/1012812, aosp/1014730)
Modifiche all'API
- Viene introdotto
FragmentContainerView
come contenitore vivamente consigliato per i frammenti aggiunti dinamicamente, sostituendo l'utilizzo diFrameLayout
e così via, in quanto risolve i problemi di ordinamento Z dell'animazione e l'invio di intestazioni della finestra ai frammenti. (b/37036000, aosp/985243, b/136494650) - È stato aggiunto un metodo
FragmentManager.findFragment(View)
statico per recuperare il frammento contenente da una vista gonfiata da un frammento. Infragment-ktx
è disponibile anche un'estensione Kotlin. (aosp/1090757) - Sono stati aggiunti nuovi sovraccarichi di
add()
ereplace()
suFragmentTransaction
che accettano unClass<? extends Fragment>
e unBundle
facoltativo di argomenti. Questi metodi utilizzanoFragmentFactory
per creare un'istanza del frammento da aggiungere. Afragment-ktx
sono state aggiunte anche le estensioni Kotlin che utilizzano tipi con valori espliciti (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)
). (b/126124987) - Sono state aggiunte annotazioni
@MainThread
ai callback del ciclo di vitaFragment
. (b/127272564) - Le API relative al titolo del breadcrumb su
FragmentTransaction
eFragmentManager.BackStackEntry
sono state ritirate. (b/138252944) - Il metodo
setTransitionStyle
inFragmentTransaction
è stato deprecato. (aosp/1011537) - Molti dei metodi in
FragmentManager
non sono piùabstract
.FragmentManager
rimaneabstract
e non deve essere direttamente istanziato o esteso; devi continuare a ottenere solo un'istanza esistente dagetSupportFragmentManager()
,getChildFragmentManager()
e così via.
Correzioni di bug
- Da Fragment
1.1.0-rc04
: i frammenti ora annullano correttamente le transizioni posticipate quando i frammenti vengono visualizzati. (b/138251858) - Da Fragment
1.1.0-rc03
: è stato risolto un problema per cui l'uso dipostponeEnterTransition()
con un timeout più di una volta non annullava i timeout precedenti. (b/137797118) - Da Fragment
1.1.0-rc02
: è stato corretto un arresto anomalo inFragmentPagerAdapter
eFragmentStatePagerAdapter
durante la rimozione dell'elemento corrente. (b/137209870) - Ora i frammenti aspettano il termine delle animazioni prima di inviare
onDestroyView()
. (b/136110528) - Le animazioni dei frammenti dei frammenti secondari e dei relativi discendenti vengono ora gestite correttamente durante l'animazione del frammento principale. (b/116675313)
- È stato corretto un
NullPointerException
quando si utilizzano le transizioni degli elementi condivisi e si combina un'operazione di pop e aggiunta. (b/120507394) - È stata aggiunta una soluzione alternativa ai
IllegalStateException
quando si utilizzanoFragmentPagerAdapter
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()
, assicurandosi che la vista abbia sempre gli inserti corretti. (b/135945162)
Correzioni di bug
- È stato corretto un problema relativo a
NullPointerException
quando viene visualizzato unFragmentTransaction
che utilizzavasetPrimaryNavigationFragment()
prima direplace()
. (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
- test-fragment: l'elemento
fragment-testing
fornisce una classeFragmentScenario
per testare un frammento in isolamento. Per ulteriori dettagli, consulta la documentazione relativa al test dei frammenti dell'app. - FragmentFactory: ora puoi impostare un
FragmentFactory
su unFragmentManager
per gestire la creazione di istanze di frammenti, rimuovendo il requisito rigoroso di avere un costruttore senza argomenti. - Delegati di proprietà Kotlin per i ViewModel: l'elemento
fragment-ktx
ora contiene due delegati di proprietà Kotlin:by viewModels()
per accedere ai ViewModel associati al singolo frammento eby activityViewModels()
per accedere ai ViewModel con ambito limitato all'attività. - Ciclo di vita massimo: ora puoi impostare uno stato del ciclo di vita massimo per un frammento chiamando
setMaxLifecycle()
su unFragmentTransaction
. Questo sostituiscesetUserVisibleHint()
, che non è più supportato.FragmentPagerAdapter
eFragmentStatePagerAdapter
hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. - Costruttore LayoutId di FragmentActivity: ora le sottoclassi di
FragmentActivity
possono, facoltativamente, chiamare un costruttore inFragmentActivity
che accetta un IDR.layout
, indicando il layout da impostare come visualizzazione dei contenuti come alternativa alla chiamata disetContentView()
inonCreate()
. Ciò non cambia il requisito che la sottoclasse abbia un costruttore senza argomenti. - Costruttore LayoutId del frammento: le sottoclassi di
Fragment
ora possono, facoltativamente, chiamare un costruttore inFragment
che accetta un IDR.layout
, indicando il layout da utilizzare per questo frammento come alternativa all'override dionCreateView()
. Il layout espanso può essere configurato inonViewCreated()
. - Rinvia con un timeout: è stato aggiunto un nuovo sovraccarico di
postponeEnterTransition()
che prevede 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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Ora i frammenti annullano correttamente le transizioni posticipate quando vengono visualizzati. (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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato risolto un problema per cui l'uso di
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 corretto 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 loro visibilità quando si utilizzano operazioni
show()
ohide()
durante l'esecuzione della transizione. (b/133385058) - È stato corretto un problema relativo a
NullPointerException
quando viene visualizzato unFragmentTransaction
che utilizzavasetPrimaryNavigationFragment()
prima direplace()
. (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
(in particolare quelli relativi aSTARTED
,RESUMED
,PAUSED
,STOPPED
eDESTROYED
) per i frammenti nidificati ora sono nidificati correttamente. (b/133497591) - Le istanze di
OnBackPressedCallback
registrate inonCreate()
di un frammento ora hanno la precedenza sul FragmentManager secondario. (b/133175997) - I frammenti secondari non vengono più animati quando il frammento principale viene sostituito. (b/121017790)
- Le animazioni e le transizioni dei frammenti vengono ora ignorate quando si utilizza
animateLayoutChanges="true"
, risolvendo un problema per cui i frammenti non venivano distrutti 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 all'API
- Ora i frammenti ricevono un callback a un nuovo metodo
onPrimaryNavigationFragmentChanged(boolean)
quando cambia il frammento di navigazione principale. aosp/960857
Correzioni di bug
- Gli elementi del menu visualizzati da un frammento secondario vengono ora rimossi 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 1.1.0-alpha01 e 1.1.0-alpha04. Esegui l'upgrade a Preferenze 1.1.0-alpha05 quando utilizzi questa versione di Fragments.
Nuove funzionalità
- È stato aggiunto un nuovo sovraccarico di
postponeEnterTransition()
che prevede un timeout, dopodiché il frammento chiamerà automaticamentestartPostponedEnterTransition()
b/120803208
Modifiche all'API
- Modifica che comporta una interruzione: il metodo
FragmentFactory
instantiate
precedentemente deprecato che accettava unBundle
è stato rimosso. aosp/953856 - Modifica che comporta una interruzione: le costanti
RESUME_ONLY_CURRENT_FRAGMENT
eUSE_SET_USER_VISIBLE_HINT
inFragmentPagerAdapter
eFragmentStatePagerAdapter
sono state rinominate rispettivamente inBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
eBEHAVIOR_SET_USER_VISIBLE_HINT
. aosp/954782
Correzioni di bug
- I frammenti di cui è stato limitato il ciclo di vita tramite
setMaxLifecycle()
non vengono più ripresi prima di raggiungere il loro stato finale. b/131557151 - Quando utilizzi
setMaxLifecycle(Lifecycle.State.CREATED)
, la visualizzazione dei frammenti viene distrutta 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 del ciclo di vita massimo per un frammento chiamando
setMaxLifecycle()
su unFragmentTransaction
. Questo sostituiscesetUserVisibleHint()
, che non è più supportato.FragmentPagerAdapter
eFragmentStatePagerAdapter
hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. (b/129780800)
Modifiche all'API
- Ora
moveToState(STARTED)
suFragmentScenario
può essere chiamato solo sui dispositivi con API 24 e versioni successive. (b/129880016)
Modifiche al comportamento
- Come conseguenza di (b/129907905), i frammenti nello stack precedente non riceveranno un callback a
onCreateView()
quando l'attività di hosting viene ricreata. OraonCreateView()
verrà chiamato solo quando il frammento diventa visibile (ovvero quando la pila di ritorno viene espulsa).
Correzioni di bug
- È stato risolto un problema relativo all'utilizzo di un tag
<fragment>
in XML e del costruttorecontentLayoutId
diFragmentActivity
oAppCompatActivity
. (b/129907905) - È stato corretto un problema per cui i frammenti nello stack precedente non venivano spostati in almeno
CREATED
dopo una modifica alla configurazione, causando il mancato smaltimento corretto dei ViewModel e dei frammenti conservati secondari. (b/129593351) - È stato corretto un arresto anomalo in
restoreSaveState
causato da una disaccoppiamento dei frammenti mantenuti dopo il salvataggio dello stato dell'istanza. (b/130433793) (aosp/947824) - Sono stati risolti i problemi relativi al fatto che un
OnBackPressedCallback
aggiunto con il ciclo di vita di un frammento non veniva chiamato se ilFragmentManager
aveva una pila di ritorno. Per ulteriori dettagli, consulta androidx.activity 1.0.0-alpha07. (aosp/948209) - I frammenti non applicano più
LAYER_TYPE_HARDWARE
per le animazioni. Se hai bisogno di un'animazione del 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 lanciate da FragmentManager ora includono il nome del frammento nel messaggio. (b/67759402)
Modifiche all'API
Fragment
eFragmentActivity
ora contengono un secondo costruttore che accetta un@LayoutRes int
, che sostituisce il comportamento precedente di annotazione della classe con@ContentView
. Questo approccio funziona sia nei moduli dell'app che in quelli della libreria. (b/128352521)onActivityResult()
di FragmentActivity ora è contrassegnato correttamente come@CallSuper
. (b/127971684)- Il metodo
instantiate
di FragmentFactory che accetta un parametro Bundle è stato ritirato e le app devono utilizzare il nuovo sovraccaricoinstantiate
che non accetta un Bundle. (b/128836103) - I metodi
FragmentScenario
sono ora annotati correttamente con@StyleRes
. (aosp/924193) FragmentTabHost
è stato deprecato. (b/127971835)getThemedContext()
di FragmentActivity è stato rimosso. (aosp/934078)
Correzioni di bug
- È stata corretta una regressione nella versione 1.1.0-alpha05 che causava il lampeggiamento del frammento in arrivo sullo schermo. (b/129405432)
- È stato risolto un problema per cui il frammento di navigazione principale andava perso dopo una serie di operazioni popBackStack+replace+popBackStack. (b/124332597)
- È stato risolto un problema relativo all'utilizzo dei costruttori
@ContentView
nell'attività durante il ripristino dello stato del frammento. (b/127313094) - È stata corretta la logica di
setTargetFragment()
quando si sostituisce un frammento target esistente con un frammento non ancora collegato al 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à
- Le ricerche di annotazioni
@ContentView
vengono ora memorizzate nella cache (b/123709449)
Modifiche al comportamento
- L'utilizzo di
remove()
,hide()
,show()
,detach()
esetPrimaryNavigationFragment()
con un frammento collegato a un altro FragmentManager ora genera unIllegalStateException
anziché un errore silenzioso (aosp/904301)
Correzioni di bug
onNewIntent
perFragmentActivity
è ora contrassegnato correttamente con@CallSuper
(b/124120586)- È stato risolto un problema per cui
onDismiss()
diDialogFragment
poteva essere chiamato due volte quando si utilizzavanogetDialog().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à
- È stato aggiunto il supporto per l'annotazione della classe
@ContentView
che consente di indicare quale file XML di layout deve essere espanso come alternativa all'override dionCreateView()
. Ti consigliamo di eseguire il lavoro correlato alla visualizzazione inonViewCreated()
. (aosp/837619) fragment-testing
ora dipende dalla versione stabileandroidx.test:core-ktx
1.1.0 (b/121209673)- Ora puoi utilizzare
openActionBarOverflowOrOptionsMenu
conFragmentScenario
per testare i menu delle opzioni ospitate dai frammenti (b/121126668)
Modifiche all'API
- È stato aggiunto un metodo
requireArguments()
che restituisce un@NonNull Bundle
o genera unIllegalStateException
(b/121196360) - È stata aggiunta una nota che indica che
getLifecycle()
,getViewLifecycleOwner()
egetViewLifecycleOwnerLiveData()
non devono essere sostituiti e verranno 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 verrà reso definitivo in una versione futura. Invia una richiesta di funzionalità se al momento stai sostituendo questo metodo. (aosp/880713) - È stato 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) - È stato risolto un problema per cui i frammenti target a volte non erano disponibili in
onDestroy()
o versioni successive. (b/122312935) - Ora onDismiss() di DialogFragment viene chiamato prima di
onDestroy()
. (aosp/874133) (aosp/890734)
Versione 1.1.0-alpha03
17 dicembre 2018
Nuove funzionalità
- Il frammento ora implementa
BundleSavedStateRegistryOwner
e dipende dalla libreria SavedState appena rilasciata [aosp/824380] - È stato aggiunto un delegato di proprietà Kotlin
by activityViewModels
per recuperare i ViewModel associati all'attività contenitore [b/119050253] - Il delegato della proprietà Kotlin
by viewModels
è stato espanso per accettare un metodo lambda facoltativo per ottenereViewModelStoreOwner
, consentendoti di passare il Fragment principale o un altroViewModelStoreOwner
personalizzato con codice comeval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
Modifiche all'API
FragmentScenario
ora ti consente di specificare un tema comeTheme.AppCompat
[b/119054431]. Si tratta di una modifica che provoca un errore.- È stato aggiunto un metodo
requireView()
che restituisce un@NonNull View
o genera unIllegalStateException
[b/120241368] - È stato aggiunto un metodo
requireParentFragment()
che restituisce un@NonNull Fragment
o genera unIllegalStateException
[b/112103783]
Correzioni di bug
- È stato corretto l'errore IllegalStateException: Failure saving state b/120814739
- I frammenti ripristinati dallo stato dell'istanza salvato ora riceveranno sempre un valore
Bundle
non nullo [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 ti consentono di utilizzare una lambda per la costruzione del frammento come alternativa al passaggio di un'istanza
FragmentFactory
. (aosp/812913)
Correzioni di bug
- È stato corretto un IllegalStateException quando si utilizzano frammenti nidificati nella pila di ritorno (b/119256498)
- È stato corretto l'arresto anomalo che si verificava quando si utilizzava
FragmentScenario.recreate()
con unFragmentFactory
(aosp/820540) - È stato risolto un 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
, basata sulle API androidx.test:core. Per ulteriori dettagli, consulta la documentazione relativa ai test dei frammenti.
Nuove funzionalità
- Nuova classe FragmentScenario per testare i frammenti in modo isolato.
- Ora puoi impostare un
FragmentFactory
su qualsiasiFragmentManager
per controllare la modalità di istanza delle nuove istanze di Fragment. - È stato aggiunto un nuovo
by viewModels()
delegato della proprietà Kotlin per il recupero di ViewModel da un frammento. - Gli eventi di input in attesa (ad esempio i clic) ora vengono annullati in
onStop()
di un frammento.
Modifiche all'API
- Sono state ampliate in modo significativo le annotazioni relative alla nullità nell'ambito dell'API Fragment.
Correzioni di bug
- È stato corretto un problema che causava l'errore delle operazioni sui frammenti da LiveData (b/77944637)
Problemi noti
- Non è possibile accedere ai frammenti target dopo che un frammento è stato rimosso dal FragmentManager.
fragment-testing
dipende daandroidx.test:core:1.0.0-beta01
anziché dal valore correttoandroidx.test:core:1.0.0
.