Frammento
Ultimo aggiornamento | Release stabile | Candidato per la release | Release beta | Release alpha |
---|---|---|---|---|
13 agosto 2025 | 1.8.9 | - | - | - |
Dichiarazione di dipendenze
Per aggiungere una dipendenza da Fragment, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle
per
la tua app o il tuo modulo:
Alla moda
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
Per saperne di più sulle dipendenze, consulta Aggiungi dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 1.8
Versione 1.8.9
13 agosto 2025
androidx.fragment:fragment-*:1.8.9
viene rilasciata. La versione 1.8.9 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui l'annullamento di un gesto di indietro predittivo che attiva un'operazione di nascondimento fa sì che il gesto successivo non venga animato correttamente quando si utilizzano gli animatori. (I0a400, b/384765586)
- Corretto un errore per cui una combinazione di
setMaxLifecycle
epopBackStack
non riusciva a spostare il frammento superiore su RESUMED. (I3448b, b/406127576)
Versione 1.8.8
4 giugno 2025
androidx.fragment:fragment-*:1.8.8
viene rilasciata. La versione 1.8.8 contiene questi commit.
Correzioni di bug
- È stato risolto un problema a causa del quale
FragmentManager
si arrestava in modo anomalo durante il tentativo di salvare lo stato dei frammenti aggiunti consetMaxLifecycle(Lifecycle.State.INITIALIZED)
. Questi frammenti, poiché non sono mai stati sottoposti aonCreate()
, non hanno più alcuno stato salvato oonSaveInstanceState()
chiamato. (I6e37a)
Versione 1.8.7
20 maggio 2025
androidx.fragment:fragment-*:1.8.7
viene rilasciata. La versione 1.8.7 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui
FragmentManager
non si trovava nello stato corretto dopo le operazioni di pop and replace nello stesso frame, il che poteva causare un arresto anomalo in combinazione con il pop della cronologia tramitepopBackStack
o il gesto di navigazione predittiva. (I50ad1) - È stato corretto un arresto anomalo causato dall'utilizzo di AndroidX Transitions e dal verificarsi di una situazione in cui transazioni di frammenti consecutive rapide tentano di annullare una transizione non avviata e la libreria AndroidX Transition non cancella correttamente lo stato della transizione. (vedi b/414612221). (Ib5235)
Versione 1.8.6
12 febbraio 2025
androidx.fragment:fragment-*:1.8.6
viene rilasciata. La versione 1.8.6 contiene questi commit.
Correzioni di bug
- L'override di
FragmentContainerView
disetOnApplyWindowInsetsListener
ora accetta un listener 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 rilasciata. La versione 1.8.5 contiene questi commit.
Correzioni di bug
- È stato corretto un
IllegalStateException
attivato dasaveBackStack
solo dopo che un gesto Indietro predittivo è stato annullato o interrotto. (I3387d, b/342419080)
Versione 1.8.4
2 ottobre 2024
androidx.fragment:fragment-*:1.8.4
viene rilasciata. 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 dei frammenti quando si utilizzavano le transizioni Androidx. (Ibc038, b/364804225)
- È stato risolto un problema nei fragment per cui l'interruzione di un gesto di Indietro predittivo causava l'inserimento del fragment manager in uno stato indefinito e persino la visualizzazione del fragment errato. (If82e2, b/338624457)
- È stato corretto un
UninitializedPropertyAccessException
inAndroidFragment
durante la sostituzione dinamica della classe utilizzata dall'istanzaAndroidFragment
. (I12dea)
Versione 1.8.3
4 settembre 2024
androidx.fragment:fragment-*:1.8.3
viene rilasciata. La versione 1.8.3 contiene questi commit.
Correzioni di bug
FragmentManager
ora tiene correttamente conto delle operazioni in attesa quando gestisce il gesto Indietro predittivo. In questo modo, il ripristino del sistema non dovrebbe più causare unIndexOutOfBoundsException
. (I9ba32, b/342316801)AndroidFragment
non si arresta più in modo anomalo se viene aggiunto alla composizione mentre lo stato dell'attività/del frammento contenitore è già salvato. (I985e9, b/356643968)
Versione 1.8.2
24 luglio 2024
androidx.fragment:fragment-*:1.8.2
viene rilasciata. La versione 1.8.2 contiene questi commit.
Correzioni di bug
- Ora
AndroidFragment
gestisce correttamente i casi in cui il fragment padre viene inserito nello stack di ritorno dei fragment, evitando problemi di tipo "Nessuna visualizzazione trovata per l'ID" quando si torna a quel fragment. (I94608) - I frammenti aggiunti tramite il metodo
FragmentTransaction.add
che accetta unViewGroup
ora attendonoonContainerAvailable
prima di passare aonStart()
. Ciò influisce sugli utenti di questa API, ad esempioAndroidFragment
, che ora attende cheAndroidFragment
rientri nella composizione prima di spostarlo tramiteonStart()
. (I94608)
Versione 1.8.1
26 giugno 2024
androidx.fragment:fragment-*:1.8.1
viene rilasciata. La versione 1.8.1 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui i frammenti senza contenitore venivano immediatamente
DESTROYED
quando si avviava un gesto di indietro predittivo. Ora vengono mantenuti nello statoCREATED
fino al completamento del gesto. (If6b83, b/345244539)
Versione 1.8.0
12 giugno 2024
androidx.fragment:fragment-*:1.8.0
viene rilasciata. La versione 1.8.0 contiene questi commit.
Modifiche importanti dalla versione 1.7.0
- L'artefatto
fragment-compose
ora contiene unAndroidFragment
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 fragment. Questo metodo deve essere utilizzato come sostituto diretto dell'approccio precedentemente consigliato di utilizzareAndroidViewBinding
per gonfiare un frammento. - Il callback
onBackStackChangeCancelled
nell'interfacciaOnBackStackChangedListener
diFragmentManager
viene ora attivato nell'ambito dell'esecuzione delle operazioni inFragmentManager
, in modo da allinearlo maggiormente alla tempistica del callbackonBackStackChangeCommitted
.
Versione 1.8.0-rc01
29 maggio 2024
androidx.fragment:fragment-*:1.8.0-rc01
viene rilasciata. La versione 1.8.0-rc01 contiene questi commit.
Correzioni di bug
- Il callback
onBackStackChangeCancelled
nell'interfacciaFragmentManagers OnBackStackChangedListener
viene ora attivato nell'ambito dell'esecuzione delle operazioni inFragmentManager
, in modo da allinearsi maggiormente alla tempistica del callbackonBackStackChangeCommitted
. (I5ebfb, b/332916112)
Versione 1.8.0-beta01
14 maggio 2024
androidx.fragment:fragment-*:1.8.0-beta01
viene rilasciata. La versione 1.8.0-beta01 contiene questi commit.
Correzioni di bug
- Da Fragment
1.7.1
: la navigazione predittiva verrà eseguita solo per le transazioni in cui tutti i fragment hanno un'animazione o una transizione Androidx ricercabile. È stato risolto un problema per cui l'annullamento di una transazione parzialmente ricercabile causava la visualizzazione di una schermata nera. (I43037, b/339169168)
Versione 1.8.0-alpha02
17 aprile 2024
androidx.fragment:fragment-*:1.8.0-alpha02
viene rilasciata. La versione 1.8.0-alpha02 contiene questi commit.
Correzioni di bug
- Da Frammento
1.7.0-rc02
: sono stati aggiunti log per indicare perché l'impostazione di unsharedElement
senza altre transizioni non verrà eseguita. (Iec48e) - Da Frammento
1.7.0-rc02
: è stato corretto un bug per cui si verificava un arresto anomalo se a una transazione venivano aggiunti elementi condivisi non ricercabili, mentre tutte le altre transizioni erano ricercabili. Ora la transazione verrà considerata correttamente non ricercabile. (I18ccd)
Versione 1.8.0-alpha01
3 aprile 2024
androidx.fragment:fragment-*:1.8.0-alpha01
viene rilasciata. 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 fragment. 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 rilasciata. La versione 1.7.1 contiene questi commit.
Correzioni di bug
- La navigazione predittiva indietro ora verrà eseguita solo per le transazioni in cui tutti i frammenti hanno un'animazione o una transizione Androidx ricercabile. È stato risolto un problema per cui l'annullamento di una transazione parzialmente ricercabile causava una schermata vuota. (I43037, b/339169168)
Versione 1.7.0
1° maggio 2024
androidx.fragment:fragment-*:1.7.0
viene rilasciata. La versione 1.7.0 contiene questi commit.
Supporto del gesto Indietro predittivo
- I fragment ora supportano la funzionalità Indietro predittivo in-app quando si utilizza
Animator
o AndroidX Transition 1.5.0. In questo modo, gli utenti possono utilizzare il gesto Indietro per visualizzare il frammento precedente cercando l'animatore/la transizione prima di decidere se completare la transazione tramite il gesto o annullarla.
Transition System | 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 della navigazione predittiva in Fragment dopo aver attivato il gesto di navigazione predittiva, segnala un problema relativo a Fragment con un progetto di esempio che riproduce il problema. Puoi disattivare la navigazione predittiva utilizzando FragmentManager.enabledPredictiveBack(false)
nella onCreate()
della tua attività.
FragmentManager.OnBackStackChangedListener()
ora fornisce onBackStackChangeProgressed()
e onBackStackChangeCancelled()
per ricevere rispettivamente l'avanzamento della navigazione predittiva e gli eventi annullati.
Fragment Compose Artifact
È stato creato un nuovo artefatto fragment-compose
incentrato sul supporto delle app in fase di migrazione da un'architettura basata su Fragment a un'architettura basata interamente su Compose.
La prima funzionalità disponibile in questo nuovo artefatto è un metodo di estensione content
su Fragment
che mira a semplificare l'utilizzo di Compose per la UI di un singolo Fragment creando un ComposeView
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 rilasciata. La versione 1.7.0-rc02 contiene questi commit.
Correzioni di bug
- Sono stati aggiunti log per indicare perché l'impostazione di un
sharedElement
senza altre transizioni non verrà eseguita. (Iec48e) - È stato corretto un bug per cui si verificava un arresto anomalo se veniva aggiunto un elemento condiviso non ricercabile a una transazione in cui tutte le altre transizioni erano ricercabili. Ora la transazione verrà considerata correttamente non ricercabile. (I18ccd)
Versione 1.7.0-rc01
3 aprile 2024
androidx.fragment:fragment-*:1.7.0-rc01
viene rilasciata. 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 rilasciata. La versione 1.7.0-beta01 contiene questi commit.
Modifiche alle API
FragmentHostCallback
ora è scritto in Kotlin, in modo che l'annullabilità del tipo generico dell'host corrisponda all'annullabilità del tipo restituito dionGetHost()
. (I40af5)
Correzioni di bug
- È stato risolto un problema per cui, quando si esegue un gesto di Indietro predittivo su un fragment che non si trova in un contenitore, questo non viene mai eliminato. Il frammento verrà spostato immediatamente nello stato finale. (Ida0d9)
- È stato risolto un problema in Fragments per cui l'interruzione delle transizioni in entrata con un gesto Indietro predittivo distruggeva 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 rilasciata. La versione 1.7.0-alpha10 contiene questi commit.
Correzioni di bug
- È stato risolto il problema noto nella versione precedente di Fragment in cui, se si utilizzava il supporto della funzionalità Indietro predittivo di Fragment per
Animator
o la transizione AndroidX, i fragment generavano un erroreNullPointerException
dahandleOnBackProgressed
se non era mai stato aggiunto alcunFragmentManager.OnBackStackChangedListener
tramiteaddOnBackStackChangedListener
. (I7c835)
Versione 1.7.0-alpha09
24 gennaio 2024
androidx.fragment:fragment-*:1.7.0-alpha09
viene rilasciata. La versione 1.7.0-alpha09 contiene questi commit.
Fragment Compose Artifact
È stato creato un nuovo artefatto fragment-compose
incentrato sul supporto delle app in fase di migrazione da un'architettura basata su Fragment a un'architettura basata interamente su Compose.
La prima funzionalità disponibile in questo nuovo artefatto è un metodo di estensione content
su Fragment
che mira a semplificare l'utilizzo di Compose per la UI di un singolo Fragment creando un ComposeView
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 l'avanzamento della navigazione predittiva e gli eventi annullati. (214b87)
Problema noto
- Quando utilizzi il supporto della funzionalità Indietro predittivo di Fragment per
Animator
o la transizione AndroidX, i fragment genereranno unNullPointerException
dahandleOnBackProgressed
se non è mai stato aggiunto alcunFragmentManager.OnBackStackChangedListener
tramiteaddOnBackStackChangedListener
. L'aggiunta manuale di un listener risolverà il problema. 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 rilasciata. La versione 1.7.0-alpha08 contiene questi commit.
Pulizia
- È stata rimossa la soluzione alternativa per la libreria di transizioni, che è stata corretta in Transizione
1.5.0-alpha06
. (I04356)
Versione 1.7.0-alpha07
29 novembre 2023
androidx.fragment:fragment-*:1.7.0-alpha07
viene rilasciata. La versione 1.7.0-alpha07 contiene questi commit.
Correzioni di bug
- È stato corretto un
NullPointerException
causato dall'impostazione di una transizione di elementi condivisi e dal mancato impostazione di una transizione di entrata/uscita. (I8472b) - Da Fragment
1.6.2
: quando viene aumentato un frammento di unFragmentContainerView
, i relativi stati, comeFragmentManager
, Host e ID, sono ora accessibili nel callbackonInflate
. (I1e44c, b/307427423) - Da Frammento
1.6.2
: quando utilizziclearBackStack
per rimuovere un insieme di frammenti, il valoreViewModel
di qualsiasi frammento nidificato verrà ora cancellato quando vengono cancellati i valoriViewModels
del frammento principale. (I6d83c, b/296173018)
Versione 1.7.0-alpha06
4 ottobre 2023
androidx.fragment:fragment-*:1.7.0-alpha06
viene rilasciata. La versione 1.7.0-alpha06 contiene questi commit.
Aggiornamento delle dipendenze
- I fragment sono stati aggiornati in modo da dipendere dalla nuova API
animateToStart
aggiunta in Transition1.5.0-alpha04
.
Versione 1.7.0-alpha05
20 settembre 2023
androidx.fragment:fragment-*:1.7.0-alpha05
viene rilasciata. La versione 1.7.0-alpha05 contiene questi commit.
Nuove funzionalità
- I fragment ora supportano Indietro predittivo quando si utilizzano le transizioni Androidx. In questo modo, puoi utilizzare il gesto Indietro per cercare il frammento precedente con la transizione Androidx personalizzata prima di decidere se eseguire o annullare la transazione tramite il gesto completato. Per attivare questa funzionalità, devi fare affidamento alla 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, la volta successiva che avvii il gesto Indietro la transizione non viene eseguita, causando una schermata vuota. Ciò potrebbe essere dovuto a un problema nella libreria delle transizioni. (b/300157785). Se riscontri questo problema, segnala un problema relativo a Fragment con un progetto di esempio che riproduce il problema. Puoi disattivare la navigazione predittiva utilizzando
FragmentManager.enabledPredictiveBack(false)
nellaonCreate()
della tua attività.
Versione 1.7.0-alpha04
6 settembre 2023
androidx.fragment:fragment-*:1.7.0-alpha04
viene rilasciata. La versione 1.7.0-alpha04 contiene questi commit.
Correzioni di bug
- Risolto un problema che si verificava quando si annullava un gesto di indietro predittivo e i fragment non raggiungevano lo stato del ciclo di vita corretto. (I7cffe, b/297379023)
- È stata corretta una regressione che consentiva l'esecuzione delle animazioni con le transizioni. (I59f36)
- È stato risolto un problema durante l'utilizzo di Predictive Back con i fragment, per cui il tentativo di tornare indietro due volte in rapida successione nel penultimo fragment dello stack precedente causava un arresto anomalo. (Ifa1a4)
Versione 1.7.0-alpha03
23 agosto 2023
androidx.fragment:fragment-*:1.7.0-alpha03
viene rilasciata. La versione 1.7.0-alpha03 contiene questi commit.
Correzioni di bug
- È stato risolto un problema relativo ai fragment durante l'utilizzo di Indietro predittivo che causava l'omissione del primo fragment nello stack di cronologia del fragment manager e la chiusura dell'attività quando si utilizzava il pulsante Indietro del 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 rilasciata. La versione 1.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Quando utilizzi i frammenti con i gesti di Indietro predittivo dall'API 34, se utilizzi un sistema di transizione che non supporta la ricerca (
Animations
,Transitions
) o nessuna transizione, i frammenti ora attenderanno 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 rilasciata. Questa versione è sviluppata in un ramo interno.
Nuove funzionalità
- I fragment ora supportano la funzionalità Indietro predittivo in-app quando si utilizza
Animator
. In questo modo, puoi utilizzare il gesto Indietro per visualizzare il frammento precedente con l'animatore personalizzato prima di decidere se completare la transazione tramite il gesto completato o annullarla. Puoi anche disattivare questo nuovo comportamento utilizzandoenablePredictiveBack()
sperimentale e passandofalse
.
Versione 1.6
Versione 1.6.2
1° novembre 2023
androidx.fragment:fragment-*:1.6.2
viene rilasciata. La versione 1.6.2 contiene questi commit.
Correzioni di bug
- Quando il frammento di un
FragmentContainerView
viene aumentato, i relativi stati, comeFragmentManager
, Host e ID, sono ora accessibili nel callbackonInflate
. (I1e44c, b/307427423) - Quando utilizzi
clearBackStack
per rimuovere un insieme di frammenti, il valoreViewModel
di qualsiasi frammento nidificato verrà ora cancellato quando vengono cancellati i valoriViewModels
del frammento principale. (I6d83c, b/296173018)
Versione 1.6.1
26 luglio 2023
androidx.fragment:fragment-*:1.6.1
viene rilasciata. La versione 1.6.1 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui lo stato salvato memorizzato quando l'attività veniva interrotta ma non eliminata veniva memorizzato nella cache in modo errato anche dopo che l'istanza del frammento veniva riportata allo stato
RESUMED
. In questo modo, lo stato memorizzato nella cache viene riutilizzato se l'istanza del fragment si trova nello stack precedente quando si utilizza l'API per più back stack per salvare e ripristinare il fragment. (I71288, b/246289075)
Aggiornamento delle dipendenze
- Fragment ora dipende da Activity 1.7.2. In questo modo viene risolto un problema per cui gli utenti Kotlin non potevano estendere
ComponentDialog
senza una dipendenza esplicita da Activity. (b/287509323)
Versione 1.6.0
7 giugno 2023
androidx.fragment:fragment-*:1.6.0
viene rilasciata. La versione 1.6.0 contiene questi commit.
Modifiche importanti dalla versione 1.5.0
- Lo stato salvato di
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
subito prima che vengano aggiunti/rimossi dallo stack di frammenti e subito dopo il commit della transazione, rispettivamente. FragmentStrictMode
ha aggiunto un nuovoWrongNestedHierarchyViolation
che rileva quando un frammento secondario è nidificato nella gerarchia di visualizzazione del frammento principale, ma non aggiunto alchildFragmentManager
del frammento principale.- Le API
Fragment
eFragmentManager
che accettano unIntent
o unIntentSender
ora sono annotate correttamente con@NonNull
per impedire il passaggio di un valore nullo, in quanto un valore nullo causerebbe sempre l'arresto anomalo immediato delle rispettive API del framework Android chiamate da questi metodi. DialogFragment
ora fornisce l'accesso aComponentDialog
sottostanti tramite l'APIrequireComponentDialog()
.- Ora Fragment dipende da Lifecycle
2.6.1
. - Il frammento ora dipende da SavedState
1.2.1
. - Il frammento ora dipende da ProfileInstaller
1.3.0
. L'artefatto
fragment-testing-manifest
separa le voci del manifest dal resto dei componenti di test dei fragment. 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 differenze di versione tra
fragment-testing
eandroidx.test
Versione 1.6.0-rc01
10 maggio 2023
androidx.fragment:fragment-*:1.6.0-rc01
viene rilasciata. La versione 1.6.0-rc01 contiene questi commit.
Correzioni di bug
- Risolto un problema che causava l'invio di
ActivityResult
con il codice di richiesta errato quando venivano effettuate più richiestestartActivityForResult
consecutivamente. (If0b9d, b/249519359) - È stato risolto un problema per cui i callback
onBackStackChangeListener
venivano inviati per le transazioni che non modificavano effettivamente lo stack precedente se erano mescolati con transazioni che lo facevano. (I0eb5c, b/279306628)
Versione 1.6.0-beta01
19 aprile 2023
androidx.fragment:fragment-*:1.6.0-beta01
viene rilasciata. 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 invieranno 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 rilasciata. La versione 1.6.0-alpha09 contiene questi commit.
Modifiche alle API
DialogFragment
ora fornisce l'accesso aComponentDialog
sottostanti tramite l'APIrequireComponentDialog()
. (I022e3, b/234274777)- I fragmenti
commitNow()
,executePendingTransactions()
epopBackStackImmediate()
API sono stati annotati con@MainThread
, il che significa che ora genereranno tutti errori di compilazione quando non vengono chiamati dal thread principale, anziché attendere l'errore in fase di runtime. (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 modificato lo stack precedente diFragmentManager
. (I66055, b/274788957)
Versione 1.6.0-alpha08
22 marzo 2023
androidx.fragment:fragment-*:1.6.0-alpha08
viene rilasciata. La versione 1.6.0-alpha08 contiene questi commit.
Modifica del comportamento
- La tempistica del callback
OnBackStackChangedListener.onBackStackChangeCommited
è stata modificata per essere eseguita prima delle operazioni sui fragment. In questo modo, alla funzione di 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 Fragment dipende da Lifecycle
2.6.1
. (586fe7) - Il frammento ora dipende da SavedState
1.2.1
. (078e4e) - Il frammento ora dipende da ProfileInstaller
1.3.0
. (3fc05b)
Versione 1.6.0-alpha07
8 marzo 2023
androidx.fragment:fragment-*:1.6.0-alpha07
viene rilasciata. La versione 1.6.0-alpha07 contiene questi commit.
Correzioni di bug
- Da Frammento
1.5.6
: è stato risolto un problema per cui la rimozione di qualsiasi frammento, indipendentemente dal fatto che avesse aggiunto voci di menu o meno, invalidava il menu dell'attività. (50f098, b/244336571)
Versione 1.6.0-alpha06
22 febbraio 2023
androidx.fragment:fragment-*:1.6.0-alpha06
viene rilasciata. La versione 1.6.0-alpha06 contiene questi commit.
Modifica del comportamento
- Il nuovo callback
onBackStackChangedStarted
suFragmentManager
'sonBackStackChangedListener
verrà ora eseguito prima che i fragment inizino a passare agli stati di destinazione. (I34726)
Versione 1.6.0-alpha05
8 febbraio 2023
androidx.fragment:fragment-*:1.6.0-alpha05
viene rilasciata. La versione 1.6.0-alpha05 contiene questi commit.
Nuove funzionalità
- L'interfaccia
FragmentManager.OnBackStackChagnedListener
ora offre due callback aggiuntivi,onBackStackChangeStarted
eonBackStackChangeCommitted
, che consentono di ottenere informazioni e controllo aggiuntivi quando si verificano modifiche dello stack precedente inFragmentManager
. (Ib7ce5, b/238686802)
Modifiche alle API
- Le API
Fragment
eFragmentManager
che accettano unIntent
o unIntentSender
ora sono annotate correttamente con@NonNull
per impedire il passaggio di un valore nullo, in quanto un valore nullo causerebbe sempre l'arresto anomalo immediato delle 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 rilasciata. 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 frammento principale, ma non aggiunto alchildFragmentManager
del frammento principale. (I72521, b/249299268)
Modifiche al comportamento
- I frammenti ora ripristinano il loro stato
SavedStateRegistry
prima dionAttach()
, garantendo che sia disponibile da tutti i metodi del ciclo di vita verso l'alto. (I1e2b1)
Modifiche alle API
- L'artefatto
fragment-testing-manifest
separa le voci del manifest dal resto dei componenti di test dei fragment. Ciò significa che puoi:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Ciò evita conflitti dovuti alla differenza di versione tra fragment-testing
e androidx.test
.(I8e534, b/128612536)
Correzioni di bug
- Da Frammento
1.5.5
: i frammenti non salveranno più in modo errato lo statoViewModel
come parte dello stato salvato del registro delle visualizzazioni. (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
sono rilasciati. La versione 1.6.0-alpha03 contiene questi commit.
Modifiche alle API
- I corsi che si estendono oltre
DialogFragment
ora dovranno chiamare il super nell'overrideonDismiss()
. (I14798, b/238928865)
Correzioni di bug
- Sono state corrette le regressioni causate dall'integrazione delle nuove interfacce di callback del fornitore (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) per garantire che i fragment 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
sono 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 contemporanea di una transazionepopBackStack()
e unareplace()
poteva causare l'esecuzione diAnimation
/Animator
errati nei fragment 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
sono rilasciati. La versione 1.6.0-alpha01 contiene questi commit.
Modifiche al comportamento
- Lo stato salvato di
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
: correggi una regressione inDialogFragmentCallbacksDetector
in cui l'utilizzo della versione di lint inclusa in AGP 7.4 causava l'arresto anomalo di lint. (b/237567009)
Aggiornamento delle dipendenze
- Da Fragment
1.5.1
: la libreria Fragment ora dipende da Lifecycle2.5.1
. (Id204c) - Da Fragment
1.5.1
: la libreria Fragment ora dipende da Activity1.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
sono 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
sono rilasciati. La versione 1.5.6 contiene questi commit.
Correzioni di bug
- È stato risolto un problema a causa del quale 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
e un risultato era già disponibile. (If7458)
Versione 1.5.5
7 dicembre 2022
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
e androidx.fragment:fragment-testing:1.5.5
sono rilasciati. La versione 1.5.5 contiene questi commit.
Correzioni di bug
- I fragmenti non salveranno più erroneamente lo stato di
ViewModel
come parte dello stato salvato del registro delle visualizzazioni. (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
sono rilasciati. La versione 1.5.4 contiene questi commit.
Correzioni di bug
- È stato corretto un errore per cui l'utilizzo di un
FragmentController
personalizzato con un host che non implementa un'interfaccia di callback del fornitore (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) e la chiamata alla relativa funzione di invio deprecata non riuscivano a inviare i dati ai fragment 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
sono rilasciati. La versione 1.5.3 contiene questi commit.
Correzioni di bug
- È stato corretto un errore che causava la ricezione di callback
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
eonConfigurationChanged()
per i 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
sono rilasciati. La versione 1.5.2 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui l'esecuzione contemporanea di una transazione
popBackStack()
ereplace()
poteva causare l'esecuzione diAnimation
/Animator
errati per i 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
sono rilasciati. La versione 1.5.1 contiene questi commit.
Correzioni di bug
- Correzione di una regressione in
DialogFragmentCallbacksDetector
in cui l'utilizzo della versione di lint inclusa in AGP 7.4 causava l'arresto anomalo di lint. (b/237567009)
Aggiornamento delle dipendenze
- La libreria Fragment ora dipende da Lifecycle
2.5.1
. (Id204c) - La libreria Fragment ora dipende da Activity
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
sono rilasciati. La versione 1.5.0 contiene questi commit.
Modifiche importanti dalla versione 1.4.0
- Integrazione di CreationExtras:
Fragment
ora può fornire unViewModelProvider.Factory
stateless tramite Lifecycle2.5.0
diCreationExtras
. - Integrazione della finestra di dialogo dei componenti:
DialogFragment
ora utilizzaComponentDialog
tramite Activity1.5.0
come finestra di dialogo predefinita restituita daonCreateDialog()
. - Refactoring dello stato dell'istanza salvata: i fragment hanno iniziato a modificare il modo in cui salvano lo stato dell'istanza. Questo tentativo ha lo scopo 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 diFragmentManager
. - Lo stato associato a ogni singolo frammento viene ora salvato separatamente dallo stato interno di
FragmentManager
, consentendoti così di correlare la quantità di stato salvato associato a un singolo frammento con gli ID univoci presenti nei log di debug diFragment
.
Altre modifiche
FragmentStrictMode
ora offre la possibilità ai frammenti privati di terze parti di ignorare sanzioni specifiche per violazioni utilizzandoallowViolation()
con il nome della classe.- Le API Fragment per fornire un menu all'
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 fragment 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
sono rilasciati. La versione 1.5.0-rc01 contiene questi commit.
Refactoring dello stato dell'istanza salvata
- Lo stato associato a ogni singolo frammento viene ora salvato separatamente dallo stato interno di
FragmentManager
, consentendoti così di correlare la quantità di stato salvato associato a un singolo frammento con gli ID univoci presenti nel logging di debug dei frammenti. (a153e0, b/207158202)
Versione 1.5.0-beta01
20 aprile 2022
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
e androidx.fragment:fragment-testing:1.5.0-beta01
sono rilasciati. La versione 1.5.0-beta01 contiene questi commit.
Modifiche alle API
DialogFragment
ha aggiunto un nuovo metododismissNow
che utilizzacommitNow
per la parità con la funzioneshowNow
. Tieni presente cheDialog
non verrà chiuso immediatamente, ma lo stato diFragmentManager
verrà aggiornato in modo sincrono. (I15c36, b/72644830)
Refactoring dello stato dell'istanza salvata
FragmentManager
ora salva lo stato dell'istanza salvata in unBundle
anziché direttamente in unParcelable
personalizzato. Questo è il primo passo per fornire maggiore trasparenza su ciò che viene effettivamente salvato da Frammenti. (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 maggiore trasparenza su quali risultati 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
sono rilasciati. La versione 1.5.0-alpha05 contiene questi commit.
Modifiche alle API
setHasOptionsMenu()
diFragment
è stato deprecato. Per gestire i menu e le relative voci, è necessario utilizzare le nuove API per i 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
sono rilasciati. La versione 1.5.0-alpha04 contiene questi commit.
Modifiche alle 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 testabili in isolamento. Le APIMenuHost
eMenuProvider
aggiunte in Activity1.4.0-alpha01
forniscono una superficie API equivalente, testabile e consapevole del ciclo di vita che i fragment 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
sono rilasciati. La versione 1.5.0-alpha03 contiene questi commit.
Modifiche alle API
- Ora puoi passare
CreationExtras
alle funzioniby viewModels()
eby activityViewModels()
. (Ibefe7, b/217601110)
Modifiche al comportamento
DialogFragment
ora utilizzaComponentDialog
come finestra di dialogo predefinita restituita daonCreateDialog()
. (If3784, b/217618170)
Versione 1.5.0-alpha02
9 febbraio 2022
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
e androidx.fragment:fragment-testing:1.5.0-alpha02
sono rilasciati. La versione 1.5.0-alpha02 contiene questi commit.
Nuove funzionalità
FragmentStrictMode
ora offre la possibilità ai frammenti privati di terze parti di ignorare sanzioni specifiche per violazioni 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
sono rilasciati. La versione 1.5.0-alpha01 contiene questi commit.
Nuove funzionalità
Fragment
ora si integra con ViewModel CreationExtras, introdotto nell'ambito di Lifecycle2.5.0-alpha01
. (I3060b, b/207012585)
Correzioni di bug
- Da Fragment
1.4.1
:FragmentContainerView
non genera più un'eccezione di stato non valido quando gli ID visualizzazione generati da XML hanno valori negativi. (Ic185b, b/213086140) - Da Fragment
1.4.1
: quando utilizzi una lambdaownerProducer
personalizzata con la funzione lazyby viewModels()
, ora utilizzeràdefaultViewModelProviderFactory
del proprietario se non viene fornito unViewModelProvider.Factory
personalizzato, anziché utilizzare sempre la factory del fragment. (I56170, b/214106513) - È stato risolto un arresto anomalo durante l'accesso a un
ViewModel
per la prima volta da un callbackregisterForActivityResult()
di unFragment
. (Iea2b3)
Versione 1.4
Versione 1.4.1
26 gennaio 2022
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
e androidx.fragment:fragment-testing:1.4.1
sono rilasciati. La versione 1.4.1 contiene questi commit.
Correzioni di bug
FragmentContainerView
non genera più un'eccezione di stato non valido quando gli ID vista generati da XML hanno valori negativi. (Ic185b, b/213086140)- Quando si utilizza una lambda
ownerProducer
personalizzata con la funzione pigraby viewModels()
, ora verrà utilizzatodefaultViewModelProviderFactory
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
sono rilasciati. La versione 1.4.0 contiene questi commit.
Modifiche importanti dalla versione 1.3.0
- Le API
FragmentStrictMode
forniscono controlli runtime che ti consentono di verificare che la tua app o le librerie da cui dipende non chiamino API frammenti ritirate. Quando viene rilevata una violazione, puoi scegliere di stampare un messaggio di log, attivare il tuo listener personalizzato o arrestare l'app. IlFragmentStrictMode.Policy
che controlla quali controlli sono abilitati e quali "penalità" vengono attivate può essere impostato su unFragmentManager
tramite il nuovo metodosetStrictModePolicy()
. Questo criterio si applica aFragmentManager
e in modo transitivo a tutti i gestori di frammenti secondari che non impostano un proprio criterio univoco. Vedi StrictMode per i fragment. 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 concatenare la chiamata.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
ora implementaCloseable
, consentendoti di utilizzarlo con il metodouse
di Kotlin o try-with-resources.Aggiunta
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
per specificare se attivare l'animazione di transizione dell'attività standard presa dal tema nella transizione dei fragment.L'API sperimentale di
FragmentManager.enableNewStateManager(boolean)
è stata rimossa e il nuovo gestore dello stato è ora l'unica opzione disponibile.
Più pile di schede indietro
FragmentManager
mantiene uno stack di ritorno costituito da transazioni di frammenti che utilizzano addToBackStack()
. In questo modo puoi estrarre queste transazioni e tornare allo stato precedente, utilizzando i meccanismi per Salvare lo stato con i fragment per consentire ai fragment di ripristinare il proprio stato in modo appropriato.
Questa release amplia 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 di FragmentTransaction
e di ogni frammento aggiunto in queste transazioni e consentono di ripristinare in un secondo momento le transazioni e i relativi frammenti con il loro stato intatto. In questo modo puoi "scambiare" in modo efficace più back stack salvando quello attuale e ripristinando uno salvato.
saveBackStack()
funziona in modo simile a popBackStack()
in quanto è asincrono e comporta l'inversione (l'eliminazione) di tutte le transazioni di frammenti con quel nome specifico e la distruzione e la rimozione di tutti i frammenti aggiunti, ma differisce per alcuni aspetti importanti:
saveBackStack()
è sempre inclusivo.- A differenza di
popBackStack()
, che estrae tutte le transazioni dallo stack precedente se il nome specificato non viene trovato nello stack precedente o se viene fornito un nome nullo,saveBackStack()
non esegue alcuna operazione se non hai eseguito il commit di una transazione di frammenti utilizzandoaddToBackStack()
con quel nome esatto e 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, viene chiamato
onSaveInstanceState()
di ogni frammento e lo stato viene ripristinato e tutte le istanzeViewModel
associate a questi frammenti vengono conservate (eonCleared()
non viene chiamato).
Le transazioni frammentate che possono essere utilizzate con saveBackStack()
devono soddisfare determinati criteri:
- Ogni transazione di frammento deve utilizzare
setReorderingAllowed(true)
per garantire che le transazioni possano essere ripristinate come singola operazione atomica. - L'insieme di transazioni salvate deve essere autonomo (ovvero non deve fare riferimento esplicito a frammenti al di fuori di 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 conservato o avere un frammento conservato nel proprio insieme transitivo di frammenti figlio per garantire che
FragmentManager
non restituisca riferimenti a frammenti salvati dopo il salvataggio dello stack precedente.
Analogamente a saveBackStack()
, restoreBackStack()
e clearBackStack()
, che ripristinano o cancellano rispettivamente uno stack precedente salvato, entrambi non fanno nulla se non hai chiamato in precedenza saveBackStack()
con lo stesso nome.
Per maggiori informazioni, consulta Più back stack: 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
sono rilasciati. La versione 1.4.0-beta01 contiene questi commit.
Correzioni di bug
- I fragment padre ora inviano
onHiddenChanged()
verso il basso l'intera gerarchia prima di avviare il proprio callback. (Iedc20, b/77504618) - La tastiera ora si chiude automaticamente quando si passa da un frammento con una tastiera aperta a un frammento con una visualizzazione elenco. (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
sono rilasciati. La versione 1.4.0-alpha10 contiene questi commit.
Pelucchi
- È stato aggiunto l'avviso lint
DetachAndAttachFragmentInSameFragmentTransaction
per rilevare la chiamata sia didetach()
che diattach()
sullo stessoFragment
nello stessoFragmentTransaction
. Poiché queste operazioni complementari si annullano a vicenda se eseguite nella stessa transazione, devono essere suddivise in transazioni separate per fare effettivamente qualcosa. (aosp/1832956, b/200867930) - È stato aggiunto l'errore di lint
FragmentAddMenuProvider
per correggere gli utilizzi del ciclo di vita dei fragment nel ciclo di vita della visualizzazione dei fragment quando si utilizza l'APIaddMenuProvider
diMenuHost
. (aosp/1830457, b/200326272)
Aggiornamenti della documentazione
- Il messaggio di ritiro delle API ora gestite dalle API Activity Result, ovvero
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
eonRequestPermissionsResult
, è stato ampliato con maggiori dettagli. (cce80f) - Il messaggio di ritiro per
onActivityCreated()
sia perFragment
che perDialogFragment
è stato espanso con maggiori 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
sono rilasciati. La versione 1.4.0-alpha09 contiene questi commit.
Nuove funzionalità
- Ora puoi chiamare
clearBackStack(name)
per cancellare qualsiasi stato salvato in precedenza consaveBackStack(name)
. (I70cd7)
Modifiche alle API
- La classe
FragmentContainerView
è stata riscritta in Kotlin per garantire che la funzionegetFragment
rispetti correttamente la 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 Fragment
aggiunto con
setReorderingAllowed(true)
e poi rimosso immediatamente prima dell'esecuzione delle transazioni in attesa non veniva pulito 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
sono rilasciati. La versione 1.4.0-alpha08 contiene questi commit.
Correzioni di bug
- Migliorato il controllo
UseRequireInsteadOfGet
Lint per gestire meglio le parentesi ridondanti. (I2d865) - È stato migliorato il controllo
UseGetLayoutInflater
Lint per gestire altri casi limite. (Ie5423)
Versione 1.4.0-alpha07
18 agosto 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
e androidx.fragment:fragment-testing:1.4.0-alpha07
vengono rilasciati senza modifiche 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
sono rilasciati. La versione 1.4.0-alpha06 contiene questi commit.
Correzioni di bug
- È stato risolto un problema relativo a più backstack durante il rapido scambio tra backstack che veniva visualizzato come
IllegalStateException
durante il ripristino di unFragmentTransaction
o come visualizzazione di una seconda copia di un frammento. (I9039f) - È stato risolto un problema per cui
FragmentManager
conservava una copia dello stato salvato in precedenza tramitesaveBackStack()
anche dopo il ripristino di questo stato. (Ied212) - Il metodo
dismissAllowingStateLoss()
diDialogFragment
non va più in arresto anomalo quando lo chiami dopo che lo stato è stato salvato quando aggiungi in modo specifico il 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
sono rilasciati. La versione 1.4.0-alpha05 contiene questi commit.
Correzioni di bug
- Da Fragment
1.3.6
: la visualizzazione del fragment ora è impostata correttamente suGONE
quando si utilizzahide()
quando la visualizzazione principale hatransitionGroup=”true”
impostato. (aosp/1766655, b/193603427) - Da Fragment
1.3.6
:FragmentActivity
ora sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita che esegue l'override. (I6db7a)
Aggiornamento delle dipendenze
- Da Frammento
1.3.6
: i frammenti ora dipendono da 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
sono rilasciati. La versione 1.4.0-alpha04 contiene questi commit.
Modifiche alle API
FragmentManager
ora utilizzaSavedStateRegistry
in background per salvare il suo stato. Anche i metodisaveAllState()
erestoreSavedState()
sono stati deprecati inFragmentController
. Se utilizziFragmentController
per ospitare frammenti al di fuori diFragmentActivity
, devi fare in modo cheFragmentHostCallbacks
implementiSavedStateRegistryOwner
. (Iba68e, b/188734238)
Correzioni di bug
- Risolto un problema per cui la chiamata a
saveBackStack()
nell'ambito del supporto di più back stack non riusciva se eseguita contemporaneamente all'esecuzione di unFragmentTransaction
che utilizzavareplace()
. (I73137) - È stato corretto un
NullPointerException
che si verificava dopo il ripristino manuale di uno stack precedente salvato che conteneva più transazioni quando si utilizzava l'APIrestoreBackStack()
per il supporto di più stack precedenti. È stato risolto anche un problema per cuisetReorderingAllowed(true)
non veniva controllato per tutte le transazioni. (I8c593) - È stato risolto un problema per cui
FragmentManager
continuava in modo errato a ripristinare lo stato salvato in precedenza dei frammenti anche dopo che questi erano stati rimossi daFragmentManager
, causando così una crescita continua dello stato salvato nel tempo. (I1fb8e)
Versione 1.4.0-alpha03
16 giugno 2021
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
e androidx.fragment:fragment-testing:1.4.0-alpha03
sono 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 include 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 hanno messaggi di errore più dettagliati per includere il frammento che causa la violazione e qualsiasi altra informazione 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 l'indicatore visibile impostato dall'utente. (Ib2d5f)
Modifiche al comportamento
- È stata ripristinata la limitazione delle chiamate a
fitsSystemWindows
suFragmentContainerView
. L'app non si arresta più in modo anomalo. (6b8ddd, b/190622202)
Correzioni di bug
- Da Fragment
1.3.5
: è stata corretta una regressione nelle transizioni degli elementi condivisi introdotta in Fragment1.3.4
da aosp/1679887. I fragment ora gestiscono correttamente i gruppi di transizione (impostati direttamente tramitetransitionGroup="true"
o indirettamente tramitetransitionName
obackground
) e gli elementi condivisi non genereranno piùIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304) FragmentManager
non si arresterà più in modo anomalo quando tenti di nascondere un frammento di rimozione. (I573dd, b/183634730)- Il controllo lint
OnCreateDialogIncorrectCallback
non andrà più in crash 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
sono rilasciati. La versione 1.4.0-alpha02 contiene questi commit.
Nuove funzionalità
FragmentStrictMode
ora registrerà sempre le violazioni quando la registrazione è abilitata tramiteFragmentManager
, indipendentemente dal criterio della modalità con restrizioni attualmente in uso. (I02df6, b/187872638)FragmentStrictMode
ora supporta l'esenzione di classiFragment
particolari dalla modalità StrictViolation
, consentendo a queste classi di evitare eventuali sanzioni. (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 la causa della violazione insieme al frammento che la ha generata (If5118, b/187871150). OgniViolation
contiene quanto segue:WrongFragmentContainerViolation
ora contiene ilViewGroup
a cuiFragment
stava tentando di essere aggiunto. (I83c75, b/187871150)TargetFragmentUsageViolation
è stato espanso inSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
eGetTargetFragmentRequestCodeUsageViolation
, conSetTargetFragmentUsageViolation
contenente il frammento di destinazione e il codice di richiesta. (I741b4, b/187871150)SetUserVisibleHintViolation
ora contiene il valore booleano passato asetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
ora contiene il ViewGroup in cui il tag<fragment>
tentava di inserire 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
a livello di programmazione o tramite XML. Gli inset devono essere gestiti 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
sono 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 concatenare la chiamata. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Aggiunta
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
per specificare se attivare l'animazione di transizione dell'attività standard presa dal tema nella transizione dei fragment. (I46652)
Più pile di schede indietro
FragmentManager
mantiene uno stack di ritorno costituito da transazioni di frammenti che utilizzano addToBackStack()
. In questo modo puoi estrarre queste transazioni e tornare allo stato precedente, utilizzando i meccanismi per Salvare lo stato con i fragment per consentire ai fragment di ripristinare il proprio 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 di FragmentTransaction
e di ogni frammento aggiunto in queste transazioni e consentono di ripristinare in un secondo momento le transazioni e i relativi frammenti con il loro stato intatto. In questo modo puoi "scambiare" in modo efficace più back stack salvando quello attuale e ripristinando uno salvato.
saveBackStack()
funziona in modo simile a popBackStack()
in quanto è asincrono e comporta l'inversione (l'eliminazione) di tutte le transazioni di frammenti con quel nome specifico e la distruzione e la rimozione di tutti i frammenti aggiunti, ma differisce per alcuni aspetti importanti:
saveBackStack()
è sempre inclusivo.- A differenza di
popBackStack()
, che estrae tutte le transazioni dallo stack precedente se il nome specificato non viene trovato nello stack precedente o se viene fornito un nome nullo,saveBackStack()
non esegue alcuna operazione se non hai eseguito il commit di una transazione di frammenti utilizzandoaddToBackStack()
con quel nome esatto e 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, viene chiamato
onSaveInstanceState()
di ogni frammento e lo stato viene ripristinato e tutte le istanzeViewModel
associate a questi frammenti vengono conservate (eonCleared()
non viene chiamato).
Le transazioni frammentate che possono essere utilizzate con saveBackStack()
devono soddisfare determinati criteri:
- Ogni transazione di frammento deve utilizzare
setReorderingAllowed(true)
per garantire che le transazioni possano essere ripristinate come singola operazione atomica. - L'insieme di transazioni salvate deve essere autonomo (ovvero non deve fare riferimento esplicito a frammenti al di fuori di 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 conservato o avere un frammento conservato nel proprio insieme transitivo di frammenti figlio per garantire che
FragmentManager
non restituisca riferimenti a frammenti salvati dopo il salvataggio dello stack precedente.
Analogamente a saveBackStack()
, restoreBackStack()
non fa nulla se non hai chiamato in precedenza saveBackStack()
con lo stesso nome. (b/80029773)
Fragment StrictMode
Le API FragmentStrictMode
forniscono controlli runtime che ti consentono di verificare che la tua app o le librerie da cui dipende non chiamino API frammenti ritirate. Quando viene rilevata una violazione, puoi scegliere di stampare un messaggio di log, attivare il tuo listener personalizzato o arrestare l'app. Il FragmentStrictMode.Policy
che controlla quali controlli sono abilitati e quali "penalità" vengono attivate può essere impostato su un FragmentManager
tramite il nuovo metodo setStrictModePolicy()
. Questo criterio si applica a FragmentManager
e in modo transitivo a tutti i gestori di frammenti secondari che non impostano un proprio criterio univoco. (#123, #131, #150, b/143774122)
detectFragmentReuse()
rileva se un'istanzaFragment
rimossa in precedenza viene riaggiunta a unFragmentManager
. Non devi mai interagire con un'istanzaFragment
o conservarne un riferimento dopo che è stata eliminata e rimossa da unFragmentManager
. (#142, b/153738653)detectFragmentTagUsage()
rileva quando utilizzi il tag<fragment>
nel file XML del layout. Devi sempre utilizzareFragmentContainerView
quando aumenti le dimensioni dei frammenti come parte 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 alle API
- L'API sperimentale di
FragmentManager.enableNewStateManager(boolean)
è stata rimossa e il nuovo gestore dello stato è ora l'unica opzione disponibile. (I90036, b/162776418) FragmentScenario
ora implementaCloseable
, consentendoti di utilizzarlo con il metodouse
di Kotlin o try-with-resources. (#121, b/143774122)
Nuovi controlli Lint
- Il controllo
UseGetLayoutInflater
Lint ora avvisa quando si utilizzaLayoutInflater.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
DialogFragmentCallbacksDetector
ora avvisa quando si chiamasetOnCancelListener
osetOnDismissListener
nel metodoonCreateDialog()
di unDialogFragment
. Questi listener sono di proprietà diDialogFragment
e devi eseguire l'override dionCancel()
eonDismiss()
per ricevere questi callback. (#171, b/181780047, b/187524311)
Correzioni di bug
- Da Fragment 1.3.4: è stato corretto un bug di regressione introdotto in Fragment
1.3.3
quando si utilizza l'APIViewTreeViewModelStoreOwner.get()
conViewModelProvider
o il metodo Jetpack Compose diviewModel()
all'interno di un fragment. Questi casi d'uso ora utilizzano correttamenteViewModelProvider.Factory
fornito dal tuo frammento se esegue l'override digetDefaultViewModelProviderFactory()
(come fanno i frammenti annotati con@AndroidEntryPoint
quando utilizzano Hilt). Se non esegui l'override di questo metodo, viene creata unaSavedStateViewModelFactory
che salva e ripristina il suo stato insieme alla visualizzazione del fragment come factory predefinita. (I5cbfa, b/186097368) - A partire da Fragment 1.3.4: quando si utilizza
FragmentContainerView
sull'API 29, gli inset non verranno più inviati a tempo indeterminato, risolvendo i problemi relativi alle istanzeBottomNavigationBar
eFloatingActionButton
. (I1bb78, b/186012452) - A partire da Fragment 1.3.4: ora puoi recuperare il tuo Parcelable dal bundle dei risultati del fragment dopo l'interruzione del processo. (I65932, b/187443158)
- Da Fragment 1.3.4: quando esegui una transizione di elementi condivisi su un ViewGroup, se
ViewGroup ha
transitionGroup
impostato su false, ora la transizione avverrà correttamente. (I99675)
Contributo esterno
- Grazie a simonschiller per aver implementato
Closeable
inFragmentScenario
. (#121, b/143774122) - Grazie simonschiller per aver aggiunto l'intera API
FragmentStrictMode
per 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 tatocaster per aver aggiunto il controllo
UseGetLayoutInflater
Lint. (#156, b/170781346) - Grazie tatocaster per aver aggiunto il controllo
DialogFragmentCallbacksDetector
Lint. (#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
sono rilasciati. La versione 1.3.6 contiene questi commit.
Correzioni di bug
- Da Frammento
1.4.0-alpha03
:FragmentManager
non andrà più in crash quando tenti di nascondere un frammento di rimozione. (I573dd, b/183634730) - Ora la visualizzazione del frammento è impostata correttamente su
GONE
quando si utilizzahide()
e la visualizzazione principale hatransitionGroup=”true”
impostato. (aosp/1766655, b/193603427) FragmentActivity
ora sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita che esegue l'override. (I6db7a)
Aggiornamento delle dipendenze
- Da Frammento
1.3.6
: i frammenti ora dipendono da 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
sono 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 fragment ora gestiscono correttamente i gruppi di transizione (impostati direttamente tramitetransitionGroup="true"
o indirettamente tramitetransitionName
obackground
) e gli elementi condivisi non genereranno piùIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304)
Versione 1.3.4
18 maggio 2021
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
e androidx.fragment:fragment-testing:1.3.4
sono rilasciati. La versione 1.3.4 contiene questi commit.
Correzioni di bug
- È stato corretto un bug di regressione introdotto in Fragment
1.3.3
quando si utilizza l'APIViewTreeViewModelStoreOwner.get()
conViewModelProvider
o il metodo Jetpack Compose diviewModel()
all'interno di un fragment quando si utilizza Hilt. Questi casi d'uso ora utilizzano correttamenteViewModelProvider.Factory
fornito dal frammento se esegue l'override digetDefaultViewModelProviderFactory()
(come fanno i frammenti annotati@AndroidEntryPoint
). Se non esegui l'override di questo metodo, viene creata unaSavedStateViewModelFactory
che salva e ripristina il suo stato insieme alla visualizzazione del fragment come factory predefinita. (I5cbfa, b/186097368) - Quando utilizzi
FragmentContainerView
sull'API 29, gli inset non verranno più inviati a tempo indeterminato, risolvendo i problemi relativi alle istanzeBottomNavigationBar
eFloatingActionButton
. (I1bb78, b/186012452) - Ora puoi recuperare il tuo Parcelable dal bundle dei risultati del fragment dopo l'interruzione del processo. (I65932, b/187443158)
- Quando esegui una transizione di elementi condivisi su un ViewGroup, se
ViewGroup ha
transitionGroup
impostato su false, ora la transizione avverrà 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
sono rilasciati. La versione 1.3.3 contiene questi commit.
Nuove funzionalità
- L'utilizzo di
SavedStateViewModelFactory
ora funziona se utilizzato conSavedStateRegistryOwner
restituito utilizzandoViewTreeSavedStateRegistryOwner.get()
con la visualizzazione del fragmento. (I21acf, b/181577191)
Correzioni di bug
- È stato corretto un bug di regressione introdotto in Fragment
1.3.2
che impediva l'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 inset. (I63f68, b/172153900)DialogFragment
ora gestisce correttamente i casi in cui un frammento figlio viene aggiunto a un contenitore con lo stesso ID di un contenitore nella classeDialog
personalizzata, risolvendo i problemi della gerarchia delle visualizzazioni quando vengono riutilizzati ID utilizzati internamente da finestre di dialogo comeBottomSheetDialog
. (Ie6279, b/180021387)FragmentManager.dump()
ora rientra correttamente il primo frammento nell'elenco dei frammenti attivi. (If5c33, b/183705451)
Nuove correzioni di bug di State Manager
- Il nuovo gestore dello stato dei fragment ora gestisce correttamente le transizioni di uscita con le operazioni di nascondi. (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
sono rilasciati. La versione 1.3.2 contiene questi commit.
Nuove correzioni di bug di State Manager
- Quando esegui contemporaneamente le operazioni
popBackStack()
ecommit()
, l'ultima operazione imposta la direzione di tutte le animazioni anziché eseguire alcune animazioni di comparsa 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 durante una transizione di elementi condivisi. (I4d4a6, b/179934757)
Aggiornamenti delle dipendenze
- Il frammento ora dipende da Activity 1.2.2, correggendo un problema con il controllo lint di
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
sono 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 fragment inseriti in un'attività
RESUMED
esistente utilizzando FragmentContainerView vengono ora visualizzati correttamente dopo una modifica della configurazione. (Ie14c8, b/180538371) - Non è più presente un
}
aggiuntivo alla fine del frammentotoString()
(I54705, b/177761088) - I metodi sottoposti a override in FragmentActivity ora ereditano correttamente il javaDoc del metodo di base (I736ce, b/139548782)
- La documentazione di
setFragmentResult
esetFragmentResultListener
ha aggiornato la documentazione dei parametri per indicare che non accettano più i valori nullabili (I990ba, b/178348386)
Nuove correzioni di bug di State Manager
- È stata corretta una perdita di memoria nei frammenti causata da
mFocusedView
(Ib4e9e, b/179925887) - I fragment ora chiamano correttamente
onCreateOptionsMenu
quando si utilizzano mostra/nascondi transazioni (I8bce8, b/180255554) - I frammenti secondari con transizioni che iniziano prima del layout del frammento ora raggiungono correttamente
RESUMED
(Ic11e6, b/180825150) - I fragment gonfiati utilizzando il tag
<fragment>
ora arriveranno sempre aRESUMED
(I452ac, (I9fa49)
Aggiornamenti delle dipendenze
- Fragment 1.3.1 dipende da Activity
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
sono rilasciati. La versione 1.3.0 contiene questi commit.
Modifiche importanti dalla versione 1.2.0
- Nuovo State Manager: una riscrittura significativa degli elementi interni di
FragmentManager
ha risolto numerosi problemi relativi all'invio di eventi del ciclo di vita, animazioni e transizioni e alla gestione dei fragment posticipati. Integrazione dell'API Activity Result: è stato aggiunto il supporto dell'API
ActivityResultRegistry
introdotta in Activity1.2.0
per gestire i flussistartActivityForResult()
+onActivityResult()
erequestPermissions()
+onRequestPermissionsResult()
senza eseguire l'override dei metodi nel fragment, oltre a fornire hook per testare questi flussi. Consulta la sezione aggiornata Ottenere un risultato da un'attività.- Questa release corregge una serie di problemi relativi ai 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
. Devi eseguire l'upgrade a Fragment 1.3.0 per utilizzare le API Activity Result in unFragmentActivity
oAppCompatActivity
.
- Questa release corregge una serie di problemi relativi ai 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 trasferimento dei risultati tra due frammenti tramite nuove API su
FragmentManager
. Questo funziona per i frammenti di gerarchia (genitore/figlio), i DialogFragment e i frammenti in Navigation e garantisce che i risultati vengano inviati al frammento solo quando è almenoSTARTED
. Le API dei fragment di destinazione sono state ritirate a favore di queste nuove API. Consulta Ottenere risultati utilizzando l'API Fragment Result.FragmentOnAttachListener
: il callbackonAttachFragment()
suFragmentActivity
eFragment
è stato ritirato. È stato aggiunto un nuovoFragmentOnAttachListener
per fornire un'alternativa più flessibile, consentendo la delega dionAttachFragment()
a listener separati e testabili e il supporto per l'aggiunta di un listener a FragmentManager diversi da FragmentManager secondari diretti.FragmentScenario
Miglioramenti: la classeFragmentScenario
dell'artefattofragment-testing
è stata riscritta in Kotlin e ha ricevuto una serie di miglioramenti:FragmentScenario
ora utilizzasetMaxLifecycle()
per implementaremoveToState()
, garantendo un comportamento coerente a tutti i livelli dell'API e disaccoppiando lo stato del fragment dall'attività sottostante.FragmentScenario
ora supporta l'impostazione di unLifecycle.State
iniziale per supportare l'asserzione dello stato del fragment prima di passare a ogniLifecycle.State
per la prima volta.- Ora esiste un'alternativa all'API
FragmentScenario
dionFragment
sotto forma di metodo di estensione reificato KotlinwithFragment
che consente di restituire un valore. In particolare, genera nuovamente le eccezioni sollevate nel blocco specificato.
ViewTree
Support:Fragment
ora supporta le APIViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
eViewTreeSavedStateRegistryOwner
aggiunte in Lifecycle2.3.0
e SavedState1.1.0
in modo che restituisca il frammento comeViewModelStoreOwner
e unSavedStateRegistryOwner
e unLifecycleOwner
collegati al ciclo di vita della visualizzazione 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 ora sono private.Deprecazione di
setRetainInstance()
: il metodosetRetainInstance()
sui frammenti è stato ritirato. Con l'introduzione di ViewModel, gli sviluppatori hanno a disposizione un'API specifica per conservare lo stato che può essere associato ad attività, fragment e grafici di navigazione. In questo modo, gli sviluppatori possono utilizzare un Fragment normale, 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 conservato (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
sono rilasciati. La versione 1.3.0-rc02 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui un intent genitore
DialogFragment
veniva visualizzato sopra un intent figlioDialogFragment
dopo una modifica alla configurazione; ora i frammenti di dialogo figlio vengono sempre visualizzati sopra un frammento di dialogo genitore. (I30806, b/177439520) - È stato risolto il problema per cui l'esecuzione di un'operazione
hide
con unAnimation
causava il lampeggio del frammento di nascondimento alla fine dell'animazione. (I57e22, b/175417675) - I frammenti con transizioni aggiunte prima dell'allegato della gerarchia di visualizzazione
ora raggiungono correttamente
RESUMED
. (I1fc1d, b/177154873)
Nuove correzioni di bug di State Manager
- La visualizzazione del fragmento
Lifecycle
ora gestisce correttamente i casi in cui la visualizzazione del fragmento viene eliminata prima cheLifecycle
raggiungaCREATED
, evitando eccezioni che indicano "nessun evento in 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
sono 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)
Nuove correzioni di bug di State Manager
- È stato risolto il problema di perdita e artefatto visivo durante l'aggiunta
di un frammento con un
Animation
a unFragmentContainerView
e l'interruzione di questa aggiunta con un'operazione di pop. (I952d8) - Risolto un problema per cui la visualizzazione del fragment rimaneva nella gerarchia delle visualizzazioni se veniva sostituita durante i metodi
onCreate()
oonViewCreated()
. (I8a7d5) - Lo stato attivo viene ora ripristinato correttamente nelle visualizzazioni radice dei fragment quando vengono ripristinate. (Ifc84b)
- La combinazione di operazioni di pop e sostituzione nella stessa transazione di frammenti ora mostra le animazioni corrette (Ifd4e4, b/170328691)
Versione 1.3.0-beta02
2 dicembre 2020
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
e androidx.fragment:fragment-testing:1.3.0-beta02
sono rilasciati. La versione 1.3.0-beta02 contiene questi commit.
Nuove funzionalità
FragmentScenario
è stato completamente convertito in Kotlin mantenendo la compatibilità binaria e del codice sorgente tramite l'utilizzo delle interfacce funzionali di Kotlin 1.4 perFragmentAction
. (I19d31)
Modifiche al comportamento
- Le FragmentContainerView che non aumentano un fragment utilizzando l'attributo
class
oandroid:name
ora possono essere utilizzate al di fuori di unFragmentActivity
. (Id4397, b/172266337) - Il tentativo di impostare il ciclo di vita massimo di un frammento su
DESTROYED
ora genererà un erroreIllegalArgumentException
(Ie7651, b/170765622) - L'inizializzazione di un FragmentScenario con uno stato
DESTROYED
ora genererà unIllegalArgumentException
(I73590, b/170765622)
Nuove correzioni di bug di State Manager
- Risolto un problema per cui la visualizzazione non raggiungeva il suo stato finale se interrompevi una transizione di frammento che utilizzava
Animator
o una delle opzioniTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Risolto un problema che impediva la distruzione corretta dei fragment con un
Animation
in uscita. (I83d65) - L'uscita dai frammenti con effetti invertiti ora annulla e riavvia correttamente con l'effetto di entrata appropriato. (I62226, b/167092035)
- Risolto un problema per cui l'uscita
Animator
di unhide()
non veniva eseguita. (Id7ffe) - Ora i frammenti vengono visualizzati correttamente quando vengono posticipati e poi avviati immediatamente. (Ie713b, b/170022857)
- I frammenti che rimuovono la visualizzazione messa a fuoco durante un'animazione non tenteranno più di ripristinare la messa a fuoco sulla visualizzazione separata una volta raggiunto
RESUMED
(I38c65, b/172925703)
Contributo esterno
FragmentFactory
ora memorizza nella cache le classi di frammenti separatamente per le diverse istanzeClassLoader
. 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
sono 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 suCREATED
. (b/159662173)
Modifiche alle API
- Esegui l'upgrade di androidx per utilizzare Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Modifiche al comportamento
- I file di risorse dei fragment sono stati resi privati correttamente. (aosp/1425237)
Correzioni di bug
- I fragment visualizzati utilizzando il tag
<fragment>
ora attenderanno correttamente che le relative visualizzazioni vengano aggiunte a un contenitore prima di passare allo stato STARTED (I02f4c). - I frammenti visibili e poi
setMaxLifecycle()
aCREATED
ora eseguono correttamente gli effetti di uscita. (b/165822335) - La rimozione di un fragment staccato che non viene aggiunto allo stack precedente non causa più una perdita di memoria. Per gentile concessione di Nicklas Ansman Giertz. (b/166489383)
- I fragment attivi ora avranno sempre un
FragmentManager
non nullo e i fragment 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)
Nuove correzioni di bug di State Manager
- Ora i fragment ripristinano correttamente lo stato di messa a fuoco della visualizzazione subito prima di iniziare l'animazione. (Icc256)
- I frammenti che hanno solo una transizione di elementi condivisi ora completano correttamente i loro effetti speciali, il che significa che si spostano effettivamente nel loro stato finale (Iaebc7, b/166658128)
- Le visualizzazioni dei fragment vengono ora sempre rimosse dal container prima di essere eliminate. (Id5876)
- Il nuovo gestore dello stato ora rimuove in modo coerente la visualizzazione del frammento in uscita prima di aggiungere quella in entrata. (I41a6e)
- Le modifiche esplicite alla visibilità di una visualizzazione di 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, questo rimarrà invisibile. (b/164481490) - I frammenti ora 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 dello stato non causa più il lampeggio dei fragment quando si utilizzano le animazioni di ingresso. (b/163084315)
Problema noto
Quando utilizzi il nuovo gestore di stati, se premi Indietro durante un effetto speciale di ingresso anziché tornare al fragment precedente, il vecchio fragment non viene mai riaggiunto, 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
sono rilasciati. La versione 1.3.0-alpha08 contiene questi commit.
Nuovo State Manager
Questa release include un refactoring importante della gestione dello stato interno di FragmentManager
, che influisce sull'invio di metodi del ciclo di vita, animazioni e transizioni e sulla gestione delle transazioni posticipate. Questa opzione è attiva per impostazione predefinita. Per ulteriori dettagli, consulta il post del blog Frammenti: ricostruire gli elementi interni. (b/139536619, b/147749580)
- Un'API sperimentale in
FragmentManager.enableNewStateManager(boolean)
può essere utilizzata per controllare se FragmentManager utilizza il nuovo gestore di stato. (I7b6ee)
I seguenti problemi vengono risolti solo quando si utilizza il nuovo gestore dello stato:
- Il frammento precedente di un'operazione
replace
viene ora interrotto correttamente prima dell'avvio del nuovo frammento. (b/161654580) - Ora i frammenti impediscono l'esecuzione di più animazioni in competizione sugli stessi frammenti, evitando casi in cui un
Animation
esegue l'override di tutti gli effettiTransition
o in cui vengono eseguiti sia unAnimator
che unTransition
su 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 frammento in uscita. (b/149344150) - I frammenti posticipati non rimangono più bloccati nello stato
CREATED
, ma passano allo statoSTARTED
insieme agli altri frammenti. (b/129035555) - Risolto un problema per cui
FragmentManager
eseguiva le operazioni in modo errato quando venivano combinate una transazione riordinata posticipata e una transazione non riordinata. (b/147297731) - L'apertura simultanea di più frammenti non comporterà più la visualizzazione temporanea dei frammenti intermedi quando vengono posticipati. (b/37140383)
FragmentManager
ora restituisce i frammenti corretti quando si chiamafindFragmentById()
ofindFragmentByTag()
dall'interno del callbackonAttachFragment()
. (b/153082833)- I fragment non chiamano più
onCreateView()
sui fragment che vengono eliminati quando il fragment 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 fragment con la transizione non valida. (b/155574969)
Modifiche al comportamento
- Ora puoi chiamare
launch()
su unActivityResultLauncher
nel metodo del ciclo di vitaonCreate()
di un fragment. (b/161464278) - La chiamata a
registerForActivityResult()
dopoonCreate()
ora genera un'eccezione che indica che questa operazione non è consentita, anziché non restituire risultati dopo una modifica della configurazione. (b/162255449) FragmentActivity
ora utilizza l'APIOnContextAvailableListener
introdotta in Attività1.2.0-alpha08
per ripristinare lo stato diFragmentManager
. Tutti i listener aggiunti alle sottoclassi diFragmentActivity
verranno eseguiti dopo questo listener. (I513da)
Correzioni di bug
- I valori
ActivityOptions
passati durante l'utilizzo distartIntentSenderForResult()
ora vengono rispettati. (b/162247961)
Problema noto
- Quando utilizzi il nuovo gestore dello stato, l'impostazione diretta della visibilità della visualizzazione principale del fragment dopo
onViewCreated()
e prima dionResume()
comporta l'override della visibilità impostata daFragmentManager
, che controlla la visibilità della visualizzazione 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
sono rilasciati. La versione 1.3.0-alpha07 contiene questi commit.
Nuove funzionalità
FragmentScenario
ora supporta l'impostazione di uno stato del ciclo di vita iniziale diCREATED
,STARTED
oRESUMED
anziché spostare sempre il frammento nello statoRESUMED
. (b/159662750)- È stata aggiunta un'alternativa all'API
FragmentScenario
dionFragment
sotto forma di metodo di estensione reificato KotlinwithFragment
che consente di restituire un valore. In particolare, genera nuovamente le eccezioni sollevate nel blocco specificato. (b/158697631)
Modifiche al comportamento
FragmentScenario
ora utilizzasetMaxLifecycle()
per implementaremoveToState()
, garantendo un comportamento coerente a tutti i livelli dell'API e disaccoppiando lo stato del fragment dall'attività sottostante. (b/156527405)SavedStateRegistryOwner
restituito daViewTreeSavedStateRegistryOwner
è ora associato al ciclo di vita della visualizzazione del frammento. In questo modo, il suo stato viene salvato e ripristinato contemporaneamente alla visualizzazione del fragment. (b/158503763)
Correzioni di bug
- Ora i fragment attendono che la visualizzazione del fragment venga collegata prima di chiamare
ViewCompat.requestApplyInsets()
, evitando i casi in cui la richiesta di rientro veniva eliminata. (b/158095749) - La chiamata a
clearFragmentResultListener
ora cancella correttamente l'observer 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
sono rilasciati. La versione 1.3.0-alpha06 contiene questi commit.
Nuove funzionalità
- Il callback
onAttachFragment()
suFragmentActivity
eFragment
è stato ritirato. È stato aggiunto un nuovoFragmentOnAttachListener
per offrire un'alternativa più flessibile, consentendo la delega dionAttachFragment()
a listener separati e testabili e il supporto per l'aggiunta di un listener a FragmentManager diversi da FragmentManager secondari diretti. (I06d3d)
Correzioni di bug
- Ora lo stato della visualizzazione dei fragment genitori viene ripristinato prima di quello dei fragment figli, risolvendo un problema di ordinamento visivo dopo una modifica della configurazione quando un
DialogFragment
mostra un altroDialogFragment
come fragment figlio. (b/157195715) - Risolto un problema per cui il controllo
UseRequireInsteadOfGet
Lint non gestiva correttamente gli utilizzi concatenati degli operatori?.
e!!
. (b/157677616)
Versione 1.3.0-alpha05
20 maggio 2020
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
e androidx.fragment:fragment-testing:1.3.0-alpha05
sono 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 alle API
- Le API
setFragmentResult()
esetFragmentResultListener()
ora accettano rispettivamenteBundle
eFragmentResultListener
non nulli. Per cancellare in modo esplicito un risultato o un listener impostato in precedenza, utilizza i nuovi metodiclearFragmentResult()
eclearFragmentResultListener()
. (b/155416778) - Le estensioni Kotlin
setFragmentResultListener()
che accettano un'espressione lambda ora sono contrassegnate comeinline
. (b/155323404)
Modifiche al comportamento
startActivityForResult()
,startIntentSenderForResult()
erequestPermissions
precedentemente ritirati suFragment
ora utilizzano internamenteActivityResultRegistry
, eliminando così la limitazione all'utilizzo solo dei bit inferiori (sotto0xFFFF
) per i codici di richiesta quando utilizzi 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 delle 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
sono 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 le nuove API su
FragmentManager
. Questo funziona per i frammenti di gerarchia (genitore/figlio), i DialogFragment e i frammenti in Navigation e garantisce che i risultati vengano inviati al frammento solo quando è almenoSTARTED
. (b/149787344)
Modifiche alle API
- Le API dei frammenti di destinazione sono state ritirate. Per passare i dati tra i frammenti, è necessario utilizzare le nuove API Fragment Result. (b/149787344)
- Le API
startActivityForResult()
/onActivityResult()
erequestPermissions()
/onRequestPermissionsResult()
su Fragment sono state ritirate. Utilizza le API Activity Result. (aosp/1290887) - Modifica che causa interruzione di Attività
1.2.0-alpha04
: il metodoprepareCall()
è stato rinominato inregisterForActivityResult()
. (aosp/1278717)
Correzioni di bug
- L'esecuzione del frammento
getViewLifecycleOwner()
viene ora interrotta prima della chiamata dionSaveInstanceState()
, rispecchiando il comportamento del ciclo di vita del frammento. (b/154645875) - La chiamata
setMenuVisibility(false)
su un frammento ora modifica correttamente la visibilità dei menu forniti dai relativi frammenti secondari. (b/153593580) - È stato corretto un
illegalStateException
durante l'aggiunta di un frammento alla gerarchia di visualizzazione di unDialogFragment
conFragmentContainerView
. (b/154366601) - Il metodo
getDefaultViewModelProviderFactory()
sui fragment 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
sono rilasciati. La versione 1.3.0-alpha03 contiene questi commit.
Modifiche alle API
- I metodi
prepareCall
suFragment
ora sonofinal
. (b/152439361)
Correzioni di bug
- È stata corretta una regressione introdotta in 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 alla configurazione. (b/152137004) - Risolto un problema per cui le transizioni di uscita e degli elementi condivisi vengono ignorate quando si utilizza
setTargetFragment()
. (b/152023196) - Da Frammento
1.2.4
: sono state aggiornate le regole ProGuard del frammento per consentire l'offuscamento dei frammenti mantenuti. (b/151605338) - Da Fragment
1.2.4
: è stata disattivata la regola LintFragmentLiveDataObserve
per le classiDialogFragment
poiché il 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)
Modifiche alle dipendenze
- I frammenti dipendono da Activity
1.2.0-alpha03
, che ha subito miglioramenti significativi all'API Activity Result introdotta in Activity1.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
sono rilasciati. La versione 1.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- È stato aggiunto il supporto per l'API
ActivityResultRegistry
introdotta in Activity1.2.0-alpha02
per gestire i flussistartActivityForResult()
+onActivityResult()
erequestPermissions()
+onRequestPermissionsResult()
senza eseguire l'override dei metodi nel fragment, oltre a fornire hook per testare questi flussi. Consulta la sezione aggiornata Ottenere un risultato da un'attività. (b/125158199)
Modifiche alle 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()
è ora deprecato. Il codice che tocca la visualizzazione del frammento deve essere eseguito inonViewCreated()
(chiamato immediatamente prima dionActivityCreated()
) e l'altro codice di inizializzazione deve essere inonCreate()
. Per ricevere un callback in particolare al termine dell'onCreate()
dell'attività, è necessario registrare unLifeCycleObserver
nell'Lifecycle
dell'attività inonAttach()
e rimuoverlo una volta ricevuto il callbackonCreate()
. (b/144309266)
Correzioni di bug
- Da Fragment
1.2.3
: è stato corretto un bug inDialogFragment
che causava unStackOverflowError
durante la chiamata digetLayoutInflater()
daonCreateDialog()
. (b/117894767, aosp/1258664) - Da Fragment
1.2.3
: è stato ridotto l'ambito delle regole ProGuard incluse di Fragment per garantire che le classi Fragment inutilizzate possano essere rimosse. (b/149665169) - Da Frammento
1.2.3
: corretti i falsi positivi nel controllo LintUseRequireInsteadOfGet
quando si utilizza un nome di variabile locale che ombreggiava il nome della proprietà Kotlin. (b/149891163) - Da Fragment
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
sono rilasciati. La versione 1.3.0-alpha01 contiene questi commit.
Nuove funzionalità
- È stato aggiunto il supporto dell'API
ViewTreeLifecycleOwner.get(View)
aggiunta nel ciclo di vita2.3.0-alpha01
in modo che restituiscaviewLifecycleOwner
del frammento comeLifecycleOwner
per qualsiasi visualizzazione restituita daonCreateView()
. (aosp/1182955)
Modifiche alle API
- Il metodo
setRetainInstance()
su Fragment è stato ritirato. Con l'introduzione di ViewModel, gli sviluppatori hanno a disposizione un'API specifica per conservare lo stato che può essere associato ad attività, fragment e grafici di navigazione. In questo modo, gli sviluppatori possono utilizzare un Fragment normale, 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 conservato (ovvero il costruttore diViewModel
e il callbackonCleared()
che riceve). (b/143911815) - 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. (b/145132715)
Correzioni di bug
- Ora le regole ProGuard dei fragment mantengono correttamente solo i costruttori predefiniti delle classi
Fragment
utilizzate anziché per tutte le istanzeFragment
, correggendo una regressione introdotta in Fragment1.2.1
. (b/149665169 - Le
require___()
regole Lint aggiunte nel fragmento1.2.2
non generano più falsi positivi sulle variabili locali che condividono lo stesso nome delle proprietà Kotlin nascoste (ad es.view
). (b/149891163) FragmentContainerView
non genera più unUnsupportedOperationException
quando si utilizza l'anteprima del layout in Android Studio. (b/149707833)- È stato corretto un problema a causa del quale i frammenti conservati aggiunti dopo il salvataggio dello stato non venivano ricreati continuamente e poi eliminati 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
sono rilasciati. La versione 1.2.5 contiene questi commit.
Correzioni di bug
- L'esecuzione del frammento
getViewLifecycleOwner()
viene ora interrotta prima della chiamata dionSaveInstanceState()
, rispecchiando il comportamento del ciclo di vita del frammento. Questa funzionalità è stata rilasciata in precedenza nel frammento1.3.0-alpha04
. (b/154645875) - La chiamata
setMenuVisibility(false)
su un frammento ora modifica correttamente la visibilità dei menu forniti dai relativi frammenti secondari. Questa funzionalità è stata rilasciata in precedenza nel frammento1.3.0-alpha04
. (b/153593580)
Versione 1.2.4
Versione 1.2.4
1° aprile 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
e androidx.fragment:fragment-testing:1.2.4
sono rilasciati. La versione 1.2.4 contiene questi commit.
Correzioni di bug
- Sono state aggiornate le regole ProGuard dei fragment per consentire l'offuscamento dei fragment mantenuti. (b/151605338)
- È stata disattivata la regola Lint sulle classi
FragmentLiveDataObserve
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
.DialogFragment
(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
sono rilasciati. La versione 1.2.3 contiene questi commit.
Correzioni di bug
- È stato corretto un bug in
DialogFragment
che causava unStackOverflowError
durante la chiamata agetLayoutInflater()
daonCreateDialog()
. (b/117894767, aosp/1258665) - È stato ridotto l'ambito delle regole ProGuard incluse di Fragment per garantire che le classi Fragment inutilizzate possano essere rimosse. (b/149665169)
- Sono stati corretti i falsi positivi nel controllo Lint
UseRequireInsteadOfGet
quando si utilizza un nome di variabile locale che ombreggiava 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
sono 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 verifica che tu stia utilizzando il
debugImplementation
corretto quando utilizzi l'artefattofragment-testing
. (b/141500106) - Ora i frammenti suggeriscono 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 un equivalenteget
erequire
. (aosp/1202883)
Correzioni di bug
- Sono stati corretti i file ProGuard dei fragment per evitare gli 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 ai controlli
require___()
Lint 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
sono rilasciati. La versione 1.2.1 contiene questi commit.
Correzioni di bug
- I fragment aggiunti tramite i metodi
add
ereplace
che accettano un'istanzaClass
(o le versioni reificate di Kotlin) ora hanno il costruttore predefinito mantenuto da ProGuard. (b/148181315) FragmentStatePagerAdapter
eFragmentPagerAdapter
non rilevano più le eccezioni generate daFragmentManager
durante l'esecuzione difinishUpdate()
. (aosp/1208711)- È stato risolto un problema a causa del quale
FragmentManager.findFragment()
non funzionava con i frammenti aggiunti tramite il tag<fragment>
. (b/147784323) - I fragment gonfiati utilizzando il tag
<fragment>
ora ricevono sempre una chiamata aonInflate()
prima dionCreate()
nel layout. (aosp/1215856) - La chiamata di
toString()
su un'istanzaFragmentManager
non genera più unNullPointerException
quando l'attività è già stata eliminata. (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
sono rilasciati. La versione 1.2.0 contiene questi commit.
Modifiche importanti dalla versione 1.1.0
- FragmentContainerView:
FragmentContainerView
è il contenitore vivamente consigliato per i fragment aggiunti dinamicamente, in sostituzione dell'utilizzo diFrameLayout
o di altri layout. Supporta anche gli stessiclass
,android:name
eandroid:tag
facoltativi del tag<fragment>
, ma utilizza unFragmentTransaction
normale per aggiungere questo frammento iniziale, anziché il percorso del codice personalizzato utilizzato da<fragment>
. onDestroyView()
Tempistica: ora i fragment attendono il completamento delle animazioni di uscita, delle transizioni del framework di uscita e delle transizioni AndroidX (quando si utilizza Transition1.3.0
) prima di chiamareonDestroyView()
.- Basato sulla classe
add()
ereplace()
: sono stati aggiunti nuovi overload diadd()
ereplace()
suFragmentTransaction
che accettano unClass<? extends Fragment>
e unBundle
facoltativo di argomenti. Questi metodi utilizzanoFragmentFactory
per creare un'istanza del fragment da aggiungere. Anche le estensioni Kotlin che utilizzano tipi reificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)
) sono state aggiunte afragment-ktx
. - Integrazione di Lifecycle ViewModel SavedState:
SavedStateViewModelFactory
è ora la factory predefinita utilizzata quando si utilizzanoby viewModels()
,by activityViewModels()
, il costruttoreViewModelProvider
oViewModelProviders.of()
con un fragment. - Nuovi controlli Lint: è stato aggiunto un nuovo controllo Lint che garantisce l'utilizzo di
getViewLifecycleOwner()
quando si osservaLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
. - Deprecazione di
getFragmentManager()
: i metodigetFragmentManager()
erequireFragmentManager()
in Fragment sono stati ritirati e sostituiti con un singolo metodogetParentFragmentManager()
, che restituisceFragmentManager
non null a cui viene aggiunto Fragment (puoi utilizzareisAdded()
per determinare se è sicuro chiamare). - Ritiro di
FragmentManager.enableDebugLogging()
: il metodo staticoFragmentManager.enableDebugLogging
è stato ritirato. FragmentManager ora rispettaLog.isLoggable()
per il tagFragmentManager
, consentendoti di attivare la registrazioneDEBUG
oVERBOSE
senza ricompilare l'app.
Problemi noti
- I fragment a cui viene fatto 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 fragment. (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
sono rilasciati. La versione 1.2.0-rc05 contiene questi commit.
Correzioni di bug
- È stata corretta una regressione in Fragment
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 vengono cancellati correttamente anche quando si trovano solo a volte nel layout (ad esempio, solo nel layout orizzontale). Di conseguenza, questi frammenti vengono ora spostati correttamente inCREATED
anche quando non si trovano nel layout, anziché essere istanziati ma non passare mai attraverso alcun metodo del ciclo di vita. (b/145769287)
Versione 1.2.0-rc04
18 dicembre 2019
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
e androidx.fragment:fragment-testing:1.2.0-rc04
sono rilasciati. La versione 1.2.0-rc04 contiene questi commit.
Correzioni di bug
- Sono state modificate 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
sono rilasciati. La versione 1.2.0-rc03 contiene questi commit.
Correzioni di bug
- È stato corretto un cambiamento di comportamento involontario per cui i frammenti rimossi vengono comunque restituiti da
findFragmentById()
/findFragmentByTag()
durante l'esecuzione delle animazioni/transizioni di uscita. (b/143982969, aosp/1167585) - I fragment figlio ora vengono arrestati correttamente prima dei genitori quando l'attività contenitore chiama
onSaveInstanceState()
. (b/144380645) - Risolto un problema per cui le visualizzazioni venivano contrassegnate erroneamente con
INVISIBLE
dopo la visualizzazione di un frammento nascosto. (b/70793925) - Le transizioni degli elementi condivisi dei fragment ora gestiscono le View che sono state ruotate, scalate e così via. (b/142835261)
Aggiornamenti della documentazione
- È stata chiarita la documentazione sul ritiro di
setUserVisibleHint()
. (b/143897055) - È stata migliorata la documentazione su
setFragmentFactory()
egetFragmentFactory()
per indicare meglio che l'impostazione di unFragmentFactory
influirà anche sui FragmentManager secondari. (aosp/1170095)
Modifiche alle dipendenze
- Ora i fragment 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
sono rilasciati. La versione 1.2.0-rc02 contiene questi commit.
Correzioni di bug
- In Kotlin, LintFix per l'utilizzo di
getViewLifecycleOwner()
durante l'osservazione diLiveData
daonCreateView()
,onViewCreated()
oonActivityCreated()
(introdotto in Fragment1.2.0-rc01
) ora utilizza la sintassi di accesso alla proprietà KotlinviewLifecycleOwner
anzichégetViewLifecycleOwner()
. (aosp/1143821)
Versione 1.2.0-rc01
23 ottobre 2019
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
e androidx.fragment:fragment-testing:1.2.0-rc01
sono 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 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
come parte dell'inflazione, garantendo chefindFragmentById()
efindFragmentByTag()
funzionino immediatamente dopo. (b/142520327)- È stato corretto un
IllegalStateException
inFragmentContainerView
a causa del salvataggio dello stato. (b/142580713) - È stato corretto un
UnsupportedOperationException
inFragmentContainerView
quando la classeFragmentContainerView
è offuscata. (b/142657034)
Problemi noti
- I fragment a cui viene fatto 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 fragment. Abbiamo disattivato la regola Lint che suggerisce di passare aFragmentContainerView
finché il problema non viene 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
sono rilasciati. La versione 1.2.0-beta02 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui
onInflate()
di Fragment non riceveva gli attributi corretti daFragmentContainerView
, interrompendo 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
sono 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)- I frammenti ora contengono un avviso Lint che offre una correzione rapida per sostituire
<fragment>
conFragmentContainerView
. (b/139830056)
Correzioni di bug
- È stato corretto un
ClassCastException
durante l'utilizzo diandroidx.transition
. (b/140680619) - Quando si utilizza Transition
1.3.0-beta01
, i frammenti ora attendono il completamento delle transizioniandroidx.transition
(oltre alle transizioni e alle animazioni del framework, che sono state corrette rispettivamente in Fragment1.2.0-alpha03
e Fragment1.2.0-alpha02
) prima di inviareonDestroyView()
. (aosp/1119841) - Quando si utilizza Transizione
1.3.0-beta01
, i fragment ora annullano correttamente le transizioniandroidx.transition
prima di avviare nuove transizioni / animazioni sullo stesso contenitore. (aosp/1119841) - È stato risolto un problema relativo all'API 17 e versioni precedenti durante l'utilizzo delle transizioni
androidx.transition
nella visualizzazione principale del fragment quando si utilizzaFragmentContainerView
. (b/140361893) - L'artefatto
fragment-testing
ora dipende da AndroidX Test1.2.0
, risolvendo un'incompatibilità con l'ultima versione di Espresso 3.2.0. (b/139100149) - È stato rimosso l'utilizzo di
Log.w
in FragmentManager. (aosp/1126468)
Problemi noti
onInflate()
del fragment non riceve gli attributi corretti daFragmentContainerView
, interrompendo casi 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
sono rilasciati. La versione 1.2.0-alpha04 contiene questi commit.
Modifiche all'API
- I metodi
getFragmentManager()
erequireFragmentManager()
suFragment
sono stati ritirati e sostituiti con un singolo metodogetParentFragmentManager()
, che restituisce il valoreFragmentManager
non nullo a cui viene aggiunto il fragment (puoi utilizzareisAdded()
per determinare se è sicuro chiamarlo). (b/140574496) - Il metodo statico
FragmentManager.enableDebugLogging
è stato ritirato. FragmentManager ora rispettaLog.isLoggable()
per il tagFragmentManager
, consentendoti di attivare la registrazioneDEBUG
oVERBOSE
senza ricompilare l'app. (aosp/1116591)
Correzioni di bug
- I fragment vengono ora eliminati correttamente mentre sono in esecuzione le animazioni di uscita su altri fragment. (b/140574199)
- È stato risolto un problema per cui i fragment chiamavano
Activity.findViewById()
, cosa che non facevano prima. (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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche all'API
FragmentContainerView
ora èfinal
. (b/140133091)
Correzioni di bug
FragmentContainerView
ora inverte correttamente l'ordine di disegno quando i frammenti vengono estratti dallo stack precedente. (b/139104187)- È stato risolto un problema per cui veniva eseguita l'animazione errata quando si estraeva un frammento e si aggiungeva un nuovo frammento contemporaneamente. (b/111659726)
- Ora i fragment attendono il completamento delle transizioni (oltre alle animazioni, corretto in Fragment
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
è stato rilasciato. 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 utilizzi
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
consetTransition
su unFragmentTransaction
sono state aggiornate in modo che corrispondano alle animazioni utilizzate dalle attività sui dispositivi Android 10. (aosp/1012812, aosp/1014730)
Modifiche all'API
- Introduce
FragmentContainerView
come contenitore fortemente consigliato per i Fragment aggiunti dinamicamente, sostituendo l'utilizzo diFrameLayout
e così via, in quanto risolve i problemi di ordinamento Z delle animazioni e l'invio degli inset della finestra ai Fragment. (b/37036000, aosp/985243, b/136494650) - È stato aggiunto un metodo statico
FragmentManager.findFragment(View)
per recuperare il fragment contenitore da una visualizzazione generata da un fragment. È disponibile anche un'estensione Kotlin infragment-ktx
. (aosp/1090757) - Sono stati aggiunti nuovi overload di
add()
ereplace()
suFragmentTransaction
che accettano unClass<? extends Fragment>
e unBundle
facoltativo di argomenti. Questi metodi utilizzanoFragmentFactory
per creare un'istanza del fragment da aggiungere. Anche l'estensione Kotlin che utilizza tipi reificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)
) è stata aggiunta afragment-ktx
. (b/126124987) - Sono state aggiunte annotazioni
@MainThread
ai callback del ciclo di vitaFragment
. (b/127272564) - Le API correlate al titolo della breadcrumb su
FragmentTransaction
eFragmentManager.BackStackEntry
sono state ritirate. (b/138252944) - Il metodo
setTransitionStyle
suFragmentTransaction
è stato ritirato. (aosp/1011537) - Molti metodi in
FragmentManager
non sono piùabstract
.FragmentManager
stesso rimaneabstract
e non deve essere istanziato o esteso direttamente. Devi continuare a ottenere un'istanza esistente solo dagetSupportFragmentManager()
,getChildFragmentManager()
e così via.
Correzioni di bug
- Da Frammento
1.1.0-rc04
: ora i frammenti annullano correttamente le transizioni posticipate quando vengono rimossi. (b/138251858) - Da Fragment
1.1.0-rc03
: è stato risolto un problema per cui la chiamata 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 fragment attendono il completamento 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 combinano un'operazione di visualizzazione e aggiunta. (b/120507394) - È stata aggiunta una soluzione alternativa a
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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- FragmentManager ora chiama
requestApplyInsets()
dopo aver collegato la visualizzazione del fragment e subito prima di chiamareonViewCreated()
, assicurandosi che la visualizzazione abbia sempre gli inset corretti. (b/135945162)
Correzioni di bug
- È stato corretto un
NullPointerException
quando veniva 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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche importanti dalla versione 1.0.0
- fragment-testing: l'artefatto
fragment-testing
fornisce una classeFragmentScenario
per testare un fragment in isolamento. Per ulteriori dettagli, consulta la documentazione relativa al test dei fragment della tua 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 ViewModels: l'artefatto
fragment-ktx
ora contiene due delegati di proprietà Kotlin:by viewModels()
per accedere alle ViewModel associate al singolo fragment eby activityViewModels()
per accedere alle ViewModel con ambito limitato all'attività. - Max Lifecycle: ora puoi impostare uno stato del ciclo di vita massimo per un fragment chiamando
setMaxLifecycle()
su unFragmentTransaction
. Questo sostituisce il camposetUserVisibleHint()
, ora obsoleto.FragmentPagerAdapter
eFragmentStatePagerAdapter
hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. - Costruttore FragmentActivity LayoutId: le sottoclassi di
FragmentActivity
ora possono chiamare facoltativamente un costruttore suFragmentActivity
che accetta un IDR.layout
, indicando il layout da impostare come visualizzazione dei contenuti in alternativa alla chiamata disetContentView()
inonCreate()
. Ciò non modifica il requisito che la sottoclasse abbia un costruttore senza argomenti. - Costruttore Fragment LayoutId: le sottoclassi di
Fragment
ora possono facoltativamente chiamare un costruttore suFragment
che accetta un IDR.layout
, indicando il layout da utilizzare per questo frammento in alternativa all'override dionCreateView()
. Il layout espanso può essere configurato inonViewCreated()
. - Posticipa con timeout: è stato aggiunto un nuovo sovraccarico di
postponeEnterTransition()
che richiede un timeout.
Versione 1.1.0-rc04
7 agosto 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
e androidx.fragment:fragment-testing:1.1.0-rc04
è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Ora i frammenti annullano correttamente le transizioni posticipate quando vengono rimossi. (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
è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato risolto un problema a causa del quale la chiamata 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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato risolto un arresto anomalo in
FragmentPagerAdapter
eFragmentStatePagerAdapter
durante la rimozione dell'elemento corrente. (b/137209870)
Versione 1.1.0-rc01
2 luglio 2019
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
e androidx.fragment:fragment-testing:1.1.0-rc01
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Ora i frammenti aggiornano correttamente la loro visibilità quando si utilizzano le operazioni
show()
ohide()
durante l'esecuzione della transizione. (b/133385058) - È stato corretto un
NullPointerException
quando veniva 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
sono 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 fragment nidificati ora sono nidificati correttamente. (b/133497591) - Le
OnBackPressedCallback
istanze registrate nelonCreate()
di un fragment 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 fragment vengono ora ignorate quando si utilizza
animateLayoutChanges="true"
, risolvendo un problema per cui i fragment non venivano eliminati correttamente. (b/116257087)
Versione 1.1.0-alpha09
16 maggio 2019
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
e androidx.fragment:fragment-testing:1.1.0-alpha09
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Modifiche all'API
- Ora i fragment ricevono un callback a un nuovo metodo
onPrimaryNavigationFragmentChanged(boolean)
quando cambia il fragment di navigazione principale. aosp/960857
Correzioni di bug
- Le voci di menu aumentate da un fragment secondario vengono ora rimosse correttamente quando viene rimosso il fragment 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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Questa release non è compatibile con Preferences 1.1.0-alpha01 fino a 1.1.0-alpha04. Esegui l'upgrade a Preferences 1.1.0-alpha05 quando utilizzi questa versione di Fragments.
Nuove funzionalità
- È stato aggiunto un nuovo overload di
postponeEnterTransition()
che richiede un timeout, dopodiché il fragment chiamerà automaticamentestartPostponedEnterTransition()
b/120803208
Modifiche all'API
- Modifica che causa interruzione: è stato rimosso il metodo
FragmentFactory
instantiate
precedentemente ritirato che accettava unBundle
. aosp/953856 - Modifica sostanziale: 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 fragment il cui ciclo di vita è stato limitato tramite
setMaxLifecycle()
non vengono più ripristinati prima di raggiungere il loro stato finale. b/131557151 - Quando utilizzi
setMaxLifecycle(Lifecycle.State.CREATED)
, la visualizzazione dei frammenti viene eliminata correttamente. aosp/954180
Versione 1.1.0-alpha07
25 aprile 2019
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
e androidx.fragment:fragment-testing:1.1.0-alpha07
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Ora puoi impostare uno stato del ciclo di vita massimo per un fragment chiamando
setMaxLifecycle()
su unFragmentTransaction
. Questo sostituisce il camposetUserVisibleHint()
, ora obsoleto.FragmentPagerAdapter
eFragmentStatePagerAdapter
hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. (b/129780800)
Modifiche alle API
moveToState(STARTED)
suFragmentScenario
ora può essere chiamato solo su dispositivi con API 24 e versioni successive. (b/129880016)
Modifiche al comportamento
- A seguito di (b/129907905), i fragment nello stack precedente non riceveranno un callback a
onCreateView()
quando l'attività di hosting viene ricreata.onCreateView()
ora verrà chiamato solo quando il fragment diventa visibile (ovvero quando lo stack di attività viene estratto).
Correzioni di bug
- È stato risolto un problema quando si utilizzava un tag
<fragment>
in XML e il costruttorecontentLayoutId
diFragmentActivity
oAppCompatActivity
. (b/129907905) - È stato corretto un problema per cui i fragment nello stack precedente non venivano spostati almeno a
CREATED
dopo una modifica alla configurazione, causando lo smaltimento improprio di ViewModel e fragment secondari mantenuti. (b/129593351) - È stato corretto un arresto anomalo in
restoreSaveState
causato da una mancata sincronizzazione dei frammenti conservati dopo il salvataggio dello stato dell'istanza. (b/130433793) (aosp/947824) - Sono stati risolti i problemi per cui un
OnBackPressedCallback
aggiunto con un ciclo di vita del frammento non veniva chiamato seFragmentManager
aveva uno stack precedente. Per maggiori dettagli, vedi androidx.activity 1.0.0-alpha07. (aosp/948209) - I frammenti non applicano più
LAYER_TYPE_HARDWARE
per le animazioni. Se hai bisogno 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
sono rilasciati. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Le eccezioni generate da FragmentManager ora includono il nome del fragment nel messaggio. (b/67759402)
Modifiche alle 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 argomento Bundle è stato ritirato e le app devono utilizzare il nuovo overloadinstantiate
che non accetta un Bundle. (b/128836103) - I metodi
FragmentScenario
ora sono annotati correttamente con@StyleRes
. (aosp/924193) FragmentTabHost
è stato ritirato. (b/127971835)getThemedContext()
di FragmentActivity è stato rimosso. (aosp/934078)
Correzioni di bug
- È stato corretto un problema di regressione nella versione 1.1.0-alpha05 che causava il lampeggio del frammento in arrivo sullo schermo. (b/129405432)
- È stato risolto un problema per cui il frammento di navigazione principale veniva perso dopo una serie di operazioni popBackStack+replace+popBackStack. (b/124332597)
- È stato risolto un problema durante l'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 fragment di destinazione esistente con un fragment non ancora collegato a FragmentManager. (aosp/932156)
Versione 1.1.0-alpha05
13 marzo 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
e androidx.fragment:fragment-testing:1.1.0-alpha05
sono rilasciati. L'elenco completo dei commit inclusi in questa versione è disponibile qui.
Nuove funzionalità
- Le ricerche di annotazioni
@ContentView
ora vengono memorizzate nella cache (b/123709449)
Modifiche al funzionamento
- La chiamata a
remove()
,hide()
,show()
,detach()
esetPrimaryNavigationFragment()
con un fragment collegato a un FragmentManager diverso ora genera unIllegalStateException
anziché non riuscire in modo 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 utilizzavagetDialog().dismiss()
ogetDialog().cancel()
(b/126563750)
Versione 1.1.0-alpha04
7 febbraio 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
e androidx.fragment:fragment-testing 1.1.0-alpha04
sono 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 in alternativa all'override dionCreateView()
. Ti consigliamo di visualizzare i lavori correlati inonViewCreated()
. (aosp/837619) fragment-testing
ora dipende dalla versione stabile 1.1.0 diandroidx.test:core-ktx
(b/121209673)- Ora puoi utilizzare
openActionBarOverflowOrOptionsMenu
conFragmentScenario
per testare i menu delle opzioni ospitati da Fragment (b/121126668)
Modifiche all'API
- È stato aggiunto un metodo
requireArguments()
che restituisce un valore@NonNull Bundle
o genera un erroreIllegalStateException
(b/121196360) - È stata aggiunta una nota che indica che
getLifecycle()
,getViewLifecycleOwner()
egetViewLifecycleOwnerLiveData()
non devono essere sostituiti e verranno resi definitivi in una release futura. Se attualmente esegui l'override di questo metodo, invia una richiesta di funzionalità. (aosp/880714) - È stata aggiunta una nota che indica che
getViewModelStore()
non deve essere sostituito e verrà reso definitivo in una versione futura. Se attualmente esegui l'override di questo metodo, invia una richiesta di funzionalità. (aosp/880713) - È stato risolto un problema di compatibilità binaria con le versioni precedenti di Fragments. (aosp/887877) (aosp/889834)
Correzioni di bug
- I frammenti target vengono eliminati correttamente quando passi
null
asetTargetFragment()
. (aosp/849969) - È stato risolto un problema per cui a volte i frammenti target non erano disponibili in o dopo
onDestroy()
. (b/122312935) - Il metodo onDismiss() di DialogFragment viene ora 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 della proprietà Kotlin
by activityViewModels
per recuperare i ViewModel associati all'attività contenitore [b/119050253] - Il delegato della proprietà Kotlin
by viewModels
è stato esteso 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
- Correzione di IllegalStateException: errore durante il salvataggio dello stato b/120814739
- I fragment ripristinati dallo stato dell'istanza salvato ora riceveranno sempre un
Bundle
non nullo [b/119794496] - I frammenti rimossi non riutilizzano più il relativo 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 un'espressione lambda per la creazione di Fragment in alternativa al passaggio di un'istanza di
FragmentFactory
. (aosp/812913)
Correzioni di bug
- È stata corretta un'eccezione IllegalStateException quando si utilizzano Fragment nidificati nello stack precedente (b/119256498).
- È stato risolto l'arresto anomalo durante l'utilizzo di
FragmentScenario.recreate()
con unFragmentFactory
(aosp/820540) - È stato risolto un problema per cui i frammenti di destinazione non erano accessibili dopo la rimozione del frammento (aosp/807634)
Versione 1.1.0-alpha01
5 novembre 2018
Questa è la prima release dell'artefatto
fragment-testing
e di FragmentScenario
, che si basa sulle
API androidx.test:core. Per ulteriori dettagli, consulta la documentazione sui test dei fragment.
Nuove funzionalità
- Nuova classe FragmentScenario per testare i fragment in modo isolato.
- Ora puoi impostare un
FragmentFactory
su qualsiasiFragmentManager
per controllare il modo in cui vengono create le nuove istanze di Fragment. - È stato aggiunto un nuovo delegato di proprietà Kotlin
by viewModels()
per il recupero dei ViewModel da un Fragment. - Gli eventi di input in attesa (ad esempio i clic) ora vengono annullati nel
onStop()
di un fragmento.
Modifiche all'API
- Ha ampliato in modo significativo le annotazioni di nullabilità nell'intera superficie dell'API Fragment.
Correzioni di bug
- Correzione di un problema che causava l'errore delle operazioni di frammentazione all'interno di LiveData (b/77944637)
Problemi noti
- Non è possibile accedere ai frammenti di destinazione dopo che un frammento è stato rimosso da FragmentManager.
fragment-testing
dipende daandroidx.test:core:1.0.0-beta01
anziché dalandroidx.test:core:1.0.0
corretto.