Frammento

Segmentare l'app in più schermate indipendenti ospitate all'interno di un'attività.
Aggiornamento più recente Release stabile Candidato per l'uscita Versione beta Release alpha
26 giugno 2024 1.8.1 - - -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza su Fragment, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

trendy

dependencies {
    def fragment_version = "1.8.1"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.8.1"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se scopri nuovi problemi o hai idee per migliorare questa raccolta. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a stella.

Crea un nuovo numero

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 1.8

Versione 1.8.1

26 giugno 2024

Viene rilasciato androidx.fragment:fragment-*:1.8.1. La versione 1.8.1 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui i frammenti senza un contenitore venivano immediatamente DESTROYED all'avvio di un gesto Indietro predittivo. Ora vengono mantenuti nello stato CREATED fino al completamento del gesto. (If6b83, b/345244539)

Versione 1.8.0

12 giugno 2024

Viene rilasciato androidx.fragment:fragment-*:1.8.0. La versione 1.8.0 contiene questi commit.

Modifiche importanti dalla versione 1.7.0

  • L'artefatto fragment-compose ora contiene un AndroidFragment Composable che consente di aggiungere frammenti nella gerarchia di Compose tramite il nome della classe dei frammenti. Gestisce automaticamente il salvataggio e il ripristino dello stato del Frammento. Da utilizzare in sostituzione diretta dell'approccio precedentemente consigliato di utilizzo di AndroidViewBinding per gonfiare un Frammento.
  • Il callback onBackStackChangeCancelled nell'interfaccia OnBackStackChangedListener di FragmentManager ora viene attivato durante l'esecuzione delle operazioni in FragmentManager, avvicinandolo in base alle tempistiche del callback onBackStackChangeCommitted.

Versione 1.8.0-rc01

29 maggio 2024

Viene rilasciato androidx.fragment:fragment-*:1.8.0-rc01. La versione 1.8.0-rc01 contiene questi commit.

Correzioni di bug

  • Il callback onBackStackChangeCancelled nell'interfaccia FragmentManagers OnBackStackChangedListener ora viene attivato durante l'esecuzione delle operazioni in FragmentManager, avvicinandolo in base alle tempistiche del callback onBackStackChangeCommitted. (I5ebfb, b/332916112)

Versione 1.8.0-beta01

14 maggio 2024

Viene rilasciato androidx.fragment:fragment-*:1.8.0-beta01. La versione 1.8.0-beta01 contiene questi commit.

Correzioni di bug

  • Da Frammento 1.7.1: il valore predittivo indietro ora viene eseguito solo per le transazioni in cui tutti i frammenti hanno un animazione o una transizione Androidx ricercabile. In questo modo è stato risolto un problema per cui l'annullamento di una transazione parzialmente cercabile causava la visualizzazione dello schermo nero. (I43037, b/339169168)

Versione 1.8.0-alpha02

17 aprile 2024

Viene rilasciato androidx.fragment:fragment-*:1.8.0-alpha02. La versione 1.8.0-alpha02 contiene questi commit.

Correzioni di bug

  • Da Frammento 1.7.0-rc02: sono stati aggiunti log per indicare il motivo per cui l'impostazione di un sharedElement senza altre transizioni non riuscirà. (Iec48e)
  • Da Frammento 1.7.0-rc02: è stato corretto un bug per cui si verificava un arresto anomalo se veniva aggiunto un elemento condiviso non cercabile a una transazione in cui tutte le altre transizioni erano ricercabili. Ora la transazione verrà considerata correttamente non cercabile. (I18ccd)

Versione 1.8.0-alpha01

3 aprile 2024

Viene rilasciato androidx.fragment:fragment-*:1.8.0-alpha01. 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 dei frammenti. Gestisce automaticamente il salvataggio e il ripristino dello stato del Frammento. Può essere usato in sostituzione diretta di AndroidViewBinding Composable.(b/312895363, Icf841)

Modifiche alla documentazione

  • È stata aggiornata la documentazione relativa alle API di OnBackStackChangedListener per indicare quando vengono chiamate e come devono essere utilizzate. (I0bfd9)

Aggiornamento delle dipendenze

Versione 1.7

Versione 1.7.1

14 maggio 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.1. La versione 1.7.1 contiene questi commit.

Correzioni di bug

  • Il valore predittivo indietro ora verrà eseguito solo per le transazioni in cui tutti i frammenti hanno un animazione o una transizione Androidx ricercabile. In questo modo è stato risolto un problema per cui l'annullamento di una transazione parzialmente cercabile causava la visualizzazione di una schermata vuota. (I43037, b/339169168)

Versione 1.7.0

1° maggio 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0. La versione 1.7.0 contiene questi commit.

Supporto predittivo del gesto Indietro

  • I frammenti ora forniscono il supporto per predittivo in-app quando si utilizza Animator o quando si utilizza AndroidX Transizione 1.5.0. In questo modo, gli utenti possono utilizzare il gesto Indietro per visualizzare il frammento precedente cercando l'Animator o la transizione prima di decidere se eseguire il commit della transazione completando il gesto o annullando l'operazione.
Sistema di transizione Risorsa XML Supporta la funzionalità Indietro predittiva
Animation R.anim No
Animator R.animator
Framework Transition R.transition No
AndroidX Transition con Transizione 1.4.1 o versioni precedenti R.transition No
AndroidX Transition con Transizione 1.5.0 R.transition

Se riscontri problemi con il supporto predittivo Indietro in Fragments dopo aver attivato il gesto Indietro predittivo, segnala il problema relativo a Fragment con un progetto di esempio che lo riproduca. Puoi disattivare la funzionalità predittiva usando FragmentManager.enabledPredictiveBack(false) in onCreate() della tua Attività.

FragmentManager.OnBackStackChangedListener() ora fornisce onBackStackChangeProgressed() e onBackStackChangeCancelled() per ricevere rispettivamente l'avanzamento predittivo e gli eventi annullati.

Artefatto Composizione frammento

È stato creato un nuovo artefatto fragment-compose incentrato sulle app di supporto in fase di passaggio da un'architettura basata su Fragment a un'architettura interamente basata 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 l'UI di un singolo frammento creando un ComposeView per te e impostando il ViewCompositionStrategy corretto.

  class ExampleFragment : Fragment() {

      override fun onCreateView(
          inflater: LayoutInflater,
          container: ViewGroup?,
          savedInstanceState: Bundle?
      ) = content {
          // Write your @Composable content here
          val viewModel: ExampleViewModel = viewModel()

          // or extract it into a separate, testable method
          ExampleComposable(viewModel)
      }
  }

Versione 1.7.0-rc02

17 aprile 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0-rc02. La versione 1.7.0-rc02 contiene questi commit.

Correzioni di bug

  • Log aggiunti per indicare il motivo per cui l'impostazione di un sharedElement senza altre transizioni non riuscirà. (Iec48e)
  • È stato corretto un bug per cui si verificava un arresto anomalo se veniva aggiunto un elemento condiviso non cercabile a una transazione in cui tutte le altre transizioni erano ricercabili. Ora la transazione verrà considerata correttamente non cercabile. (I18ccd)

Versione 1.7.0-rc01

3 aprile 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0-rc01. La versione 1.7.0-rc01 contiene questi commit.

Aggiornamento delle dipendenze

Versione 1.7.0-beta01

20 marzo 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0-beta01. La versione 1.7.0-beta01 contiene questi commit.

Modifiche alle API

  • FragmentHostCallback è ora scritto in Kotlin, in modo che il valore null del tipo generico dell'host corrisponda a quello del tipo restituito di onGetHost(). (I40af5)

Correzioni di bug

  • È stato risolto un problema per cui, quando si esegue un gesto Indietro predittivo su un frammento che non si trova in un contenitore, questo frammento non verrebbe mai distrutto. Il Frammento verrà spostato immediatamente allo stato finale. (Ida0d9)
  • È stato risolto un problema in Frammenti per cui l'interruzione delle transizioni in arrivo con un gesto predittivo Indietro distruggeva la visualizzazione in entrata e lasciava una schermata vuota. (Id3f22, b/319531491)

Versione 1.7.0-alpha10

7 febbraio 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha10. La versione 1.7.0-alpha10 contiene questi commit.

Correzioni di bug

  • È stato risolto il problema noto nella precedente release Fragment in cui, utilizzando il supporto predittivo Indietro di Fragment per Animator o la transizione ad AndroidX, Fragments generava un NullPointerException da handleOnBackProgressed se non è mai stato aggiunto FragmentManager.OnBackStackChangedListener tramite addOnBackStackChangedListener. (I7c835)

Versione 1.7.0-alpha09

24 gennaio 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha09. La versione 1.7.0-alpha09 contiene questi commit.

Artefatto Composizione frammento

È stato creato un nuovo artefatto fragment-compose incentrato sulle app di supporto in fase di passaggio da un'architettura basata su Fragment a un'architettura interamente basata 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 l'UI di un singolo frammento creando un ComposeView per te e impostando il ViewCompositionStrategy corretto. (561cb7, b/258046948)

class ExampleFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = content {
        // Write your @Composable content here
        val viewModel: ExampleViewModel = viewModel()

        // or extract it into a separate, testable method
        ExampleComposable(viewModel)
    }
}

Nuove funzionalità

  • FragmentManager.OnBackStackChangedListener() ora fornisce onBackStackChangeProgressed() e onBackStackChangeCancelled() per ricevere rispettivamente l'avanzamento predittivo e gli eventi annullati. (214b87)

Problema noto

  • Quando utilizzi il supporto predittivo Indietro di Fragment per Animator o la Transizione AndroidX, Fragments genererà un NullPointerException da handleOnBackProgressed se non è mai stato aggiunto FragmentManager.OnBackStackChangedListener tramite addOnBackStackChangedListener. L'aggiunta manuale di un listener consente di aggirare l'arresto anomalo. Sarà disponibile una correzione per questo problema nella prossima versione di Fragments.

Versione 1.7.0-alpha08

10 gennaio 2024

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha08. La versione 1.7.0-alpha08 contiene questi commit.

Pulizia

Versione 1.7.0-alpha07

29 novembre 2023

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha07. La versione 1.7.0-alpha07 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema di tipo NullPointerException causato dall'impostazione della transizione di un elemento condiviso e dall'impossibilità di impostare anche una transizione entrata/uscita. (I8472b)
  • Da Frammento 1.6.2: quando il frammento di un FragmentContainerView è gonfiato, i suoi stati come FragmentManager, Host e ID sono ora accessibili nel callback onInflate. (I1e44c, b/307427423)
  • Da Frammento 1.6.2: quando utilizzi clearBackStack per rimuovere un insieme di frammenti, tutti gli elementi ViewModel di Frammento nidificati verranno cancellati quando i valori ViewModels del frammento principale verranno cancellati. (I6d83c, b/296173018)

Versione 1.7.0-alpha06

4 ottobre 2023

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha06. La versione 1.7.0-alpha06 contiene questi commit.

Aggiornamento delle dipendenze

  • I frammenti sono stati aggiornati in modo da dipendere dalla nuova API animateToStart aggiunta nella transizione 1.5.0-alpha04.

Versione 1.7.0-alpha05

20 settembre 2023

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha05. La versione 1.7.0-alpha05 contiene questi commit.

Nuove funzionalità

  • I frammenti ora forniscono supporto per predittivo indietro quando si utilizzano le transizioni Androidx. In questo modo puoi utilizzare il gesto Indietro per andare al frammento precedente con la tua transizione Androidx personalizzata prima di decidere se eseguire il commit o annullare la transazione tramite il gesto completato. Per attivare questa funzionalità devi dipendere dalla release Transizione 1.5.0-alpha03. (Ib49b4, b/285175724)

Problemi noti

  • Al momento si verifica un problema per cui dopo aver annullato una volta un gesto Indietro con una transizione, la prossima volta che avvii il gesto Indietro non verrà eseguita la transizione, causando una schermata vuota. La causa potrebbe essere un problema nella Libreria di transizione. (b/300157785). Se riscontri questo problema, segnala il problema a Fragment con un progetto di esempio che lo riproduca. Puoi disattivare la funzionalità predittiva usando FragmentManager.enabledPredictiveBack(false) in onCreate() della tua Attività.

Versione 1.7.0-alpha04

6 settembre 2023

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha04. La versione 1.7.0-alpha04 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema durante l'annullamento di un gesto Indietro predittivo in cui i frammenti non riuscivano a raggiungere lo stato del ciclo di vita corretto. (I7cffe, b/297379023)
  • È stato corretto un problema di regressione in cui era consentita l'esecuzione delle animazioni con le transizioni. (I59f36)
  • È stato risolto un problema di utilizzo predittivo con frammenti per cui il tentativo di tornare indietro due volte in rapida successione dal penultimo all'ultimo frammento nello stack posteriore causava un arresto anomalo. (Ifa1a4)

Versione 1.7.0-alpha03

23 agosto 2023

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha03. La versione 1.7.0-alpha03 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo a Frammenti durante l'utilizzo di Indietro predittivo che causava l'ignoramento del primo frammento nella pila dorsale del gestore di frammenti e il completamento dell'attività quando si utilizzava 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

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha02. La versione 1.7.0-alpha02 contiene questi commit.

Correzioni di bug

  • Se usi Frammenti con gesti predittivi Indietro dall'API 34, se usi un sistema di transizione che non supporta la ricerca (Animations, Transitions) o nessuna transizione, Frammenti attenderà il completamento del gesto prima di eseguire l'azione Indietro. (I8100c)

Versione 1.7.0-alpha01

7 giugno 2023

Viene rilasciato androidx.fragment:fragment-*:1.7.0-alpha01. Questa versione è sviluppata in un ramo interno.

Nuove funzionalità

  • I frammenti ora supportano la funzionalità predittiva in-app quando viene usato Animator. In questo modo puoi utilizzare il gesto Indietro per visualizzare il frammento precedente con il tuo Animator personalizzato prima di decidere se eseguire il commit della transazione tramite il gesto completato o annullare l'operazione. Puoi anche disattivare questo nuovo comportamento utilizzando l'esperimento sperimentale enablePredictiveBack()e passando false.

Versione 1.6

Versione 1.6.2

1° novembre 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.2. La versione 1.6.2 contiene questi commit.

Correzioni di bug

  • Quando il frammento di un FragmentContainerView è gonfiato, i suoi stati come FragmentManager, Host e ID sono ora accessibili nel callback onInflate. (I1e44c, b/307427423)
  • Quando utilizzi clearBackStack per rimuovere un insieme di frammenti, gli elementi ViewModel di tutti i frammenti nidificati verranno ora cancellati quando i valori ViewModels del frammento principale verranno cancellati. (I6d83c, b/296173018)

Versione 1.6.1

26 luglio 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.1. La versione 1.6.1 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui lo stato salvato, archiviato quando l'attività veniva interrotta ma non eliminata, veniva memorizzato in modo errato nella cache anche dopo aver riportato l'istanza del frammento allo stato RESUMED. Ciò causa il riutilizzo dello stato memorizzato nella cache se l'istanza del frammento si trovava in back stack quando si utilizza l'API multiple back stack per salvare e ripristinare il frammento. (I71288, b/246289075)

Aggiornamento delle dipendenze

  • Il frammento ora dipende dall'Attività 1.7.2. Questo è stato risolto un problema per cui gli utenti Kotlin non potevano estendere ComponentDialog senza una dipendenza esplicita dall'Attività. (b/287509323)

Versione 1.6.0

7 giugno 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0. La versione 1.6.0 contiene questi commit.

Modifiche importanti dalla versione 1.5.0

  • Lo stato salvato di Fragment è stato completamente suddiviso tra lo stato della libreria privata (classi Parcelable personalizzate) e lo stato fornito dallo sviluppatore, che ora è sempre archiviato in un Bundle che consente di determinare esattamente da dove proviene lo stato di un frammento.
  • L'interfaccia FragmentManager.OnBackStackChangedListener è stata espansa con due callback aggiuntivi di onBackStackChangeStarted e onBackStackChangeCommitted che vengono chiamati con ogni Fragment subito prima di essere aggiunti/rimossi dallo stack posteriore dei frammenti e subito dopo il commit della transazione.
  • FragmentStrictMode ha aggiunto un nuovo WrongNestedHierarchyViolation che rileva quando un frammento secondario è nidificato all'interno della gerarchia View dell'elemento principale, ma non viene aggiunto al segmento childFragmentManager dell'elemento principale.
  • Le API Fragment e FragmentManager che utilizzano un valore Intent o IntentSender sono ora correttamente annotate con @NonNull per evitare di passare un valore nullo come valore nullo causerebbe sempre l'arresto anomalo delle rispettive API del framework Android richiamate da questi metodi.
  • DialogFragment ora fornisce l'accesso al ComponentDialog sottostante tramite l'API requireComponentDialog().
  • Il frammento ora dipende dal ciclo di vita 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 manifest dal resto dei componenti di test dei frammenti. Ciò significa che puoi effettuare le seguenti operazioni:

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    In questo modo si evitano conflitti dovuti al disallineamento delle versioni tra fragment-testing e androidx.test.

Versione 1.6.0-rc01

10 maggio 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-rc01. La versione 1.6.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolto il problema che causava l'invio di ActivityResult con il codice di richiesta errato quando sono state effettuate più richieste startActivityForResult consecutivamente. (If0b9d, b/249519359)
  • Risolto un problema per cui i callback onBackStackChangeListener venivano inviati per le transazioni che in realtà non hanno modificato lo stack precedente se erano combinati con le transazioni che lo hanno fatto (I0eb5c, b/279306628)

Versione 1.6.0-beta01

19 aprile 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-beta01. La versione 1.6.0-beta01 contiene questi commit.

Correzioni di bug

  • L'uso 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 e onBackStackChangeCommitted ora invieranno un frammento una sola volta, anche se più transazioni contengono lo stesso frammento. (Ic6b69)

Versione 1.6.0-alpha09

5 aprile 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-alpha09. La versione 1.6.0-alpha09 contiene questi commit.

Modifiche alle API

  • DialogFragment ora fornisce l'accesso al ComponentDialog sottostante tramite l'API requireComponentDialog(). (I022e3, b/234274777)
  • Le API del frammento commitNow(), executePendingTransactions() e popBackStackImmediate() sono state annotate con @MainThread, il che significa che ora tutte genereranno errori di build quando non vengono chiamate 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 e onBackStackChangeCommitted ora vengono eseguiti solo quando lo stack back FragmentManager viene modificato. (I66055, b/274788957)

Versione 1.6.0-alpha08

22 marzo 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-alpha08. La versione 1.6.0-alpha08 contiene questi commit.

Cambiamento del comportamento

  • La tempistica del callback OnBackStackChangedListener.onBackStackChangeCommited è stata modificata in modo che venga eseguita prima delle operazioni con i frammenti. In questo modo, il callback non verrà mai passato un frammento scollegato. (I66a76, b/273568280)

Correzioni di bug

  • Da Frammento 1.5.6: è stato risolto un problema per cui la chiamata a clearFragmentResultListener all'interno di un setFragmentResultListener non funzionava se Lifecycle era già STARTED e un risultato era già disponibile. (If7458)

Aggiornamenti delle dipendenze

Versione 1.6.0-alpha07

8 marzo 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-alpha07. La versione 1.6.0-alpha07 contiene questi commit.

Correzioni di bug

  • Da Frammento 1.5.6: è stato risolto un problema per cui la rimozione di un Frammento, indipendentemente dal fatto che avesse aggiunto voci di menu o meno, rendeva il menu dell'attività non valido. (50f098, b/244336571)

Versione 1.6.0-alpha06

22 febbraio 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-alpha06. La versione 1.6.0-alpha06 contiene questi commit.

Cambiamento del comportamento

  • Il nuovo callback onBackStackChangedStarted su onBackStackChangedListener di FragmentManager verrà eseguito prima che i frammenti inizino a essere spostati negli stati di destinazione. (I34726)

Versione 1.6.0-alpha05

8 febbraio 2023

Viene rilasciato androidx.fragment:fragment-*:1.6.0-alpha05. La versione 1.6.0-alpha05 contiene questi commit.

Nuove funzionalità

  • L'interfaccia FragmentManager.OnBackStackChagnedListener ora offre due callback aggiuntivi, onBackStackChangeStarted e onBackStackChangeCommitted, che consentono di ottenere informazioni aggiuntive e di controllare quando vengono apportate modifiche allo stack precedente in FragmentManager. (Ib7ce5, b/238686802)

Modifiche alle API

  • Le API Fragment e FragmentManager che utilizzano un valore Intent o IntentSender sono ora correttamente annotate con @NonNull per evitare di passare un valore nullo come valore nullo causerebbe sempre l'arresto anomalo delle rispettive API del framework Android richiamate da questi metodi. (I06fd4)

Versione 1.6.0-alpha04

7 dicembre 2022

Viene rilasciato androidx.fragment:fragment-*:1.6.0-alpha04. La versione 1.6.0-alpha04 contiene questi commit.

Nuove funzionalità

  • FragmentStrictMode ha aggiunto un nuovo WrongNestedHierarchyViolation che rileva quando un frammento secondario è nidificato all'interno della gerarchia View dell'elemento principale, ma non viene aggiunto al segmento childFragmentManager dell'elemento principale. (I72521, b/249299268)

Cambiamenti del comportamento

  • Ora i frammenti ripristinano lo stato SavedStateRegistry prima del giorno onAttach(), assicurando che sia disponibile in tutti i metodi del ciclo di vita successivo. (I1e2b1).

Modifiche alle API

  • L'artefatto fragment-testing-manifest separa le voci manifest dal resto dei componenti di test dei frammenti. Ciò significa che puoi effettuare le seguenti operazioni:
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 un disallineamento delle versioni tra fragment-testing e androidx.test.(I8e534, b/128612536)

Correzioni di bug

  • Da Frammento 1.5.5: i frammenti non salveranno più erroneamente lo stato ViewModel come parte dello stato salvato del registro di visualizzazione. (I10d2b, b/253546214)

Versione 1.6.0-alpha03

5 ottobre 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03 e androidx.fragment:fragment-testing:1.6.0-alpha03. La versione 1.6.0-alpha03 contiene questi commit.

Modifiche alle API

  • Ora le classi che estendono DialogFragment dovranno chiamare la funzionalità Super negli override di onDismiss(). (I14798, b/238928865)

Correzioni di bug

  • Sono state corrette le regressioni causate dall'integrazione delle nuove interfacce di callback del provider (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) per garantire che i frammenti ricevano sempre i callback corretti. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)

Versione 1.6.0-alpha02

24 agosto 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02 e androidx.fragment:fragment-testing:1.6.0-alpha02. La versione 1.6.0-alpha02 contiene questi commit.

Correzioni di bug

  • Da Frammento 1.5.2: è stato risolto un problema per cui l'esecuzione simultanea di una transazione popBackStack() e una replace() poteva causare l'esecuzione dei frammenti Animation/Animator errati. (Ib1c07, b/214835303)

Versione 1.6.0-alpha01

27 luglio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01 e androidx.fragment:fragment-testing:1.6.0-alpha01. La versione 1.6.0-alpha01 contiene questi commit.

Cambiamenti del comportamento

  • Lo stato salvato di Fragment è stato completamente suddiviso tra lo stato della libreria privata (classi Parcelable personalizzate) e lo stato fornito dallo sviluppatore, che ora è sempre archiviato in un Bundle che consente di determinare esattamente da dove proviene lo stato di un frammento. (b/207158202)

Correzioni di bug

  • Da Frammento 1.5.1: correggi una regressione in DialogFragmentCallbacksDetector per cui l'utilizzo della versione lint in bundle con AGP 7.4 causava l'arresto anomalo del lint. (b/237567009)

Aggiornamento delle dipendenze

Versione 1.5

Versione 1.5.7

19 aprile 2023

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7 e androidx.fragment:fragment-testing:1.5.7. La versione 1.5.7 contiene questi commit.

Correzioni di bug

  • L'uso 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

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.6, androidx.fragment:fragment-ktx:1.5.6 e androidx.fragment:fragment-testing:1.5.6. La versione 1.5.6 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui la rimozione di un Frammento, indipendentemente dal fatto che avesse aggiunto voci di menu o meno, rendeva il menu dell'attività non valido. (50f098, b/244336571)
  • È stato risolto un problema per cui la chiamata a clearFragmentResultListener all'interno di un setFragmentResultListener non funzionava se Lifecycle era già STARTED e un risultato era già disponibile. (If7458)

Versione 1.5.5

7 dicembre 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5 e androidx.fragment:fragment-testing:1.5.5. La versione 1.5.5 contiene questi commit.

Correzioni di bug

  • I frammenti non salveranno più erroneamente lo stato ViewModel come parte dello stato salvato del registro di visualizzazione. (I10d2b, b/253546214)

Versione 1.5.4

24 ottobre 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4 e androidx.fragment:fragment-testing:1.5.4. La versione 1.5.4 contiene questi commit.

Correzioni di bug

  • È stato corretto un errore per cui l'utilizzo di un valore FragmentController personalizzato con un host che non implementa un'interfaccia di callback del fornitore (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) e la chiamata della sua funzione di invio deprecata non permetteva l'invio ai frammenti figlio. (I9b380).

Versione 1.5.3

21 settembre 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3 e androidx.fragment:fragment-testing:1.5.3. La versione 1.5.3 contiene questi commit.

Correzioni di bug

  • È stato corretto un errore che causava il recupero di callback onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() e onConfigurationChanged() dai frammenti sullo stack posteriore. (I34581, I8dfe6, b/242570955)
  • I frammenti secondari nidificati non riceveranno più callback onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() o onConfigurationChanged(). (I690b3, Id0096, If9d6b, I2cba2)

Versione 1.5.2

10 agosto 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2 e androidx.fragment:fragment-testing:1.5.2. La versione 1.5.2 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui l'esecuzione simultanea di una transazione popBackStack() e una replace() causava l'esecuzione di Animation/Animator nei frammenti uscenti. (Ib1c07, b/214835303)

Versione 1.5.1

27 luglio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1 e androidx.fragment:fragment-testing:1.5.1. La versione 1.5.1 contiene questi commit.

Correzioni di bug

  • Correggi un problema di regressione in DialogFragmentCallbacksDetector per cui l'utilizzo della versione lint in bundle con AGP 7.4 causava l'arresto anomalo del lint. (b/237567009)

Aggiornamento delle dipendenze

Versione 1.5.0

29 giugno 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0 e androidx.fragment:fragment-testing:1.5.0. La versione 1.5.0 contiene questi commit.

Modifiche importanti dalla versione 1.4.0

  • Integrazione CreationExtras: Fragment ora è in grado di fornire un ViewModelProvider.Factory stateless tramite CreationExtras di Lifecycle 2.5.0.
  • Integrazione della finestra di dialogo dei componenti: DialogFragment ora utilizza ComponentDialog tramite Attività 1.5.0 come finestra di dialogo predefinita restituita da onCreateDialog().
  • Refactoring dello stato dell'istanza salvata: i frammenti hanno iniziato a modificare la modalità di salvataggio dello stato dell'istanza. Si tratta di uno sforzo per aiutare a identificare chiaramente quale stato è stato salvato nel frammento e la fonte dello stato. Le modifiche attuali includono:
    • FragmentManager ora salva lo stato dell'istanza salvato in Bundle anziché direttamente in un Parcelable personalizzato.
    • I risultati impostati tramite la Fragment Result APIs che non sono ancora stati pubblicati vengono salvati separatamente dallo stato interno di FragmentManager.
    • Lo stato associato a ogni singolo frammento viene ora salvato separatamente dallo stato interno di FragmentManager, in modo da poter correlare la quantità di stato salvato associato a un singolo frammento con gli ID univoci presenti nel logging di debug di Fragment.

Altre modifiche

  • FragmentStrictMode ora consente ai frammenti privati di terze parti di bypassare specifiche sanzioni per le violazioni utilizzando allowViolation() con il nome della classe.
  • Le API Fragment per fornire un menu all'elemento ActionBar della tua attività sono state deprecate. Le API MenuHost e MenuProvider aggiunte in Attività 1.4.0 forniscono una superficie API equivalente testabile e consapevole del ciclo di vita che i frammenti dovrebbero utilizzare.

Versione 1.5.0-rc01

11 maggio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01 e androidx.fragment:fragment-testing:1.5.0-rc01. 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, in modo da poter 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

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01 e androidx.fragment:fragment-testing:1.5.0-beta01. La versione 1.5.0-beta01 contiene questi commit.

Modifiche alle API

  • DialogFragment ha aggiunto un nuovo metodo dismissNow che utilizza commitNow per avere parità con la funzione showNow. Tieni presente che in questo modo Dialog non verrà ignorato immediatamente, ma verrà aggiornato solo in modo sincrono lo stato di FragmentManager. (I15c36, b/72644830)

Refactoring dello stato dell'istanza salvata

  • FragmentManager ora salva lo stato dell'istanza salvato in Bundle anziché direttamente in un Parcelable personalizzato. Questo è il primo passo per offrire maggiore trasparenza su ciò che viene effettivamente salvato da Fragments. (I93807, b/207158202)
  • I risultati impostati tramite le API Fragment Result che non sono ancora stati pubblicati vengono ora salvati separatamente dallo stato interno di FragmentManager. Ciò consentirà maggiore trasparenza sui risultati che vengono salvati nello stato dell'istanza salvata. (I6ea12, b/207158202)

Versione 1.5.0-alpha05

6 aprile 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05 e androidx.fragment:fragment-testing:1.5.0-alpha05. La versione 1.5.0-alpha05 contiene questi commit.

Modifiche alle API

Versione 1.5.0-alpha04

23 marzo 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04 e androidx.fragment:fragment-testing:1.5.0-alpha04. La versione 1.5.0-alpha04 contiene questi commit.

Modifiche alle API

  • Le API Fragment per fornire un menu all'elemento ActionBar dell'attività sono state deprecate perché associano strettamente il frammento all'attività e non possono essere testate separatamente. Le API MenuHost e MenuProvider aggiunte in Attività 1.4.0-alpha01 forniscono una superficie API equivalente testabile e consapevole del ciclo di vita che i frammenti dovrebbero utilizzare. (I50a59, I20758)

Correzioni di bug

  • SavedStateViewFactory ora supporta l'utilizzo di CreationExtras anche se è stato inizializzato con SavedStateRegistryOwner. Se vengono forniti extra, gli argomenti inizializzati vengono ignorati. (I6c43b, b/224844583)

Versione 1.5.0-alpha03

23 febbraio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03 e androidx.fragment:fragment-testing:1.5.0-alpha03. La versione 1.5.0-alpha03 contiene questi commit.

Modifiche alle API

  • Ora puoi passare CreationExtras alle funzioni by viewModels() e by activityViewModels(). (Ibefe7, b/217601110)

Cambiamenti del comportamento

Versione 1.5.0-alpha02

9 febbraio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02 e androidx.fragment:fragment-testing:1.5.0-alpha02. La versione 1.5.0-alpha02 contiene questi commit.

Nuove funzionalità

  • FragmentStrictMode ora consente ai frammenti privati di terze parti di bypassare specifiche sanzioni per le violazioni utilizzando allowViolation() con il nome della classe. (I8f678)

Versione 1.5.0-alpha01

26 gennaio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01 e androidx.fragment:fragment-testing:1.5.0-alpha01. La versione 1.5.0-alpha01 contiene questi commit.

Nuove funzionalità

Correzioni di bug

  • Da Frammento 1.4.1: FragmentContainerView non genera più un'eccezione di stato non valido quando gli ID vista generati dal file XML hanno valori negativi. (Ic185b, b/213086140)
  • Da Frammento 1.4.1: quando utilizzi una lambda ownerProducer personalizzata con la funzione lazy by viewModels(), ora utilizzerà il defaultViewModelProviderFactory di quel proprietario se non viene fornito un ViewModelProvider.Factory personalizzato, invece di usare sempre il valore di fabbrica del frammento. (I56170, b/214106513)
  • È stato corretto un arresto anomalo durante l'accesso a una ViewModel per la prima volta da un callback registerForActivityResult() di un Fragment. (Iea2b3).

Versione 1.4

Versione 1.4.1

26 gennaio 2022

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1 e androidx.fragment:fragment-testing:1.4.1. 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 utilizzi un oggetto lambda ownerProducer personalizzato con la funzione lazy by viewModels(), ora utilizzerà il defaultViewModelProviderFactory di quel proprietario se non viene fornito un ViewModelProvider.Factory personalizzato invece di usare sempre la fabbrica del frammento. (I56170, b/214106513)

Versione 1.4.0

17 novembre 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0 e androidx.fragment:fragment-testing:1.4.0. La versione 1.4.0 contiene questi commit.

Modifiche importanti dalla versione 1.3.0

  • Le API FragmentStrictMode forniscono controlli di runtime che ti consentono di verificare che l'app o le librerie da cui dipendono non chiamino API con frammenti deprecati. 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 attivati e quali "sanzioni" vengono attivate può essere impostato su un FragmentManager tramite il nuovo metodo setStrictModePolicy(). Questo criterio si applica a questo FragmentManager e in modo transitivo a tutti i gestori di frammenti figlio che non impostano un proprio criterio univoco. Vedi StrictMode per i frammenti.
  • FragmentContainerView ora fornisce un metodo getFragment() che restituisce il frammento aggiunto più di recente al container. Questa operazione utilizza la stessa logica di findFragmentById() con l'ID FragmentContainerView, ma consente di concatenare la chiamata.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario ora implementa Closeable, consentendoti di utilizzarlo con il metodo use di Kotlin o try-with-resources.

  • Aggiunta FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} per specificare se attivare l'animazione standard della transizione delle attività recuperata dal tema nella transizione Frammenti.

  • L'API sperimentale FragmentManager.enableNewStateManager(boolean) è stata rimossa e ora il nuovo stato Gestore è l'unica opzione disponibile.

Più stack posteriori

FragmentManager gestisce un back stack composto da transazioni di frammenti che utilizzavano addToBackStack(). In questo modo puoi aprire le transazioni e tornare allo stato precedente, utilizzando i meccanismi per il salvataggio dello stato con frammenti per consentire ai frammenti di ripristinare lo 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 lo stato di ogni frammento aggiunto alle transazioni, consentendoti di ripristinare in un secondo momento le transazioni e i relativi frammenti con il relativo stato intatto. Questo ti permette di "scambiare" efficacemente tra più back stack salvando quello attuale e ripristinando uno stack salvato.

saveBackStack() funziona in modo simile a popBackStack() in quanto è asincrono e restituisce tutte le transazioni dei frammenti con quel nome specifico da invertire ("sbloccato") e distruggere e rimuovere tutti i frammenti aggiunti, ma presenta alcune differenze importanti:

  • saveBackStack() è sempre inclusivo.
  • A differenza di popBackStack(), che inserisce tutte le transazioni nello stack posteriore se il nome specificato non è presente nello stack posteriore o se viene fornito un nome nullo, saveBackStack() non fa nulla se non hai precedentemente eseguito il commit di una transazione di frammento utilizzando addToBackStack() con quel nome esatto e diverso da null.
  • Lo stato di tutti i frammenti aggiunti da queste transazioni viene salvato. Ciò significa che viene archiviato lo stato di visualizzazione di ogni frammento, viene richiamato onSaveInstanceState() di ogni frammento e lo stato viene ripristinato e tutte le istanze ViewModel associate ai frammenti vengono conservate (e non viene chiamato per i frammenti onCleared()).

Le transazioni di frammenti che possono essere utilizzate con saveBackStack() devono soddisfare determinati criteri:

  • Ogni transazione frammento deve utilizzare setReorderingAllowed(true) per garantire che le transazioni possano essere ripristinate come singola operazione atomica.
  • L'insieme di transazioni salvato deve essere indipendente (ovvero, non deve fare riferimento esplicitamente a frammenti al di fuori dell'insieme di transazioni) per garantire che possa essere ripristinato in qualsiasi momento, indipendentemente dalle modifiche apportate al back stack nel tempo intermedio.
  • 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 alcun riferimento ai frammenti salvati dopo il salvataggio dello stack posteriore.

Similmente a saveBackStack(), restoreBackStack() e clearBackStack(), che consentono di ripristinare uno stack esistente salvato in precedenza o di cancellare uno stack salvato in precedenza, entrambe le operazioni non fanno nulla se in precedenza non hai chiamato saveBackStack() con lo stesso nome.

Per maggiori informazioni, vedi Back stack multipli: approfondimento.

Versione 1.4.0-rc01

3 novembre 2021

androidx.fragment:fragment:1.4.0-rc01 rilasciato senza modifiche dal frammento 1.4.0-beta01. La versione 1.4.0-rc01 contiene questi commit.

Versione 1.4.0-beta01

27 ottobre 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 e androidx.fragment:fragment-testing:1.4.0-beta01. La versione 1.4.0-beta01 contiene questi commit.

Correzioni di bug

  • I frammenti padre ora invieranno onHiddenChanged() nell'intera gerarchia prima di avviare il proprio callback. (Iedc20, b/77504618)
  • Ora la tastiera si chiuderà automaticamente passando da un frammento con una tastiera aperta a un frammento con vista riciclatore. (I8b842, b/196852211)
  • DialogFragment ora utilizza setReorderingAllowed(true) per tutte le transazioni create quando chiami show(), showNow() o dismiss(). (Ie2c14).
  • L'avviso Lint estremamente lungo di DetachAndAttachFragmentInSameFragmentTransaction è stato ridotto a DetachAndAttachSameFragment. (e9eca3).

Versione 1.4.0-alpha10

29 settembre 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 e androidx.fragment:fragment-testing:1.4.0-alpha10. La versione 1.4.0-alpha10 contiene questi commit.

pelucchi

  • È stato aggiunto l'avviso lint DetachAndAttachFragmentInSameFragmentTransaction per il rilevamento delle chiamate sia di detach() che di attach() sullo stesso Fragment nello stesso elemento FragmentTransaction: poiché queste operazioni complementari si annullano a vicenda quando vengono eseguite nella stessa transazione, devono essere suddivise in transazioni separate affinché sia possibile eseguire determinate operazioni. (aosp/1832956, b/200867930)
  • È stato aggiunto l'errore lint FragmentAddMenuProvider per la correzione degli utilizzi del ciclo di vita del frammento al ciclo di vita della visualizzazione Frammento quando utilizzi l'API addMenuProvider di MenuHost. (aosp/1830457, b/200326272)

Aggiornamenti alla documentazione

  • Il messaggio di ritiro per le API ora gestito dalle API Activity Result, ovvero startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions e onRequestPermissionsResult, è stato ampliato con ulteriori dettagli. (cce80f)
  • Il messaggio relativo al ritiro di onActivityCreated() sia per Fragment sia per DialogFragment è stato ampliato con ulteriori dettagli. (224db4)

Versione 1.4.0-alpha09

15 settembre 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09 e androidx.fragment:fragment-testing:1.4.0-alpha09. La versione 1.4.0-alpha09 contiene questi commit.

Nuove funzionalità

  • Ora puoi chiamare il numero clearBackStack(name) per cancellare qualsiasi stato salvato in precedenza con saveBackStack(name). (I70cd7)

Modifiche alle API

  • La classe FragmentContainerView è stata riscritta in Kotlin per garantire che la funzione getFragment rispetti correttamente i valori nulli. (If694a, b/189629145)
  • FragmentStrictMode è ora scritto in Kotlin (I11767, b/199183506)

Correzioni di bug

  • Risolto un problema per cui lo stato di un frammento aggiunto con setReorderingAllowed(true) e poi subito rimosso prima dell'esecuzione delle transazioni in sospeso non veniva ripulito correttamente. (I8ccb8)

Versione 1.4.0-alpha08

1° settembre 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08 e androidx.fragment:fragment-testing:1.4.0-alpha08. La versione 1.4.0-alpha08 contiene questi commit.

Correzioni di bug

  • È stato migliorato il controllo Lint UseRequireInsteadOfGet per gestire meglio le parentesi ridondanti. (I2d865)
  • È stato migliorato il controllo lint di UseGetLayoutInflater per gestire ulteriori casi periferici. (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 rilasciate senza modifiche di rilievo. La versione 1.4.0-alpha07 contiene questi commit.

Versione 1.4.0-alpha06

4 agosto 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06 e androidx.fragment:fragment-testing:1.4.0-alpha06. La versione 1.4.0-alpha06 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo a più stack posteriori durante lo scambio rapido tra stack posteriori che venivano visualizzati come IllegalStateException durante il ripristino di un FragmentTransaction o come seconda copia di un frammento visualizzato. (I9039f)
  • Risolto un problema per cui FragmentManager conserva una copia di uno stato precedentemente salvato tramite saveBackStack() anche dopo il ripristino dello stato. (Ied212)
  • Il metodo dismissAllowingStateLoss() di DialogFragment non si arresta più in modo anomalo quando lo chiami dopo che lo stato è stato salvato durante l'aggiunta specifica di DialogFragment tramite il metodo show(FragmentTransaction, String). (I84422)

Versione 1.4.0-alpha05

21 luglio 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05 e androidx.fragment:fragment-testing:1.4.0-alpha05. La versione 1.4.0-alpha05 contiene questi commit.

Correzioni di bug

  • Da Frammento 1.3.6: la visualizzazione del frammento è ora correttamente impostata su GONE quando si utilizza hide() quando la vista principale ha transitionGroup=”true” impostato. (aosp/1766655, b/193603427)
  • Da Frammento 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

Versione 1.4.0-alpha04

30 giugno 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04 e androidx.fragment:fragment-testing:1.4.0-alpha04. La versione 1.4.0-alpha04 contiene questi commit.

Modifiche alle API

  • FragmentManager ora utilizza SavedStateRegistry per salvare il proprio stato. Anche i metodi saveAllState() e restoreSavedState() sono stati ritirati in FragmentController. Se utilizzi FragmentController per ospitare frammenti all'esterno di FragmentActivity, devi implementare FragmentHostCallbacks SavedStateRegistryOwner. (Iba68e, b/188734238)

Correzioni di bug

  • Risolto un problema per cui la chiamata a saveBackStack() nell'ambito del supporto di più stack posteriori non riusciva se eseguita contemporaneamente all'esecuzione di un FragmentTransaction che utilizzava replace(). (I73137)
  • È stato corretto un NullPointerException che si verificava dopo il ripristino manuale di uno stack arretrato salvato che conteneva più transazioni quando si utilizzava l'API restoreBackStack() per il supporto di più stack arretrati. Inoltre, è stato risolto un problema per cui setReorderingAllowed(true) non veniva controllato per tutte le transazioni. (I8c593)
  • Risolto un problema per cui FragmentManager continuava erroneamente a ripristinare lo stato salvato in precedenza dei frammenti anche dopo averli rimossi da FragmentManager, con conseguente aumento continuo dello stato salvato nel tempo. (I1fb8e)

Versione 1.4.0-alpha03

16 giugno 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 e androidx.fragment:fragment-testing:1.4.0-alpha03. La versione 1.4.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Tutte le classi Fragment StrictMode Violation sono state aggiornate con messaggi di errore più dettagliati che spiegano i dettagli della violazione. (b/187871638)
    • FragmentTagUsageViolation ora contiene un messaggio di errore più dettagliato relativo al container del contenitore principale a cui sarebbe stato aggiunto il frammento. (Ic33a7).
    • WrongFragmentContainerViolation ora include un messaggio di errore più dettagliato che include il container a cui è stato aggiunto il frammento. (Ib55f8)
    • Le classi dei casi d'uso per TargetFragmentUsageViolation ora hanno messaggi di errore più dettagliati che includono il frammento che causa la violazione ed eventuali altre informazioni contenute. (Icc6ac)
    • Le classi che estendono RetainInstanceUsageViolation ora hanno messaggi di errore più dettagliati che includono il frammento che causa la violazione. (I6bd55).
    • FragmentReuseViolation ora include un messaggio di errore più dettagliato che include l'ID precedente del frammento. (I28ce2)
    • Ora SetUserVisibleHintViolation contiene un messaggio di errore più dettagliato che include il tipo di impostazione del suggerimento visibile all'utente. (Ib2d5f)

Cambiamenti del comportamento

  • È stata ripristinata la limitazione relativa alla chiamata di fitsSystemWindows su un FragmentContainerView. Questa operazione non causa più l'arresto anomalo dell'app. (6b8ddd, b/190622202)

Correzioni di bug

  • Da Frammento 1.3.5: è stata corretta una regressione nelle transizioni di elementi condivisi introdotta in Frammento 1.3.4 da aosp/1679887. Ora i frammenti gestiscono correttamente i gruppi di transizione (impostati direttamente tramite transitionGroup="true" o indirettamente tramite transitionName o background) e gli elementi condivisi non genereranno più IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)
  • FragmentManager non si arresta più in modo anomalo quando tenti di nascondere un frammento rimosso. (I573dd, b/183634730)
  • Il controllo del lint OnCreateDialogIncorrectCallback non si arresta in modo anomalo durante la valutazione di una variabile di primo livello. (0a9efa, b/189967522)

Versione 1.4.0-alpha02

2 giugno 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02 e androidx.fragment:fragment-testing:1.4.0-alpha02. La versione 1.4.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Ora FragmentStrictMode registrerà sempre le violazioni quando il logging è attivato tramite FragmentManager, indipendentemente dall'attuale criterio in modalità con restrizioni in uso. (I02df6, b/187872638)
  • FragmentStrictMode ora supporta l'esenzione di determinate classi Fragment dalla modalità con restrizioni Violation, che consentono a quella classe di aggirare eventuali penali. (Ib4e5d, b/184786736)

  • La classe FragmentStrictMode Violation è stata ampliata per aggiungere informazioni sulla struttura in base a ogni violazione. In questo modo puoi verificare esattamente cosa ha causato la violazione, insieme al frammento in violazione (If5118, b/187871150), ogni Violation contiene quanto segue:

    • WrongFragmentContainerViolation ora contiene il ViewGroup a cui stava tentando di aggiungere Fragment. (I83c75, b/187871150)
    • TargetFragmentUsageViolationè stato espanso in SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation e GetTargetFragmentRequestCodeUsageViolation, dove SetTargetFragmentUsageViolation contiene il frammento di destinazione e il codice di richiesta. (I741b4, b/187871150)
    • SetUserVisibleHintViolation ora contiene il valore booleano passato a setUserVisibleHint(). (I00585, b/187871150)
    • FragmentTagUsageViolation ora contiene il ViewGroup in cui il tag <fragment> stava tentando di gonfiare un frammento.(I5dbbc, b/187871150)
    • FragmentReuseViolation ora contiene l'ID univoco dell'istanza precedente di Fragment che ha causato la violazione. (I0544d, b/187871150)
    • RetainInstanceUsageViolation è ora astratto e ha due sottoclassi, SetRetainInstanceUsageViolation e GetRetainInstanceUsageViolation, che rappresentano i due casi per il tipo di violazione. (Ic81e5, b/187871150)

Cambiamenti del comportamento

  • FragmentContainerView ora genera un'eccezione quando tenta di modificare l'attributo fitsSystemWindow in modo programmatico o tramite XML. Gli inserti devono essere gestiti dalla vista di ogni singolo frammento. (Ie6651, b/187304502)

Versione 1.4.0-alpha01

18 maggio 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01 e androidx.fragment:fragment-testing:1.4.0-alpha01. La versione 1.4.0-alpha01 contiene questi commit.

Nuove funzionalità

  • FragmentContainerView ora fornisce un metodo getFragment() che restituisce il frammento aggiunto più di recente al container. Questa operazione utilizza la stessa logica di findFragmentById() con l'ID FragmentContainerView, 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 standard della transizione delle attività recuperata dal tema nella transizione Frammenti. (I46652)

Più stack posteriori

FragmentManager gestisce un back stack composto da transazioni di frammenti che utilizzavano addToBackStack(). In questo modo puoi aprire le transazioni e tornare allo stato precedente, utilizzando i meccanismi per il salvataggio dello stato con frammenti per consentire ai frammenti di ripristinare lo 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 lo stato di ogni frammento aggiunto alle transazioni, consentendoti di ripristinare in un secondo momento le transazioni e i relativi frammenti con il relativo stato intatto. Questo ti permette di "scambiare" efficacemente tra più back stack salvando quello attuale e ripristinando uno stack salvato.

saveBackStack() funziona in modo simile a popBackStack() in quanto è asincrono e restituisce tutte le transazioni dei frammenti con quel nome specifico da invertire ("sbloccato") e distruggere e rimuovere tutti i frammenti aggiunti, ma presenta alcune differenze importanti:

  • saveBackStack() è sempre inclusivo.
  • A differenza di popBackStack(), che inserisce tutte le transazioni nello stack posteriore se il nome specificato non è presente nello stack posteriore o se viene fornito un nome nullo, saveBackStack() non fa nulla se non hai precedentemente eseguito il commit di una transazione di frammento utilizzando addToBackStack() con quel nome esatto e diverso da null.
  • Lo stato di tutti i frammenti aggiunti da queste transazioni viene salvato. Ciò significa che viene archiviato lo stato di visualizzazione di ogni frammento, viene richiamato onSaveInstanceState() di ogni frammento e lo stato viene ripristinato e tutte le istanze ViewModel associate ai frammenti vengono conservate (e non viene chiamato per i frammenti onCleared()).

Le transazioni di frammenti che possono essere utilizzate con saveBackStack() devono soddisfare determinati criteri:

  • Ogni transazione frammento deve utilizzare setReorderingAllowed(true) per garantire che le transazioni possano essere ripristinate come singola operazione atomica.
  • L'insieme di transazioni salvato deve essere indipendente (ovvero, non deve fare riferimento esplicitamente a frammenti al di fuori dell'insieme di transazioni) per garantire che possa essere ripristinato in qualsiasi momento, indipendentemente dalle modifiche apportate al back stack nel tempo intermedio.
  • 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 alcun riferimento ai frammenti salvati dopo il salvataggio dello stack posteriore.

Analogamente a saveBackStack(), restoreBackStack() non produce alcun effetto se in precedenza non hai chiamato saveBackStack() con lo stesso nome. (b/80029773)

Fragment StrictMode

Le API FragmentStrictMode forniscono controlli di runtime che ti consentono di verificare che l'app o le librerie da cui dipendono non chiamino API con frammenti deprecati. 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 attivati e quali "sanzioni" vengono attivate può essere impostato su un FragmentManager tramite il nuovo metodo setStrictModePolicy(). Questo criterio si applica a questo FragmentManager e in modo transitivo a tutti i gestori di frammenti figlio che non impostano un proprio criterio univoco. (#123, #131, #150, b/143774122)

  • detectFragmentReuse() rileva se un'istanza Fragment rimossa in precedenza viene aggiunta di nuovo a FragmentManager. Non devi mai interagire con o mantenere un riferimento a un'istanza Fragment dopo che è stata eliminata e rimossa da un FragmentManager. (#142, b/153738653)
  • detectFragmentTagUsage() rileva quando utilizzi il tag <fragment> nel file XML di layout. Dovresti usare sempre FragmentContainerView quando gonfia i frammenti all'interno del layout. (#141, b/153738235)
  • detectWrongFragmentContainer() rileva quando aggiungi un frammento a un container che non è di tipo FragmentContainerView. Devi sempre utilizzare FragmentContainerView come contenitore per i frammenti nel layout. (N. 146, b/181137036)
  • detectRetainInstanceUsage() rileva quando utilizzi le API setRetainInstance() o getRetainInstance() deprecate. (#140, b/153737954)
  • detectSetUserVisibleHint() rileva quando utilizzi l'API setUserVisibleHint() deprecata. (#136, b/153738974)
  • detectTargetFragmentUsage() rileva quando utilizzi le API setTargetFragment(), getTargetFragment() o getTargetRequestCode() deprecate. (N. 139, b/153737745)

Modifiche alle API

Nuovi controlli Lint

  • Il controllo lint UseGetLayoutInflater ora avvisa quando utilizzi LayoutInflater.from(Context) all'interno di un elemento DialogFragment. Devi sempre utilizzare il metodo getLayoutInflater() del frammento di dialogo per ottenere il metodo appropriato per LayoutInflater. (#156, b/170781346)
  • Il controllo lint DialogFragmentCallbacksDetector ora avvisa quando si chiama setOnCancelListener o setOnDismissListener nel metodo onCreateDialog() di un DialogFragment. Questi listener sono di proprietà di DialogFragment e devi eseguire l'override di onCancel() e onDismiss() per ricevere questi callback. (#171, b/181780047, b/187524311)

Correzioni di bug

  • Da Fragment 1.3.4: è stata corretta una regressione introdotta in Fragment 1.3.3 quando si utilizzava l'API ViewTreeViewModelStoreOwner.get() con ViewModelProvider o il metodo Jetpack Compose di viewModel() all'interno di un frammento. Ora questi casi d'uso utilizzano correttamente il valore ViewModelProvider.Factory fornito dal frammento se esegue l'override di getDefaultViewModelProviderFactory() (come accade per i frammenti annotati di @AndroidEntryPoint quando si utilizza Hilt). Se non esegui l'override di questo metodo, come fabbrica predefinita viene creato un SavedStateViewModelFactory che salva e ripristina il suo stato insieme alla visualizzazione del frammento. (I5cbfa, b/186097368)
  • Dal Frammento 1.3.4: quando utilizzi FragmentContainerView nell'API 29, i riquadri non verranno più inviati a tempo indeterminato, risolvendo i problemi relativi alle istanze BottomNavigationBar e FloatingActionButton. (I1bb78, b/186012452)
  • Da Frammento 1.3.4: ora puoi recuperare il Parcelable dal bundle di risultati del frammento dopo la morte del processo. (I65932, b/187443158)
  • Dal Frammento 1.3.4: quando si esegue la transizione di un elemento condiviso su un ViewGroup, se transitionGroup è impostato su false per ViewGroup, verrà eseguita correttamente la transizione. (I99675)

Contributo esterno

Versione 1.3

Versione 1.3.6

21 luglio 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6 e androidx.fragment:fragment-testing:1.3.6. La versione 1.3.6 contiene questi commit.

Correzioni di bug

  • Da Frammento 1.4.0-alpha03: FragmentManager non si arresta più in modo anomalo quando tenti di nascondere un frammento rimosso. (I573dd, b/183634730)
  • La vista del frammento è ora impostata correttamente su GONE quando si utilizza hide() quando per la vista principale è impostato transitionGroup=”true”. (aosp/1766655, b/193603427)
  • Ora FragmentActivity sblocca sempre lo stato salvato come prima operazione nei callback del ciclo di vita che esegue l'override. (I6db7a)

Aggiornamento delle dipendenze

Versione 1.3.5

16 giugno 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5 e androidx.fragment:fragment-testing:1.3.5. La versione 1.3.5 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema di regressione nelle transizioni di elementi condivisi introdotto in Fragment 1.3.4 da aosp/1679887. Ora i frammenti gestiscono correttamente i gruppi di transizione (impostati direttamente tramite transitionGroup="true" o indirettamente tramite transitionName o background) e gli elementi condivisi non genereranno più IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)

Versione 1.3.4

18 maggio 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4 e androidx.fragment:fragment-testing:1.3.4. La versione 1.3.4 contiene questi commit.

Correzioni di bug

  • È stata corretta una regressione introdotta in Fragment 1.3.3 durante l'utilizzo dell'API ViewTreeViewModelStoreOwner.get() con ViewModelProvider o del metodo Jetpack Compose di viewModel() all'interno di un frammento quando si utilizzava Hilt. Ora questi casi d'uso utilizzano correttamente il valore ViewModelProvider.Factory fornito dal frammento se esegue l'override di getDefaultViewModelProviderFactory() (come accade con i frammenti annotati di @AndroidEntryPoint). Se non esegui l'override di questo metodo, come fabbrica predefinita viene creato un SavedStateViewModelFactory che salva e ripristina il suo stato insieme alla visualizzazione del frammento. (I5cbfa, b/186097368)
  • Quando utilizzi FragmentContainerView nell'API 29, i riquadri non verranno più inviati a tempo indeterminato, risolvendo i problemi relativi alle istanze BottomNavigationBar e FloatingActionButton. (I1bb78, b/186012452)
  • Ora puoi recuperare la proprietà Parcelable dal bundle di risultati del frammento dopo la morte del processo. (I65932, b/187443158)
  • Quando esegui la transizione di un elemento condiviso su un ViewGroup, se il valore transitionGroup è impostato su false per il ViewGroup, ora verrà eseguita correttamente la transizione. (I99675)

Versione 1.3.3

21 aprile 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3 e androidx.fragment:fragment-testing:1.3.3. La versione 1.3.3 contiene questi commit.

Nuove funzionalità

  • L'utilizzo di SavedStateViewModelFactory ora funziona se utilizzato con il valore SavedStateRegistryOwner restituito utilizzando ViewTreeSavedStateRegistryOwner.get() con la vista del frammento. (I21acf, b/181577191)

Correzioni di bug

  • È stata corretta una regressione introdotta in Frammento 1.3.2 che causava la mancata esecuzione di animazioni popEnter durante la creazione di un elemento FragmentTransaction che includeva un'operazione setPrimaryNavFragment, come quelle utilizzate da NavHostFragment. (I38c87, b/183877426)
  • FragmentContainerView ora assicura che a ogni Fragment venga inviato un nuovo set di WindowInsets, garantendo che ogni frammento possa ora utilizzare i riquadri in modo indipendente. (I63f68, b/172153900)
  • DialogFragment ora gestisce correttamente i casi in cui un frammento secondario viene aggiunto a un contenitore che ha lo stesso ID di un container nella tua classe Dialog personalizzata, risolvendo i problemi relativi alla gerarchia delle visualizzazioni quando riutilizzi ID utilizzati internamente da finestre di dialogo come BottomSheetDialog. (Ie6279, b/180021387)
  • Ora FragmentManager.dump() applica correttamente il rientro al primo frammento dell'elenco dei frammenti attivi. (If5c33, b/183705451)

Correzioni di nuovi bug relativi a State Manager

  • Il nuovo gestore dello stato dei frammenti ora gestisce correttamente le transizioni di uscita con occultamento. (I9e4de, b/184830265)

Versione 1.3.2

24 marzo 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2 e androidx.fragment:fragment-testing:1.3.2. La versione 1.3.2 contiene questi commit.

Correzioni di nuovi bug relativi a State Manager

  • Quando si eseguono le operazioni popBackStack() e commit() insieme, l'ultima operazione imposterà ora la direzione per tutte le animazioni anziché eseguire alcune animazioni pop e alcune inseriscono animazioni. (I7072e, b/181142246)
  • Il nome della transizione per le viste all'interno di una gerarchia di elementi condivisi non verrà più cancellato durante l'esecuzione della transizione di un elemento condiviso. (I4d4a6, b/179934757)

Aggiornamenti delle dipendenze

  • Il frammento ora dipende dall'Attività 1.2.2, risolvendo un problema con il controllo del lint InvalidFragmentVersionForActivityResult dell'attività quando si utilizza il frammento 1.3.1 o versioni successive.
  • Il frammento ora dipende dal ciclo di vita 2.3.1.

Versione 1.3.1

10 marzo 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1 e androidx.fragment:fragment-testing:1.3.1. La versione 1.3.1 contiene questi commit.

Nuove funzionalità

  • Le finestre di dialogo all'interno di un DialogFragment ora possono accedere ai proprietari ViewTree tramite DecorView, garantendo che DialogFragment possa essere utilizzato con ComposeView. (Ib9290, b/180691023)

Correzioni di bug

  • I frammenti gonfiati in un'attività RESUMED già utilizzando FragmentContainerView ora vengono visualizzati correttamente dopo una modifica alla configurazione. (Ie14c8, b/180538371)
  • Non è più presente un } aggiuntivo alla fine del frammento toString() (I54705, b/177761088)
  • I metodi sostituiti in FragmentActivity ora ereditano correttamente il metodo di base javaDoc (I736ce, b/139548782)
  • I documenti per setFragmentResult e setFragmentResultListener hanno aggiornato la documentazione relativa ai parametri per indicare che non accettano più i valori nulli (I990ba, b/178348386)

Correzioni di nuovi bug relativi a State Manager

  • Correzione di una perdita di memoria nei frammenti causata da mFocusedView (Ib4e9e, b/179925887)
  • I frammenti ora chiamano correttamente onCreateOptionsMenu quando si utilizzano mostra/nascondi transazioni (I8bce8, b/180255554)
  • I frammenti figlio con transizioni che iniziano prima della disposizione del frammento raggiungeranno correttamente RESUMED (Ic11e6, b/180825150)
  • Ora i frammenti gonfiati utilizzando il tag <fragment> arriveranno sempre a RESUMED (I452ac, (I9fa49)

Aggiornamenti delle dipendenze

Versione 1.3.0

10 febbraio 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0 e androidx.fragment:fragment-testing:1.3.0. La versione 1.3.0 contiene questi commit.

Modifiche principali dalla versione 1.2.0

  • Nuovo State Manager: una significativa riscrittura degli elementi interni di FragmentManager ha risolto numerosi problemi relativi all'invio di eventi del ciclo di vita, animazioni e transizioni, nonché alla gestione dei frammenti posticipati.
  • Integrazione dell'API Activity Result: è stato aggiunto il supporto per l'API ActivityResultRegistry introdotta nell'Attività 1.2.0 per gestire i flussi startActivityForResult()+onActivityResult() e requestPermissions()+onRequestPermissionsResult() senza eseguire l'override dei metodi nel Fragment, oltre a fornire hook per testare questi flussi. Consulta la sezione Come ottenere un risultato da un'attività aggiornata.

    • In questa release sono stati corretti diversi problemi relativi ai codici di richiesta non validi e all'invio di richieste di autorizzazione che impediscono all'API Activity Result di funzionare sulle versioni precedenti di FragmentActivity. Devi eseguire l'upgrade a Fragment 1.3.0 per utilizzare le API Activity Result in un FragmentActivity o AppCompatActivity.
  • API Fragment Result: è stato aggiunto il supporto per il passaggio dei risultati tra due Fragment tramite nuove API su FragmentManager. Funziona per i frammenti gerarchici (principale/secondario), DialogFragments e frammenti in Navigation e garantisce che i risultati vengano inviati al tuo Fragment solo quando è almeno STARTED. Le API con frammento target sono state ritirate e sostituite da queste nuove API. Vedi Ottenere risultati utilizzando l'API Fragment Result.

  • FragmentOnAttachListener: il callback onAttachFragment() su FragmentActivity e Fragment è stato ritirato. È stato aggiunto un nuovo FragmentOnAttachListener per offrire un'alternativa più flessibile, consentendo la delega di onAttachFragment() a listener separati e testabili, nonché supporto per l'aggiunta di un listener a FragmentManagers diversi dal tuo figlio diretto FragmentManager.

  • FragmentScenario Miglioramenti: la classe FragmentScenario dell'elemento fragment-testing è stata riscritta in Kotlin e ha ricevuto una serie di miglioramenti:

    • FragmentScenario ora utilizza setMaxLifecycle() per implementare moveToState(), garantendo un comportamento coerente a tutti i livelli API e disaccoppiando lo stato del frammento dall'attività sottostante.
    • FragmentScenario ora supporta l'impostazione di un Lifecycle.State iniziale per consentire l'asserzione dello stato del frammento prima di passare a ogni Lifecycle.State per la prima volta.
    • Ora è disponibile un'alternativa all'API FragmentScenario di onFragment sotto forma di metodo di estensione reified Kotlin withFragment che ti consente di restituire un valore. In particolare, restituisce le eccezioni sollevate nel blocco specificato.
  • Assistenza ViewTree: Fragment ora supporta le API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View) e ViewTreeSavedStateRegistryOwner aggiunte in Ciclo di vita 2.3.0 e SavedState 1.1.0 in modo da restituire il frammento come ViewModelStoreOwner e SavedStateRegistryOwner e LifecycleOwner associati al ciclo di vita della vista del frammento quando viene utilizzato View all'interno di una Fragment.

  • Modifiche dell'animazione TRANSIT_: gli effetti predefiniti dei frammenti, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE e TRANSIT_FRAGMENT_FADE, ora utilizzano Animator anziché Animation. Le risorse utilizzate per creare questi animatori ora sono private.

  • Ritiro di setRetainInstance(): il metodo setRetainInstance() su Fragments è stato ritirato. Con l'introduzione dei ViewModels, gli sviluppatori hanno a disposizione un'API specifica per la conservazione dello stato che può essere associata ad attività, frammenti e grafici di navigazione. In questo modo gli sviluppatori possono usare un frammento normale non conservato 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 del ViewModel e il callback onCleared() che riceve).

  • Ritiro dell'adattatore ViewPager 1: con il rilascio di ViewPager2 1.0.0, le classi FragmentPagerAdapter e FragmentStatePagerAdapter per l'interazione con ViewPager sono state ritirate. Vedi Eseguire la migrazione da ViewPager a ViewPager2.

Versione 1.3.0-rc02

27 gennaio 2021

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02 e androidx.fragment:fragment-testing:1.3.0-rc02. La versione 1.3.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui un DialogFragment principale veniva visualizzato sopra un DialogFragment secondario dopo una modifica alla configurazione; ora i frammenti di finestra di dialogo secondaria vengono visualizzati sempre sopra il frammento di una finestra di dialogo principale. (I30806, b/177439520)
  • È stato risolto il problema per cui l'esecuzione di un'operazione hide con un Animation causava il flashing del frammento nascosto alla fine dell'animazione. (I57e22, b/175417675)
  • I frammenti con transizioni aggiunte prima della gerarchia delle visualizzazioni ora raggiungono correttamente RESUMED. (I1fc1d, b/177154873)

Correzioni di nuovi bug relativi a State Manager

  • La visualizzazione Lifecycle del Frammento ora gestisce correttamente i casi in cui la visualizzazione del Frammento viene eliminata prima che Lifecycle raggiunga il valore CREATED, evitando eccezioni che indicano "nessun evento proveniente da INIZIALIZZATO". (eda2bd, b/176138645).
  • I frammenti che utilizzano un elemento Animator ora vengono visualizzati nell'ordine corretto quando viene utilizzato FragmentContainerView. (Id9aa3, b/176089197)

Versione 1.3.0-rc01

16 dicembre 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01 e androidx.fragment:fragment-testing:1.3.0-rc01. La versione 1.3.0-rc01 contiene questi commit.

Correzioni di bug

  • onPrepareOptionsMenu() ora segue la stessa logica di onCreateOptionsMenu() e non viene più chiamato quando un frammento padre chiama setMenuVisibility(false). (Id7de8, b/173203654)

Correzioni di nuovi bug relativi a State Manager

  • È stata corretta la perdita e l'artefatto visivo durante l'aggiunta di un frammento con un elemento Animation a un FragmentContainerView e che poi si interrompeva l'aggiunta con un'operazione pop. (I952d8)
  • Risolto un problema per cui la visualizzazione del frammento rimaneva nella gerarchia delle viste se veniva sostituita durante i metodi onCreate() o onViewCreated(). (I8a7d5).
  • Ora lo stato attivo è stato ripristinato correttamente sulle viste principali Fragment quando vengono ripristinate. (Ifc84b).
  • La combinazione delle operazioni pop e di sostituzione nella stessa transazione con frammento ora mostra le animazioni corrette (Ifd4e4, b/170328691).

Versione 1.3.0-beta02

2 dicembre 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 e androidx.fragment:fragment-testing:1.3.0-beta02. La versione 1.3.0-beta02 contiene questi commit.

Nuove funzionalità

  • FragmentScenario è stato completamente convertito in Kotlin mantenendo la compatibilità binaria e sorgente tramite l'utilizzo delle interfacce funzionali di Kotlin 1.4 per FragmentAction. (I19d31)

Cambiamenti del comportamento

  • I FragmentContainerView che non eseguono l'inflate di un frammento utilizzando l'attributo class o android:name ora possono essere utilizzati all'esterno di un elemento FragmentActivity. (Id4397, b/172266337)
  • Se provi a impostare il ciclo di vita massimo di un frammento su DESTROYED, ora verrà generato un IllegalArgumentException (Ie7651, b/170765622)
  • L'inizializzazione di uno scenario di frammenti con uno stato DESTROYED ora genererà uno IllegalArgumentException (I73590, b/170765622)

Correzioni di nuovi bug relativi a State Manager

  • È stato risolto un problema per cui la vista non raggiungeva lo stato finale se si interrompeva una transizione di frammento che utilizzava un'opzione Animator o una delle opzioni TRANSIT_FRAGMENT_. (I92426, b/169874632)
  • È stato risolto un problema che impediva l'eliminazione corretta dei frammenti con un elemento Animation in uscita. (I83d65)
  • I frammenti in uscita con effetti invertiti ora vengono annullati e riavviati con l'effetto di ingresso appropriato. (I62226, b/167092035)
  • È stato risolto un problema per cui l'uscita Animator di un hide() non veniva eseguita. (Id7ffe)
  • I frammenti ora appaiono correttamente quando vengono posticipati e poi iniziati immediatamente. (Ie713b, b/170022857)
  • I frammenti che rimuovono lo stato attivo durante un'animazione non tenteranno più di ripristinare lo stato attivo sulla vista scollegata una volta raggiunta la metrica RESUMED (I38c65, b/172925703)

Contributo esterno

  • FragmentFactory ora memorizza nella cache le classi dei frammenti separatamente per istanze ClassLoader diverse. Grazie Simon Schiller! (#87, b/113886460)

Versione 1.3.0-beta01

1° ottobre 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 e androidx.fragment:fragment-testing:1.3.0-beta01. La versione 1.3.0-beta01 contiene questi commit.

Nuove funzionalità

  • setMaxLifecycle() ora supporta l'impostazione dello stato Lifecycle su INITIALIZING, purché il frammento non sia stato spostato in CREATED. (b/159662173)

Modifiche alle API

Cambiamenti del comportamento

  • I file delle risorse dei frammenti sono stati resi privati correttamente. (aosp/1425237).

Correzioni di bug

  • I frammenti gonfiati utilizzando il tag <fragment> ora attendono correttamente che le relative visualizzazioni vengano aggiunte a un container prima di passare a AVVIATO (I02f4c)
  • Ora i frammenti visibili e da setMaxLifecycle() a CREATED eseguono correttamente gli effetti di uscita. (b/165822335)
  • La rimozione di un frammento scollegato che non è aggiunto allo stack posteriore non provoca più una perdita di memoria. Per gentile concessione di Nicklas Ansman Giertz! (b/166489383)
  • Ora i frammenti attivi avranno sempre un valore FragmentManager non nullo, mentre i frammenti con un valore FragmentManager non nullo saranno sempre considerati attivi. (aosp/1422346)
  • Gli effetti predefiniti dei frammenti, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE e TRANSIT_FRAGMENT_FADE, ora utilizzano Animator anziché Animation. (b/166155034)

Correzioni di nuovi bug relativi a State Manager

  • Ora i frammenti ripristinano correttamente lo stato attivo della vista dall'inizio dell'animazione. (Icc256)
  • I frammenti che hanno solo una transizione di elementi condivisi ora completano correttamente i loro effetti speciali, il che significa che passano effettivamente allo stato finale (Iaebc7, b/166658128)
  • Le viste a frammento ora vengono sempre rimosse dal container prima di essere eliminate. (ID5876)
  • Il nuovo gestore dello stato ora rimuove in modo coerente la vista del frammento esistente prima di aggiungere quella che entra. (I41a6e)
  • Le modifiche esplicite alla visibilità di una visualizzazione per frammenti sono ora rispettate dal nuovo gestore dello stato. Ciò significa che se imposti la visualizzazione di un frammento inserito su INVISIBLE prima dell'inizio dell'animazione, quest'ultimo rimarrà effettivamente invisibile. (b/164481490)
  • Ora i frammenti danno la priorità a Animators rispetto a Animations, il che significa che un frammento con entrambi eseguirà soltanto Animator e ignorerà Animation. (b/167579557)
  • Il nuovo gestore di stato non fa più lampeggiare i frammenti durante l'inserimento delle animazioni. (b/163084315)

Problema noto

Quando utilizzi il nuovo gestore di stati, se premi Indietro durante l'inserimento di un effetto speciale invece di tornare al frammento precedente, il vecchio frammento non viene mai aggiunto di nuovo, generando una schermata vuota. (b/167259187, b/167092035, b/168442830)

Versione 1.3.0-alpha08

19 agosto 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08 e androidx.fragment:fragment-testing:1.3.0-alpha08. La versione 1.3.0-alpha08 contiene questi commit.

Nuovo gestore di stato

Questa release include un importante refactoring della gestione interna dello stato di FragmentManager, che influisce sull'invio dei metodi del ciclo di vita, sulle animazioni e sulle transizioni, nonché sulla gestione delle transazioni posticipate. Questa opzione è abilitata per impostazione predefinita. Per ulteriori dettagli, consulta il post del blog "Frammenti: ricostruzione del sito interno". (b/139536619, b/147749580)

  • È possibile utilizzare un'API sperimentale in FragmentManager.enableNewStateManager(boolean) per controllare se FragmentManager utilizza il nuovo gestore dello stato. (I7b6ee)

I seguenti problemi vengono risolti solo quando si utilizza il nuovo gestore di stato:

  • Il frammento precedente di un'operazione replace ora viene arrestato correttamente prima dell'avvio del nuovo frammento. (b/161654580)
  • I frammenti ora impediscono più animazioni in concorrenza sugli stessi frammenti, evitando i casi in cui Animation andrebbe a sostituire tutti gli effetti Transition o Animator e Transition su un singolo frammento. (b/149569323)
  • enterTransition e exitTranstion di tutti i frammenti che entrano ed escono ora vengono eseguiti anziché solo l'ultimo frammento che entra e il primo frammento in uscita. (b/149344150)
  • I frammenti posticipati non rimangono più bloccati allo stato CREATED, ma vengono spostati in STARTED con altri frammenti. (b/129035555)
  • Risolto un problema per cui FragmentManager eseguiva operazioni non ordinate insieme a una transazione riordinata posticipata e una transazione non riordinata. (b/147297731)
  • Se si estrae più frammenti contemporaneamente, i frammenti intermedi non saranno più temporaneamente visibili durante il posticipo dei frammenti. (b/37140383)
  • FragmentManager ora restituisce i frammenti corretti quando chiami findFragmentById() o findFragmentByTag() dal callback onAttachFragment(). (b/153082833)
  • I frammenti non richiamano più onCreateView() sui frammenti distrutti quando il frammento che li sostituisce viene posticipato. (b/143915710)
  • Il messaggio di errore quando tenti di combinare le istanze del framework Transition e AndroidX Transition ora menziona il frammento con la transizione non valida. (b/155574969)

Cambiamenti del comportamento

  • Ora puoi chiamare launch() su un ActivityResultLauncher nel metodo del ciclo di vita onCreate() di un frammento. (b/161464278)
  • La chiamata di registerForActivityResult() dopo il giorno onCreate() ora genera un'eccezione che indica che questa operazione non è consentita, anziché l'impossibilità di fornire risultati in seguito a una modifica alla configurazione. (b/162255449)
  • FragmentActivity ora utilizza l'API OnContextAvailableListener introdotta in Attività 1.2.0-alpha08 per ripristinare lo stato di FragmentManager. Tutti i listener aggiunti alle sottoclassi di FragmentActivity verranno eseguiti dopo questo listener. (I513da)

Correzioni di bug

  • Ora i ActivityOptions che vengono superati quando si utilizza startIntentSenderForResult() vengono rispettati. (b/162247961)

Problema noto

  • Quando utilizzi il nuovo gestore dello stato, l'impostazione diretta della visibilità della vista principale del frammento dopo il giorno onViewCreated() e prima del giorno onResume() fa sì che la visibilità impostata venga ignorata da FragmentManager, che controlla la visibilità della vista principale. Come soluzione alternativa, devi sempre utilizzare le operazioni hide() e show() per modificare la visibilità del frammento. (b/164481490)

Versione 1.3.0-alpha07

22 luglio 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07 e androidx.fragment:fragment-testing:1.3.0-alpha07. La versione 1.3.0-alpha07 contiene questi commit.

Nuove funzionalità

  • FragmentScenario ora supporta l'impostazione di uno stato del ciclo di vita iniziale di CREATED, STARTED o RESUMED anziché spostare sempre il frammento nello stato RESUMED. (b/159662750)
  • È stata aggiunta un'alternativa all'API FragmentScenario di onFragment sotto forma di metodo di estensione Kotlin reified withFragment che consente di restituire un valore. In particolare, restituisce le eccezioni sollevate nel blocco specificato. (b/158697631)

Cambiamenti del comportamento

  • FragmentScenario ora utilizza setMaxLifecycle() per implementare moveToState(), garantendo un comportamento coerente a tutti i livelli API e disaccoppiando lo stato del frammento dall'attività sottostante. (b/156527405)
  • L'elemento SavedStateRegistryOwner restituito da ViewTreeSavedStateRegistryOwner è ora collegato al ciclo di vita della vista frammento. In questo modo, lo stato viene salvato e ripristinato contemporaneamente alla visualizzazione del frammento. (b/158503763)

Correzioni di bug

  • I frammenti ora attendono che la vista del frammento venga collegata prima di chiamare ViewCompat.requestApplyInsets(), per evitare i casi in cui la richiesta del frammento è stata eliminata. (b/158095749)
  • La chiamata di clearFragmentResultListener ora cancella correttamente l'osservatore del ciclo di vita. (b/159274993)

Versione 1.3.0-alpha06

10 giugno 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06 e androidx.fragment:fragment-testing:1.3.0-alpha06. La versione 1.3.0-alpha06 contiene questi commit.

Nuove funzionalità

  • Il callback onAttachFragment() su FragmentActivity e Fragment è stato deprecato. È stato aggiunto un nuovo FragmentOnAttachListener per fornire un'alternativa più flessibile, consentendo la delega di onAttachFragment() a listener separati e testabili e il supporto per l'aggiunta di un listener a FragmentManagers diverso dal tuo FragmentManager secondario diretto. (I06d3d)

Correzioni di bug

  • Ora lo stato di visualizzazione dei frammenti padre viene ripristinato prima dei frammenti figlio, per risolvere un problema di ordinamento visivo dopo una modifica alla configurazione quando un DialogFragment mostrava un altro DialogFragment come frammento figlio. (b/157195715)
  • È stato risolto un problema per cui il controllo Lint UseRequireInsteadOfGet non gestiva correttamente gli utilizzi concatenati degli operatori ?. e !!. (b/157677616)

Versione 1.3.0-alpha05

20 maggio 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05 e androidx.fragment:fragment-testing:1.3.0-alpha05. La versione 1.3.0-alpha05 contiene questi commit.

Nuove funzionalità

Modifiche alle API

  • Le API setFragmentResult() e setFragmentResultListener() ora assumono rispettivamente i valori Bundle e FragmentResultListener non null. Per cancellare in modo esplicito un risultato o un listener impostato in precedenza, utilizza i nuovi metodi clearFragmentResult() e clearFragmentResultListener(). (b/155416778)
  • Le estensioni Kotlin setFragmentResultListener() che supportano una lambda ora sono contrassegnate come inline. (b/155323404)

Cambiamenti del comportamento

  • Gli attributi startActivityForResult(), startIntentSenderForResult() e requestPermissions deprecati in precedenza su Fragment ora utilizzano internamente ActivityResultRegistry, rimuovendo così la limitazione che prevede l'utilizzo solo dei bit più bassi (inferiori a 0xFFFF) per i codici di richiesta quando si utilizzano queste API. (b/155518741)

Aggiornamenti alla documentazione

  • È stata espansa la documentazione sui costruttori Fragment(@LayoutRes int) e DialogFragment(@LayoutRes int) per chiarire che dovrebbero essere chiamati dal costruttore senza argomento delle sottoclassi quando si utilizza il valore predefinito FragmentFactory. (b/153042497)

Versione 1.3.0-alpha04

29 aprile 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04 e androidx.fragment:fragment-testing:1.3.0-alpha04. La versione 1.3.0-alpha04 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto il supporto per il passaggio dei risultati tra due Frammenti tramite nuove API su FragmentManager. Funziona per i frammenti gerarchici (principale/secondario), DialogFragments e frammenti in Navigation e garantisce che i risultati vengano inviati al tuo Fragment solo quando è almeno STARTED. (b/149787344)

Modifiche alle API

  • Le API del frammento di destinazione sono state deprecate. Per passare i dati tra i frammenti è invece necessario utilizzare le nuove API Fragment Result. (b/149787344)
  • Le API startActivityForResult()/onActivityResult() e requestPermissions()/onRequestPermissionsResult() su Fragment sono state ritirate. Usa le API Activity Result. (aosp/1290887)
  • Interruzione della modifica da Attività 1.2.0-alpha04: il metodo prepareCall() è stato rinominato in registerForActivityResult(). (aosp/1278717)

Correzioni di bug

  • Il valore getViewLifecycleOwner() del frammento viene ora arrestato prima della chiamata di onSaveInstanceState(), rispecchiando il comportamento del ciclo di vita del frammento. (b/154645875)
  • La chiamata di setMenuVisibility(false) su un frammento ora modifica correttamente la visibilità dei menu forniti dai suoi frammenti figlio. (b/153593580)
  • È stato corretto un illegalStateException durante l'aggiunta di un frammento alla gerarchia di visualizzazione di DialogFragment con FragmentContainerView. (b/154366601)
  • Il metodo getDefaultViewModelProviderFactory() sui frammenti non si arresta più in modo anomalo quando i frammenti vengono ospitati all'esterno di un'attività. (b/153762914)

Versione 1.3.0-alpha03

1° aprile 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 e androidx.fragment:fragment-testing:1.3.0-alpha03. La versione 1.3.0-alpha03 contiene questi commit.

Modifiche alle API

  • I metodi prepareCall su Fragment ora sono final. (b/152439361)

Correzioni di bug

  • È stata corretta una regressione introdotta in Frammento 1.3.0-alpha02 quando si utilizzava BottomSheetDialogFragment. (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)
  • È stato risolto un problema per cui le transizioni di uscita e di elemento condiviso vengono ignorate quando si utilizza setTargetFragment(). (b/152023196)
  • Da Frammento 1.2.4: sono state aggiornate le regole Fragment ProGuard per consentire l'offuscamento dei frammenti conservati. (b/151605338)
  • Da Frammento 1.2.4: la regola Lint FragmentLiveDataObserve su DialogFragment classi è disabilitata poiché il loro ciclo di vita e il ciclo di vita della visualizzazione sono sempre sincronizzati, il che rende sicuro utilizzare this o viewLifecycleOwner quando chiami observe. (b/151765086)

Modifiche alle dipendenze

  • I frammenti dipendono dall'attività 1.2.0-alpha03, che ha apportato miglioramenti significativi all'API Activity Result introdotta nell'attività 1.2.0-alpha02.

Versione 1.3.0-alpha02

18 marzo 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02 e androidx.fragment:fragment-testing:1.3.0-alpha02. La versione 1.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Aggiunto il supporto per l'API ActivityResultRegistry introdotto nell'Attività 1.2.0-alpha02 per gestire i flussi startActivityForResult()+onActivityResult() e requestPermissions()+onRequestPermissionsResult() senza eseguire l'override dei metodi nel Fragment, oltre a fornire hook per testare questi flussi. Consulta la sezione Come ottenere un risultato da un'attività aggiornata. (b/125158199)

Modifiche alle API

  • DialogFragment ora fornisce un costruttore che prende un @LayoutRes che indica il layout che onCreateView() dovrebbe aumentare per impostazione predefinita. (b/150327080)
  • Il metodo onActivityCreated() è ora deprecato. Il codice che tocca la visualizzazione del frammento deve essere eseguito in onViewCreated() (chiamato immediatamente prima di onActivityCreated()) mentre gli altri codici di inizializzazione devono essere in onCreate(). Per ricevere una richiamata in particolare quando l'attività onCreate() è completa, è necessario registrare un LifeCycleObserver sul Lifecycle dell'attività in onAttach() e rimuovere una volta ricevuto il callback onCreate(). (b/144309266)

Correzioni di bug

  • Da Frammento 1.2.3: è stato corretto un bug in DialogFragment che causava un errore di StackOverflowError durante la chiamata a getLayoutInflater() dall'interno di onCreateDialog(). (b/117894767, aosp/1258664)
  • Da Fragment 1.2.3: è stato ridotto l'ambito delle regole ProGuard incluse in Fragment per garantire che le classi Fragment inutilizzate possano essere rimosse. (b/149665169)
  • Da Frammento 1.2.3: sono stati corretti i falsi positivi nel controllo Lint di UseRequireInsteadOfGet quando veniva utilizzato un nome di variabile locale con shadowing sul nome della proprietà Kotlin. (b/149891163)
  • Da Frammento 1.2.3: FragmentContainerView non genera più un UnsupportedOperationException 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

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01 e androidx.fragment:fragment-testing:1.3.0-alpha01. La versione 1.3.0-alpha01 contiene questi commit.

Nuove funzionalità

Modifiche alle API

  • Il metodo setRetainInstance() su Fragments è stato ritirato. Con l'introduzione dei ViewModels, gli sviluppatori hanno a disposizione un'API specifica per la conservazione dello stato che può essere associata ad attività, frammenti e grafici di navigazione. In questo modo gli sviluppatori possono usare un frammento normale non conservato 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 del ViewModel e il callback onCleared() che riceve). (b/143911815)
  • Con il rilascio di ViewPager2 1.0.0, le classi FragmentPagerAdapter e FragmentStatePagerAdapter per l'interazione con ViewPager sono state deprecate. Vedi Eseguire la migrazione da ViewPager a ViewPager2. (b/145132715)

Correzioni di bug

  • Le regole di ProGuard a frammenti ora mantengono correttamente solo le classi dei costruttori predefiniti Fragment utilizzate anziché per tutte le istanze Fragment, correggendo una regressione introdotta in Frammento 1.2.1. (b/149665169
  • Le regole Lint require___() aggiunte nel Frammento 1.2.2 non sono più falsi positivi sulle variabili locali che condividono lo stesso nome dei nomi delle proprietà Kotlin in ombra (ad es. view). (b/149891163)
  • FragmentContainerView non genera più un UnsupportedOperationException quando utilizzi l'anteprima del layout in Android Studio. (b/149707833)
  • Risolto un problema per cui i frammenti conservati aggiunti dopo il salvataggio dello stato non venivano ricreati continuamente e poi eliminati dopo ogni modifica alla configurazione. (b/145832397)

Versione 1.2.5

Versione 1.2.5

10 giugno 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5 e androidx.fragment:fragment-testing:1.2.5. La versione 1.2.5 contiene questi commit.

Correzioni di bug

  • Il valore getViewLifecycleOwner() del frammento viene ora arrestato prima della chiamata di onSaveInstanceState(), rispecchiando il comportamento del ciclo di vita del frammento. In precedenza era presente nel Frammento 1.3.0-alpha04. (b/154645875)
  • La chiamata di setMenuVisibility(false) su un frammento ora modifica correttamente la visibilità dei menu forniti dai suoi frammenti figlio. In precedenza era presente nel Frammento 1.3.0-alpha04. (b/153593580)

Versione 1.2.4

Versione 1.2.4

1° aprile 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4 e androidx.fragment:fragment-testing:1.2.4. La versione 1.2.4 contiene questi commit.

Correzioni di bug

  • Sono state aggiornate le regole Fragment ProGuard per consentire l'offuscamento dei frammenti conservati. (b/151605338)
  • La regola Lint FragmentLiveDataObserve è stata disabilitata sulle classi DialogFragment poiché il loro ciclo di vita e il ciclo di vita della visualizzazione sono sempre sincronizzati, il che rende sicuro utilizzare this o viewLifecycleOwner quando chiami observe. (b/151765086)

Versione 1.2.3

Versione 1.2.3

18 marzo 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3 e androidx.fragment:fragment-testing:1.2.3. La versione 1.2.3 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug in DialogFragment che causava un errore di StackOverflowError durante la chiamata a getLayoutInflater() dall'interno di onCreateDialog(). (b/117894767, aosp/1258665)
  • È stato ridotto l'ambito delle regole ProGuard incluse in Fragment per garantire che le classi Fragment inutilizzate possano essere rimosse. (b/149665169)
  • Sono stati corretti i falsi positivi nel controllo Lint UseRequireInsteadOfGet quando veniva utilizzato il nome di una variabile locale con shadowing sul nome della proprietà Kotlin. (b/149891163)
  • FragmentContainerView non genera più un UnsupportedOperationException per l'utilizzo del costruttore errato nell'anteprima del layout. (b/149707833)

Versione 1.2.2

Versione 1.2.2

19 febbraio 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 e androidx.fragment:fragment-testing:1.2.2. La versione 1.2.2 contiene questi commit.

Nuovi controlli Lint

  • Lint suggerisce di utilizzare viewLifecycleOwner come LifecycleOwner per le chiamate a OnBackPressedDispatcher in onCreateView(), onViewCreated() e onActivityCreated(). (b/142117657)
  • È stato aggiunto un nuovo controllo lint che conferma che stai usando il debugImplementation corretto quando usi l'artefatto fragment-testing. (b/141500106)
  • Per i messaggi di errore più descrittivi, i frammenti suggeriscono ora di utilizzare i metodi require___() associati, anziché checkNotNull(get___()), requireNonNull(get___()) o get___()!! per tutte le API Fragment che includono sia un valore get che un equivalente require. (aosp/1202883)

Correzioni di bug

  • Sono stati corretti i file Fragment ProGuard per evitare avvisi R8 (b/148963981)
  • È stato migliorato il controllo Lint esistente che suggerisce l'utilizzo di viewLifecycleOwner quando si utilizza observe per gestire anche la versione del metodo di estensione livedata-ktx di observe. (b/148996309)
  • È stata corretta la formattazione di molti controlli Lint (aosp/1157012)

Contributi esterni

  • Grazie a Zac Sweers per aver contribuito ai controlli Lint di require___() per conto di Slack. (aosp/1202883)

Versione 1.2.1

Versione 1.2.1

5 febbraio 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 e androidx.fragment:fragment-testing:1.2.1. La versione 1.2.1 contiene questi commit.

Correzioni di bug

  • Ora ProGuard conserva il costruttore predefinito dei frammenti aggiunti tramite i metodi add e replace che utilizzano un'istanza Class (o le versioni reificate di Kotlin). (b/148181315)
  • FragmentStatePagerAdapter e FragmentPagerAdapter non rilevano più le eccezioni generate da FragmentManager quando vengono eseguiti finishUpdate(). (aosp/1208711)
  • È stato risolto un problema per cui FragmentManager.findFragment() non funzionava con i frammenti aggiunti tramite il tag <fragment>. (b/147784323)
  • I frammenti gonfiati utilizzando il tag <fragment> ora ricevono sempre una chiamata a onInflate() prima del giorno onCreate() quando nel layout. (aosp/1215856).
  • La chiamata di toString() su un'istanza FragmentManager non genera più un NullPointerException quando l'attività è già stata eliminata. (b/148189412)

Modifiche alle dipendenze

Versione 1.2.0

Versione 1.2.0

22 gennaio 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0 e androidx.fragment:fragment-testing:1.2.0. La versione 1.2.0 contiene questi commit.

Modifiche importanti dalla versione 1.1.0

  • FragmentContainerView: FragmentContainerView è il contenitore vivamente consigliato per l'aggiunta dinamica di frammenti, che sostituisce l'utilizzo di FrameLayout o di altri layout. Supporta anche gli stessi valori class, android:name e android:tag facoltativo del tag <fragment>, ma utilizza un normale FragmentTransaction per aggiungere questo frammento iniziale, anziché il percorso del codice personalizzato utilizzato da <fragment>.
  • Tempistiche onDestroyView(): i frammenti ora attendono il completamento delle animazioni di uscita, delle transizioni del framework di uscita e delle transizioni AndroidX (quando si utilizza Transizione 1.3.0) prima di chiamare onDestroyView().
  • add() e replace() basati su corsi: sono stati aggiunti nuovi sovraccarichi di add() e replace() su FragmentTransaction che accettano un Class<? extends Fragment> e Bundle di argomenti facoltativi. Questi metodi utilizzano FragmentFactory per creare un'istanza del frammento da aggiungere. Anche le estensioni Kotlin che utilizzano tipi modificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)) sono state aggiunte a fragment-ktx.
  • Integrazione del ciclo di vita ViewModel SavedState: SavedStateViewModelFactory è ora il valore di fabbrica predefinito utilizzato quando si utilizzano by viewModels(), by activityViewModels(), il costruttore ViewModelProvider o ViewModelProviders.of() con un frammento.
  • Nuovi controlli Lint: è stato aggiunto un nuovo controllo Lint che assicura di utilizzare getViewLifecycleOwner() durante l'osservazione di LiveData da onCreateView(), onViewCreated() o onActivityCreated().
  • Ritiro di getFragmentManager(): i metodi getFragmentManager() e requireFragmentManager() su Fragment sono stati deprecati e sostituiti con un singolo metodo getParentFragmentManager(), che restituisce il valore FragmentManager non nullo a cui è stato aggiunto il frammento (puoi utilizzare isAdded() per determinare se è sicuro chiamare).
  • Ritiro di FragmentManager.enableDebugLogging(): il metodo FragmentManager.enableDebugLogging statico è stato ritirato. FragmentManager ora rispetta Log.isLoggable() per il tag FragmentManager, consentendoti di attivare il logging di DEBUG o VERBOSE senza dover ricompilare l'app.

Problemi noti

  • I frammenti a cui viene fatto riferimento solo tramite l'attributo class o android:name in un FragmentContainerView non vengono conservati automaticamente da ProGuard, pertanto devi aggiungere manualmente una regola di conservazione per ogni classe di frammento. (b/142601969)
  • Quando aggiungi un NavHostFragment utilizzando class o android:name in XML con FragmentContainerView, non puoi usare findNavController() in onCreate() della tua Attività. (b/142847973)

Versione 1.2.0-rc05

8 gennaio 2020

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05 e androidx.fragment:fragment-testing:1.2.0-rc05. La versione 1.2.0-rc05 contiene questi commit.

Correzioni di bug

  • È stata corretta una regressione nel Frammento 1.2.0-rc04 durante l'utilizzo del tag <fragment> che causava la chiamata errata di onViewCreated() durante l'eliminazione dell'attività. (b/146290333)
  • Ora la non configurazione dei frammenti aggiunti con il tag <fragment> viene cancellata correttamente anche quando si trovano solo occasionalmente nel layout (ossia solo nel layout orizzontale). Di conseguenza, questi frammenti vengono ora spostati correttamente in CREATED anche se non si trovano nel layout, anziché essere creati in un'istanza ma non vengono mai spostati attraverso i metodi del ciclo di vita. (b/145769287)

Versione 1.2.0-rc04

18 dicembre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04 e androidx.fragment:fragment-testing:1.2.0-rc04. La versione 1.2.0-rc04 contiene questi commit.

Correzioni di bug

  • Sono state modificate le animazioni di TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE e TRANSIT_FRAGMENT_FADE per evitare problemi visivi. (b/145468417)

Versione 1.2.0-rc03

4 dicembre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03 e androidx.fragment:fragment-testing:1.2.0-rc03. La versione 1.2.0-rc03 contiene questi commit.

Correzioni di bug

  • È stato corretto un cambiamento del comportamento involontario per cui i Frammenti rimossi vengono ancora restituiti da findFragmentById() / findFragmentByTag() durante l'esecuzione delle animazioni/transizioni di uscita. (b/143982969, aosp/1167585)
  • I frammenti secondari vengono ora arrestati correttamente prima degli elementi padre quando l'attività contenitore chiama onSaveInstanceState(). (b/144380645)
  • È stato risolto un problema per cui le visualizzazioni venivano contrassegnate erroneamente come INVISIBLE dopo la visualizzazione di un frammento nascosto. (b/70793925)
  • Le transizioni degli elementi condivisi a frammenti ora gestiscono le visualizzazioni che sono state ruotate, ridimensionate e così via (b/142835261).

Aggiornamenti alla documentazione

  • È stata chiarita la documentazione relativa al ritiro relativa a setUserVisibleHint(). (b/143897055)
  • È stata migliorata la documentazione su setFragmentFactory() e getFragmentFactory() per indicare meglio che l'impostazione di FragmentFactory interesserà anche i FragmentManagers secondari. (aosp/1170095)

Modifiche alle dipendenze

  • I frammenti ora dipendono da ciclo di vita 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 e attività 1.1.0-rc03.

Versione 1.2.0-rc02

7 novembre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02 e androidx.fragment:fragment-testing:1.2.0-rc02. La versione 1.2.0-rc02 contiene questi commit.

Correzioni di bug

  • In Kotlin, la LintFix per l'utilizzo di getViewLifecycleOwner() durante l'osservazione di LiveData da onCreateView(), onViewCreated() o onActivityCreated() (introdotto in Fragment 1.2.0-rc01) ora utilizza la sintassi di accesso alla proprietà Kotlin viewLifecycleOwner anziché getViewLifecycleOwner(). (aosp/1143821)

Versione 1.2.0-rc01

23 ottobre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01 e androidx.fragment:fragment-testing:1.2.0-rc01. La versione 1.2.0-rc01 contiene questi commit.

Nuove funzionalità

  • FragmentContainerView ora supporta l'attributo class oltre a android:name, il mirroring della funzionalità del tag <fragment>. (b/142722242)
  • È stato aggiunto un nuovo controllo Lint per verificare che venga utilizzato getViewLifecycleOwner() durante l'osservazione di LiveData da onCreateView(), onViewCreated() o onActivityCreated(). (b/137122478)

Correzioni di bug

  • I callback onDismiss e onCancel su DialogFragment ora garantiscono che il valore DialogInterface trasmesso loro non sia null e che getDialog() restituisca un valore diverso da null quando vengono eseguiti. (b/141974033)
  • FragmentContainerView ora aggiunge il Frammento definito da class o android:name come parte dell'inflazione, assicurando che findFragmentById() e findFragmentByTag() funzionino immediatamente dopo. (b/142520327)
  • È stato corretto un IllegalStateException in FragmentContainerView a causa del salvataggio dello stato. (b/142580713)
  • È stato corretto un UnsupportedOperationException in FragmentContainerView quando la classe FragmentContainerView è offuscata. (b/142657034)

Problemi noti

  • I frammenti a cui viene fatto riferimento solo tramite l'attributo class o android:name in un FragmentContainerView non vengono conservati automaticamente da ProGuard, pertanto devi aggiungere manualmente una regola di conservazione per ogni classe di frammento. Abbiamo disattivato la regola Lint che suggerisce di passare a FragmentContainerView finché il problema non verrà risolto tramite aapt2. (b/142601969)

Versione 1.2.0-beta02

11 ottobre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02 e androidx.fragment:fragment-testing:1.2.0-beta02. La versione 1.2.0-beta02 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui l'elemento onInflate() del frammento non riceveva attributi corretti da FragmentContainerView, causando l'interruzione di casi come NavHostFragment. (b/142421837)

Versione 1.2.0-beta01

9 ottobre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01 e androidx.fragment:fragment-testing:1.2.0-beta01. La versione 1.2.0-beta01 contiene questi commit.

Nuove funzionalità

  • FragmentContainerView aggiunge il supporto per l'aggiunta di un frammento iniziale con un supporto aggiuntivo per gli attributi XML android:name e android:tag facoltativi. A differenza del tag <fragment>, FragmentContainerView utilizza un normale FragmentTransaction sottostante per aggiungere il frammento iniziale, consentendo ulteriori operazioni FragmentTransaction su FragmentContainerView e abilita l'utilizzo dell'associazione di viste per il layout. (b/139830628, b/141177981)
  • I frammenti ora contengono un avviso Lint che offre una correzione rapida per sostituire <fragment> con FragmentContainerView. (b/139830056)

Correzioni di bug

  • È stato corretto un ClassCastException quando si utilizzava androidx.transition. (b/140680619)
  • Quando utilizzi Transizione 1.3.0-beta01, i frammenti ora attendono il completamento delle transizioni androidx.transition (oltre alle transizioni e alle animazioni del framework, che sono state corrette rispettivamente in Frammento 1.2.0-alpha03 e Frammento 1.2.0-alpha02) prima di inviare onDestroyView(). (aosp/1119841)
  • Quando utilizzi Transizione 1.3.0-beta01, i frammenti ora annullano correttamente le transizioni androidx.transition prima di iniziare nuove transizioni / animazioni nello stesso contenitore. (aosp/1119841)
  • È stato risolto un problema nell'API 17 e versioni precedenti quando si utilizzano le transizioni androidx.transition nella vista radice del frammento quando si utilizza FragmentContainerView. (b/140361893)
  • L'elemento fragment-testing ora dipende da AndroidX Test 1.2.0, che risolve 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

  • L'elemento onInflate() del frammento non riceve gli attributi corretti da FragmentContainerView, causando l'interruzione di casi come NavHostFragment. (b/142421837)

Versione 1.2.0-alpha04

18 settembre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04 e androidx.fragment:fragment-testing:1.2.0-alpha04. La versione 1.2.0-alpha04 contiene questi commit.

Modifiche alle API

  • I metodi getFragmentManager() e requireFragmentManager() su Fragment sono stati deprecati e sostituiti con un singolo metodo getParentFragmentManager(), che restituisce il valore FragmentManager non null a cui è stato aggiunto il frammento (puoi utilizzare isAdded() per determinare se è sicuro chiamare). (b/140574496)
  • Il metodo FragmentManager.enableDebugLogging statico è stato ritirato. FragmentManager ora rispetta Log.isLoggable() per il tag FragmentManager, consentendoti di attivare il logging di DEBUG o VERBOSE senza dover ricompilare l'app. (aosp/1116591)

Correzioni di bug

  • I frammenti vengono ora eliminati correttamente mentre sono in esecuzione le animazioni di uscita su altri frammenti. (b/140574199)
  • È stato risolto un problema per cui i Frammenti chiamavano Activity.findViewById() e prima no. (aosp/1116431)

Versione 1.2.0-alpha03

5 settembre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 e androidx.fragment:fragment-testing:1.2.0-alpha03. I commit inclusi in questa versione sono disponibili qui.

Modifiche alle API

Correzioni di bug

  • Ora FragmentContainerView inverte correttamente l'ordine di disegno quando rimuovi frammenti dalla pila posteriore. (b/139104187)
  • È stato risolto il problema per cui veniva eseguita l'animazione sbagliata quando veniva aperto un frammento e si aggiungeva contemporaneamente un nuovo frammento. (b/111659726)
  • Ora i frammenti attendono il completamento delle transizioni (oltre alle animazioni, che era stato corretto in Frammento 1.2.0-alpha02) prima di inviare onDestroyView(). (b/138741697)

Versione 1.2.0-alpha02

7 agosto 2019

Vengono rilasciati i rilasci di androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 e androidx.fragment:fragment-testing:11.2.0-alpha02. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • SavedStateViewModelFactory è ora il valore di fabbrica predefinito utilizzato quando si utilizza by viewModels(), by activityViewModels(), il costruttore ViewModelProvider oppure ViewModelProviders.of() con un Fragment. (b/135716331)
  • Le animazioni predefinite quando utilizzi TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADE con setTransition su FragmentTransaction sono state aggiornate in modo che corrispondano alle animazioni utilizzate dalle attività sui dispositivi Android 10. (aosp/1012812, aosp/1014730)

Modifiche alle API

  • Introduce FragmentContainerView come contenitore vivamente consigliato per i frammenti aggiunti in modo dinamico, sostituendo l'utilizzo di FrameLayout e così via, in quanto corregge i problemi di ordinamento in Z delle animazioni e l'invio di riquadri delle finestre ai frammenti. (b/37036000, aosp/985243, b/136494650)
  • È stato aggiunto un metodo FragmentManager.findFragment(View) statico per recuperare il frammento contenitore da una visualizzazione gonfiata da un frammento. Un'estensione Kotlin è disponibile anche in fragment-ktx. (aosp/1090757).
  • Sono stati aggiunti nuovi sovraccarichi di add() e replace() su FragmentTransaction che accettano Class<? extends Fragment> e Bundle di argomenti facoltativi. Questi metodi utilizzano FragmentFactory per creare un'istanza del frammento da aggiungere. A fragment-ktx sono state aggiunte anche le estensioni Kotlin che utilizzano tipi modificati (ad es.fragmentTransaction.replace<YourFragment>(R.id.container)). (b/126124987)
  • @MainThread annotazioni sono state aggiunte a Fragment callback del ciclo di vita. (b/127272564)
  • Le API relative al titolo dei breadcrumb su FragmentTransaction e FragmentManager.BackStackEntry sono state deprecate. (b/138252944)
  • Il metodo setTransitionStyle su FragmentTransaction è stato ritirato. (aosp/1011537)
  • Molti metodi in FragmentManager non sono più abstract. L'istanza FragmentManager rimane abstract e non deve essere creata o estesa direttamente. Dovresti continuare a ricevere solo un'istanza esistente da getSupportFragmentManager(), getChildFragmentManager() e così via.

Correzioni di bug

  • Da Frammento 1.1.0-rc04: ora i frammenti annullano correttamente le transizioni posticipate sui frammenti. (b/138251858)
  • Da Frammento 1.1.0-rc03: è stato risolto un problema per cui chiamare postponeEnterTransition() con un timeout più di una volta non annullava i timeout precedenti. (b/137797118)
  • Da Frammento 1.1.0-rc02: è stato corretto un arresto anomalo in FragmentPagerAdapter e FragmentStatePagerAdapter durante la rimozione dell'elemento corrente. (b/137209870)
  • I frammenti ora attendono il completamento delle animazioni prima di inviare onDestroyView(). (b/136110528)
  • Le animazioni dei frammenti dei frammenti figlio e dei relativi discendenti ora vengono gestite correttamente quando si anima il frammento principale. (b/116675313)
  • È stato corretto un NullPointerException durante l'utilizzo di transizioni di elementi condivise e la combinazione di un'operazione Pop e Add. (b/120507394)
  • È stata aggiunta una soluzione alternativa a IllegalStateException quando utilizzi FragmentPagerAdapter e FragmentStatePagerAdapter nei test robotici. (b/137201343)

Versione 1.2.0-alpha01

2 luglio 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 e androidx.fragment:fragment-testing:1.2.0-alpha01. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • FragmentManager ora chiama requestApplyInsets() dopo aver collegato la vista del frammento e direttamente prima di chiamare onViewCreated(), assicurando che la visualizzazione abbia sempre i riquadri corretti. (b/135945162)

Correzioni di bug

  • È stato corretto un NullPointerException durante lo sblocco di un FragmentTransaction che utilizzava setPrimaryNavigationFragment() prima di replace(). (b/134673465)

Versione 1.1.0

Versione 1.1.0

5 settembre 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 e androidx.fragment:fragment-testing:1.1.0. I commit inclusi in questa versione sono disponibili qui.

Modifiche importanti dalla versione 1.0.0

  • fragment-testing: l'artefatto fragment-testing fornisce una classe FragmentScenario per testare un frammento in modo isolato. Per maggiori dettagli, vedi Testare la documentazione sui frammenti dell'app.
  • Fragmentfabbrica: ora puoi impostare un valore FragmentFactory su FragmentManager per gestire la creazione di istanze di frammenti, rimuovendo così il requisito indispensabile di avere un costruttore senza argomento.
  • Delegati proprietà Kotlin per ViewModels: l'artefatto fragment-ktx ora contiene due delegati per la proprietà Kotlin: by viewModels() per accedere ai ViewModel associati al singolo frammento e by activityViewModels() per accedere ai ViewModels con ambito all'attività.
  • Ciclo di vita massimo: ora puoi impostare uno stato di ciclo di vita massimo per un frammento chiamando setMaxLifecycle() su un FragmentTransaction. Questo sostituisce l'elemento setUserVisibleHint(), ora deprecato. FragmentPagerAdapter e FragmentStatePagerAdapter hanno un nuovo costruttore che ti consente di passare al nuovo comportamento.
  • Costruttore LayoutId FragmentActivity: ora le sottoclassi di FragmentActivity possono chiamare un costruttore su FragmentActivity che prende un ID R.layout, per indicare il layout che deve essere impostato come visualizzazione del contenuto in alternativa alla chiamata di setContentView() in onCreate(). Ciò non modifica il requisito in base al quale la sottoclasse ha un costruttore senza argomento.
  • Costruttore LayoutId di frammento: le sottoclassi di Fragment ora possono facoltativamente chiamare un costruttore su Fragment che prende un ID R.layout, per indicare il layout da utilizzare per questo frammento come alternativa all'override di onCreateView(). Il layout gonfiato può essere configurato in onViewCreated().
  • Posticipa con un timeout: è stato aggiunto un nuovo sovraccarico di postponeEnterTransition() che richiede un timeout.

Versione 1.1.0-rc04

7 agosto 2019

Vengono rilasciati i rilasci di androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 e androidx.fragment:fragment-testing:1.1.0-rc04. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • I frammenti ora annullano correttamente le transizioni posticipate su Frammenti sono stati sbloccati. (b/138251858)

Versione 1.1.0-rc03

19 luglio 2019

Vengono rilasciati i rilasci di androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 e androidx.fragment:fragment-testing:1.1.0-rc03. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stato risolto un problema per cui chiamare postponeEnterTransition() con un timeout più di una volta non annullava i timeout precedenti. (b/137797118)

Versione 1.1.0-rc02

17 luglio 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 e androidx.fragment-testing:fragment:1.1.0-rc02. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stato risolto un arresto anomalo in FragmentPagerAdapter e FragmentStatePagerAdapter durante la rimozione dell'elemento corrente. (b/137209870)

Versione 1.1.0-rc01

2 luglio 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01 e androidx.fragment:fragment-testing:1.1.0-rc01. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • Ora i frammenti aggiornano correttamente la propria visibilità quando si utilizzano le operazioni show() o hide() mentre è in corso la transizione. (b/133385058)
  • È stato corretto un NullPointerException durante lo sblocco di un FragmentTransaction che utilizzava setPrimaryNavigationFragment() prima di replace(). (b/134673465)

Versione 1.1.0-beta01

5 giugno 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01 e androidx.fragment:fragment-testing:1.1.0-beta01. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • I callback androidx.lifecycle.Lifecycle (in particolare correlati a STARTED, RESUMED, PAUSED, STOPPED e DESTROYED) per i frammenti nidificati sono ora nidificati correttamente. (b/133497591)
  • OnBackPressedCallback istanze registrate in onCreate() di un frammento hanno ora correttamente la precedenza sul FragmentManager secondario. (b/133175997)
  • I frammenti figlio non sono più animati quando il relativo frammento padre viene sostituito. (b/121017790)
  • Le animazioni e le transizioni dei frammenti ora vengono ignorate quando si utilizza animateLayoutChanges="true" e viene risolto un problema per cui i frammenti non venivano eliminati correttamente. (b/116257087)

Versione 1.1.0-alpha09

16 maggio 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09 e androidx.fragment:fragment-testing:1.1.0-alpha09. I commit inclusi in questa versione sono disponibili qui.

Modifiche alle API

  • Ora i frammenti ricevono un callback a un nuovo metodo onPrimaryNavigationFragmentChanged(boolean) quando cambia il frammento di navigazione principale. aosp/960857

Correzioni di bug

  • Le voci di menu gonfiate da un frammento secondario vengono ora rimosse correttamente quando viene rimosso il frammento principale. b/131581013

Versione 1.1.0-alpha08

7 maggio 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 e androidx.fragment:fragment-testing:1.1.0-alpha08. I commit inclusi in questa versione sono disponibili qui.

Questa release non è compatibile con le preferenze da 1.1.0-alpha01 a 1.1.0-alpha04. Esegui l'upgrade alle Preferenze 1.1.0-alpha05 quando utilizzi questa versione di Frammenti.

Nuove funzionalità

  • È stato aggiunto un nuovo sovraccarico di postponeEnterTransition() che richiede un timeout, dopodiché il Frammento chiamerà automaticamente startPostponedEnterTransition() b/120803208

Modifiche alle API

  • Modifica che interrompe la modifica: il metodo FragmentFactory instantiate precedentemente obsoleto che utilizzava Bundle è stato rimosso. aosp/953856
  • Modifica che provoca l'interruzione: le costanti RESUME_ONLY_CURRENT_FRAGMENT e USE_SET_USER_VISIBLE_HINT in FragmentPagerAdapter e FragmentStatePagerAdapter sono state rinominate rispettivamente BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT e BEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Correzioni di bug

  • I frammenti il cui ciclo di vita è stato limitato tramite setMaxLifecycle() non vengono più ripresi prima del loro stato finale. b/131557151
  • Quando utilizzi setMaxLifecycle(Lifecycle.State.CREATED), la visualizzazione dei frammenti verrà eliminata correttamente. aosp/954180

Versione 1.1.0-alpha07

25 aprile 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07 e androidx.fragment:fragment-testing:1.1.0-alpha07. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Ora puoi impostare uno stato di ciclo di vita massimo per un frammento richiamando setMaxLifecycle() su un FragmentTransaction. Questo sostituisce l'elemento setUserVisibleHint(), ora deprecato. FragmentPagerAdapter e FragmentStatePagerAdapter hanno un nuovo costruttore che ti consente di passare al nuovo comportamento. (b/129780800)

Modifiche alle API

  • Ora moveToState(STARTED) su FragmentScenario può essere chiamato solo su dispositivi con API 24 e versioni successive. (b/129880016)

Cambiamenti del comportamento

  • Come conseguenza di (b/129907905), i frammenti nello stack posteriore non riceveranno un callback a onCreateView() quando l'attività di hosting viene ricreata. Ora onCreateView() verrà chiamato solo quando il frammento diventerà visibile (ad esempio, la pila posteriore è stata estratta).

Correzioni di bug

  • È stato risolto un problema relativo all'utilizzo di un tag <fragment> in XML e del costruttore contentLayoutId di FragmentActivity o AppCompatActivity. (b/129907905)
  • È stato corretto un problema per cui i frammenti sullo stack posteriore non venivano spostati almeno in CREATED dopo una modifica alla configurazione, causando il mancato smaltimento dei ViewModel e dei frammenti conservati figlio. (b/129593351)
  • È stato risolto un arresto anomalo in restoreSaveState causato da una desincronizzazione dei frammenti conservati dopo il salvataggio dello stato dell'istanza. (b/130433793) (aosp/947824)
  • Sono stati risolti i problemi per cui un elemento OnBackPressedCallback aggiunto con un ciclo di vita di frammenti non veniva chiamato se FragmentManager aveva uno stack back. 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 in particolare di un'animazione del livello hardware, impostala come parte dell'animazione. (b/129486478)

Versione 1.1.0-alpha06

3 aprile 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06 e androidx.fragment:fragment-testing:1.1.0-alpha06. 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 e FragmentActivity ora contengono un secondo costruttore che prende un @LayoutRes int, che sostituisce il precedente comportamento di annotazione della classe con @ContentView. Questo approccio funziona sia nei moduli delle app che delle librerie. (b/128352521)
  • L'elemento onActivityResult() di FragmentActivity è ora contrassegnato correttamente come @CallSuper. (b/127971684)
  • Il metodo instantiate di Fragmentfabbrica che utilizza un bundle di argomento è stato deprecato e le app devono usare il nuovo sovraccarico instantiate che non accetta un bundle. (b/128836103)
  • I metodi FragmentScenario sono ora annotati correttamente con @StyleRes. (aosp/924193)
  • L'API FragmentTabHost è stata deprecata. (b/127971835)
  • L'elemento getThemedContext() di FragmentActivity è stato rimosso. (aosp/934078)

Correzioni di bug

  • È stato corretto un problema di regressione in 1.1.0-alpha05 che causava il flashing del frammento in ingresso sullo schermo. (b/129405432)
  • È stato risolto un problema per cui il frammento di navigazione principale andava perso dopo una serie di operazioni popBackStack+replace+popBackStack. (b/124332597)
  • È stato risolto un problema relativo all'utilizzo dei costruttori @ContentView nella tua Attività durante il ripristino dello stato Frammento. (b/127313094)
  • È stata corretta la logica di setTargetFragment() durante la sostituzione di un Fragment di destinazione esistente con un Fragment non ancora associato a FragmentManager. (aosp/932156).

Versione 1.1.0-alpha05

13 marzo 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05 e androidx.fragment:fragment-testing:1.1.0-alpha05. L'elenco completo dei commit inclusi in questa versione è disponibile qui.

Nuove funzionalità

  • Ora vengono memorizzate nella cache @ContentView ricerche di annotazioni (b/123709449)

Cambiamenti del comportamento

  • La chiamata a remove(), hide(), show(), detach() e setPrimaryNavigationFragment() con un Fragment associato a un altro FragmentManager ora genera un IllegalStateException invece di errore automatico (aosp/904301)

Correzioni di bug

  • onNewIntent per FragmentActivity è ora contrassegnato correttamente con @CallSuper (b/124120586)
  • Risolto un problema per cui il onDismiss() di DialogFragment poteva essere chiamato due volte quando si utilizza getDialog().dismiss() o getDialog().cancel() (b/126563750)

Versione 1.1.0-alpha04

7 febbraio 2019

Vengono rilasciate le funzionalità androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 e androidx.fragment:fragment-testing 1.1.0-alpha04.

Nuove funzionalità

  • Aggiunto il supporto per l'annotazione della classe @ContentView che consente di indicare quale file XML di layout deve essere aumentato in modo artificioso in alternativa all'override di onCreateView(). Ti consigliamo di visualizzare il lavoro correlato in onViewCreated(). (aosp/837619)
  • fragment-testing ora dipende dalla versione stabile di androidx.test:core-ktx 1.1.0 (b/121209673)
  • Ora puoi utilizzare openActionBarOverflowOrOptionsMenu con FragmentScenario per testare i menu delle opzioni ospitati dal frammento (b/121126668)

Modifiche alle API

  • È stato aggiunto un metodo requireArguments() che restituisce un @NonNull Bundle o genera un IllegalStateException (b/121196360)
  • È stata aggiunta una nota che indica che getLifecycle(), getViewLifecycleOwner() e getViewLifecycleOwnerLiveData() non devono essere sostituiti e saranno resi definitivi in una release futura. Invia una richiesta di funzionalità se stai eseguendo l'override di questo metodo. (aosp/880714)
  • È stata aggiunta una nota che indica che getViewModelStore() non deve essere sostituito e sarà reso definitivo in una release futura. Invia una richiesta di funzionalità se stai eseguendo l'override di questo metodo. (aosp/880713)
  • È stato risolto un problema di compatibilità binaria con le versioni precedenti di Fragments. (aosp/887877) (aosp/889834)

Correzioni di bug

  • I frammenti di destinazione vengono cancellati correttamente quando passi null a setTargetFragment(). (aosp/849969).
  • È stato risolto un problema per cui i Frammenti target a volte non erano disponibili a partire dal giorno onDestroy(). (b/122312935)
  • La funzione onIgnora() di DialogFragment viene ora chiamata 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 ViewModels associati all'attività contenitore [b/119050253]
  • Il delegato della proprietà Kotlin by viewModels è stato ampliato per utilizzare un metodo lambda facoltativo per ottenere il ViewModelStoreOwner, che ti consente di passare nel frammento principale o in un altro ViewModelStoreOwner personalizzato con codice come val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

Modifiche alle API

  • FragmentScenario ora ti consente di specificare un tema, ad esempio Theme.AppCompat [b/119054431]. Questa è una modifica che provoca un errore.
  • È stato aggiunto un metodo requireView() che restituisce un @NonNull View o genera un IllegalStateException [b/120241368]
  • È stato aggiunto un metodo requireParentFragment() che restituisce un @NonNull Fragment o genera un IllegalStateException [b/112103783]

Correzioni di bug

  • È stato corretto un errore di stato illegale: errore durante il salvataggio dello stato b/120814739
  • I frammenti che vengono ripristinati dallo stato dell'istanza salvata ora riceveranno sempre un valore Bundle non nullo [b/119794496]
  • I frammenti rimossi non riutilizzano più l'oggetto Lifecycle se viene aggiunto di nuovo [b/118880674]

Versione 1.1.0-alpha02

3 dicembre 2018

Nuove funzionalità

  • Le estensioni Kotlin di FragmentScenario ora ti consentono di usare un lambda per la creazione di Fragment come alternativa al passaggio in un'istanza FragmentFactory. (aosp/812913)

Correzioni di bug

  • È stata corretta un'eccezione illegale quando si utilizzavano frammenti nidificati nello stack posteriore (b/119256498)
  • È stato corretto l'arresto anomalo durante l'utilizzo di FragmentScenario.recreate() con un FragmentFactory (aosp/820540)
  • 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, basato sulle API androidx.test:core. Per ulteriori dettagli, consulta la documentazione sui test dei frammenti.

Nuove funzionalità

  • Nuova classe FragmentScenario per testare i frammenti in isolamento.
  • Ora puoi impostare un FragmentFactory su qualsiasi FragmentManager per controllare la modalità di creazione dell'istanza delle nuove istanze Fragment.
  • È stato aggiunto un nuovo delegato della proprietà Kotlin by viewModels() per il recupero di ViewModel da un frammento.
  • Gli eventi di input in attesa (come i clic) vengono ora annullati nell'elemento onStop() di un frammento.

Modifiche alle API

  • Abbiamo espanso in modo significativo le annotazioni con supporto di valori null sulla superficie dell'API Fragment.

Correzioni di bug

  • Correzione di un problema che causava errori delle operazioni frammentate in LiveData (b/77944637)

Problemi noti

  • Non è possibile accedere ai frammenti target dopo che un frammento è stato rimosso da FragmentManager.
  • fragment-testing dipende da androidx.test:core:1.0.0-beta01 anziché da androidx.test:core:1.0.0 corretto.