CINXE.COM

Fragment  |  Jetpack  |  Android Developers

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Android Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#34a853"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/android/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500,600,700|Google+Sans+Text:400,400italic,500,500italic,600,600italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/css/app.css"> <link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/css/dark-theme.css" disabled> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/favicon.svg"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/touchicon-180.png"><link rel="canonical" href="https://developer.android.com/jetpack/androidx/releases/fragment"><link rel="search" type="application/opensearchdescription+xml" title="Android Developers" href="https://developer.android.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developer.android.com/jetpack/androidx/releases/fragment" /><link rel="alternate" hreflang="x-default" href="https://developer.android.com/jetpack/androidx/releases/fragment" /><link rel="alternate" hreflang="ar" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=fr" /><link rel="alternate" hreflang="de" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=de" /><link rel="alternate" hreflang="he" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=he" /><link rel="alternate" hreflang="hi" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=hi" /><link rel="alternate" hreflang="id" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=id" /><link rel="alternate" hreflang="it" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=it" /><link rel="alternate" hreflang="ja" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=th" /><link rel="alternate" hreflang="tr" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developer.android.com/jetpack/androidx/releases/fragment?hl=vi" /><title>Fragment &nbsp;|&nbsp; Jetpack &nbsp;|&nbsp; Android Developers</title> <meta property="og:title" content="Fragment &nbsp;|&nbsp; Jetpack &nbsp;|&nbsp; Android Developers"><meta property="og:url" content="https://developer.android.com/jetpack/androidx/releases/fragment"><meta property="og:image" content="https://developer.android.com/static/images/social/android-developers.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Fragment" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Get started", "item": "https://developer.android.com/get-started/overview" },{ "@type": "ListItem", "position": 2, "name": "Jetpack", "item": "https://developer.android.com/jetpack" },{ "@type": "ListItem", "position": 3, "name": "Fragment", "item": "https://developer.android.com/jetpack/androidx/releases/fragment" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="android-theme" type="article" appearance layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="androidDevelopers" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup-dark-theme.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Android Developers"> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup.svg" class="devsite-site-logo" alt="Android Developers"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab class="devsite-dropdown devsite-dropdown-full devsite-active "> <a href="https://developer.android.com/jetpack" class="devsite-tabs-content gc-analytics-event android-dropdown-tab" track-metadata-eventdetail="https://developer.android.com/jetpack" track-type="nav" track-metadata-position="nav - essentials" track-metadata-module="primary nav" aria-label="Essentials, selected" data-category="Site-Wide Custom Events" data-label="Tab: Essentials" track-name="essentials" > Essentials </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Essentials" track-type="nav" track-metadata-eventdetail="https://developer.android.com/jetpack" track-metadata-position="nav - essentials" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Essentials" track-name="essentials" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column android-dropdown android-dropdown-primary android-dropdown-studio"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Gemini in Android Studio</li> <li class="devsite-nav-description">Your AI development companion for Android development. </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/gemini-in-android" track-type="nav" track-metadata-eventdetail="https://developer.android.com/gemini-in-android" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="gemini in android studio" tooltip class="button button-primary" > <div class="devsite-nav-item-title"> Learn more </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/studio" track-type="nav" track-metadata-eventdetail="https://developer.android.com/studio" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="gemini in android studio" tooltip class="button button-white" > <div class="devsite-nav-item-title"> Get Android Studio </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-launch"> <li class="devsite-nav-title" role="heading" tooltip>Get started</li> <li class="devsite-nav-description">Start by creating your first app. Go deeper with our training courses or explore app development on your own. </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/get-started/overview" track-type="nav" track-metadata-eventdetail="https://developer.android.com/get-started/overview" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get started" tooltip > <div class="devsite-nav-item-title"> Hello world </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/courses" track-type="nav" track-metadata-eventdetail="https://developer.android.com/courses" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get started" tooltip > <div class="devsite-nav-item-title"> Training courses </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/get-started/codelabs" track-type="nav" track-metadata-eventdetail="https://developer.android.com/get-started/codelabs" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get started" tooltip > <div class="devsite-nav-item-title"> Tutorials </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop/ui/compose/adopt" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop/ui/compose/adopt" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get started" tooltip > <div class="devsite-nav-item-title"> Compose for teams </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/kotlin" track-type="nav" track-metadata-eventdetail="https://developer.android.com/kotlin" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get started" tooltip > <div class="devsite-nav-item-title"> Kotlin for Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://play.google.com/console/about/guides/monetize/" track-type="nav" track-metadata-eventdetail="https://play.google.com/console/about/guides/monetize/" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get started" tooltip > <div class="devsite-nav-item-title"> Monetization with Play ↗️ </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-multiple-screens"> <li class="devsite-nav-title" role="heading" tooltip>Extend by device</li> <li class="devsite-nav-description">Build apps that give your users seamless experiences from phones to tablets, watches, headsets, and more. </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/adaptive-apps" track-type="nav" track-metadata-eventdetail="https://developer.android.com/adaptive-apps" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="extend by device" tooltip > <div class="devsite-nav-item-title"> Adaptive apps </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/xr" track-type="nav" track-metadata-eventdetail="https://developer.android.com/xr" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="extend by device" tooltip > <div class="devsite-nav-item-title"> Android XR </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/wear" track-type="nav" track-metadata-eventdetail="https://developer.android.com/wear" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="extend by device" tooltip > <div class="devsite-nav-item-title"> Wear OS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/cars" track-type="nav" track-metadata-eventdetail="https://developer.android.com/cars" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="extend by device" tooltip > <div class="devsite-nav-item-title"> Android for Cars </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/tv" track-type="nav" track-metadata-eventdetail="https://developer.android.com/tv" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="extend by device" tooltip > <div class="devsite-nav-item-title"> Android TV </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/chrome-os" track-type="nav" track-metadata-eventdetail="https://developer.android.com/chrome-os" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="extend by device" tooltip > <div class="devsite-nav-item-title"> ChromeOS </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-platform"> <li class="devsite-nav-title" role="heading" tooltip>Build by category</li> <li class="devsite-nav-description">Learn to build for your use case by following Google&#39;s prescriptive and opinionated guidance. </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/games" track-type="nav" track-metadata-eventdetail="https://developer.android.com/games" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="build by category" tooltip > <div class="devsite-nav-item-title"> Games </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/media" track-type="nav" track-metadata-eventdetail="https://developer.android.com/media" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="build by category" tooltip > <div class="devsite-nav-item-title"> Camera & media </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/social-and-messaging" track-type="nav" track-metadata-eventdetail="https://developer.android.com/social-and-messaging" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="build by category" tooltip > <div class="devsite-nav-item-title"> Social & messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/health-and-fitness" track-type="nav" track-metadata-eventdetail="https://developer.android.com/health-and-fitness" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="build by category" tooltip > <div class="devsite-nav-item-title"> Health & fitness </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/productivity" track-type="nav" track-metadata-eventdetail="https://developer.android.com/productivity" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="build by category" tooltip > <div class="devsite-nav-item-title"> Productivity </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/work/overview" track-type="nav" track-metadata-eventdetail="https://developer.android.com/work/overview" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="build by category" tooltip > <div class="devsite-nav-item-title"> Enterprise apps </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-stars"> <li class="devsite-nav-title" role="heading" tooltip>Get the latest</li> <li class="devsite-nav-description">Stay in touch with the latest releases throughout the year, join our preview programs, and give us your feedback. </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/latest-updates" track-type="nav" track-metadata-eventdetail="https://developer.android.com/latest-updates" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get the latest" tooltip > <div class="devsite-nav-item-title"> Latest updates </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/latest-updates/experimental" track-type="nav" track-metadata-eventdetail="https://developer.android.com/latest-updates/experimental" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get the latest" tooltip > <div class="devsite-nav-item-title"> Experimental updates </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/studio/preview" track-type="nav" track-metadata-eventdetail="https://developer.android.com/studio/preview" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get the latest" tooltip > <div class="devsite-nav-item-title"> Android Studio preview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/jetpack/androidx/versions" track-type="nav" track-metadata-eventdetail="https://developer.android.com/jetpack/androidx/versions" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get the latest" tooltip > <div class="devsite-nav-item-title"> Jetpack & Compose libraries </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/training/wearables/versions/4" track-type="nav" track-metadata-eventdetail="https://developer.android.com/training/wearables/versions/4" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get the latest" tooltip > <div class="devsite-nav-item-title"> Wear OS preview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design-for-safety/privacy-sandbox" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design-for-safety/privacy-sandbox" track-metadata-position="nav - essentials" track-metadata-module="tertiary nav" track-metadata-module_headline="get the latest" tooltip > <div class="devsite-nav-item-title"> Privacy Sandbox </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown devsite-dropdown-full "> <a href="https://developer.android.com/design" class="devsite-tabs-content gc-analytics-event android-dropdown-tab" track-metadata-eventdetail="https://developer.android.com/design" track-type="nav" track-metadata-position="nav - design &amp; plan" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Design &amp; Plan" track-name="design &amp; plan" > Design &amp; Plan </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Design &amp; Plan" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design" track-metadata-position="nav - design &amp; plan" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Design &amp; Plan" track-name="design &amp; plan" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-layout"> <li class="devsite-nav-title" role="heading" tooltip>UI Design</li> <li class="devsite-nav-description">Design a beautiful user interface using Android best practices.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Design for Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui/mobile" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui/mobile" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Mobile </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui/large-screens" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui/large-screens" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Adaptive UI </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui/xr" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui/xr" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Android XR </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui/widget" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui/widget" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Widgets </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui/wear" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui/wear" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Wear OS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/design/ui/tv" track-type="nav" track-metadata-eventdetail="https://developer.android.com/design/ui/tv" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="ui design" tooltip > <div class="devsite-nav-item-title"> Android TV </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-design"> <li class="devsite-nav-title" role="heading" tooltip>Architecture</li> <li class="devsite-nav-description">Design robust, testable, and maintainable app logic and services.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/topic/architecture/intro" track-type="nav" track-metadata-eventdetail="https://developer.android.com/topic/architecture/intro" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="architecture" tooltip > <div class="devsite-nav-item-title"> Introduction </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/topic/libraries/view-binding" track-type="nav" track-metadata-eventdetail="https://developer.android.com/topic/libraries/view-binding" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="architecture" tooltip > <div class="devsite-nav-item-title"> Libraries </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/navigation/navigation-principles" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/navigation/navigation-principles" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="architecture" tooltip > <div class="devsite-nav-item-title"> Navigation </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/topic/modularization" track-type="nav" track-metadata-eventdetail="https://developer.android.com/topic/modularization" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="architecture" tooltip > <div class="devsite-nav-item-title"> Modularization </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/training/testing/fundamentals" track-type="nav" track-metadata-eventdetail="https://developer.android.com/training/testing/fundamentals" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="architecture" tooltip > <div class="devsite-nav-item-title"> Testing </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-vitals"> <li class="devsite-nav-title" role="heading" tooltip>Quality</li> <li class="devsite-nav-description">Plan for app quality and align with Play store guidelines.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/quality" track-type="nav" track-metadata-eventdetail="https://developer.android.com/quality" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="quality" tooltip > <div class="devsite-nav-item-title"> Overview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/quality/core-value" track-type="nav" track-metadata-eventdetail="https://developer.android.com/quality/core-value" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="quality" tooltip > <div class="devsite-nav-item-title"> Core value </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/quality/user-experience" track-type="nav" track-metadata-eventdetail="https://developer.android.com/quality/user-experience" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="quality" tooltip > <div class="devsite-nav-item-title"> User experience </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/ui/accessibility" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/topics/ui/accessibility" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="quality" tooltip > <div class="devsite-nav-item-title"> Accessibility </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/quality/technical" track-type="nav" track-metadata-eventdetail="https://developer.android.com/quality/technical" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="quality" tooltip > <div class="devsite-nav-item-title"> Technical quality </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/quality/privacy-and-security" track-type="nav" track-metadata-eventdetail="https://developer.android.com/quality/privacy-and-security" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="quality" tooltip > <div class="devsite-nav-item-title"> Security </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-security-2"> <li class="devsite-nav-title" role="heading" tooltip>Security</li> <li class="devsite-nav-description">Safeguard users against threats and ensure a secure Android experience.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/security" track-type="nav" track-metadata-eventdetail="https://developer.android.com/security" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="security" tooltip > <div class="devsite-nav-item-title"> Overview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/privacy-and-security/about" track-type="nav" track-metadata-eventdetail="https://developer.android.com/privacy-and-security/about" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="security" tooltip > <div class="devsite-nav-item-title"> Privacy </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/permissions/overview" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/topics/permissions/overview" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="security" tooltip > <div class="devsite-nav-item-title"> Permissions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/identity" track-type="nav" track-metadata-eventdetail="https://developer.android.com/identity" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="security" tooltip > <div class="devsite-nav-item-title"> Identity </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/security/fraud-prevention" track-type="nav" track-metadata-eventdetail="https://developer.android.com/security/fraud-prevention" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="security" tooltip > <div class="devsite-nav-item-title"> Fraud prevention </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-earth"> <li class="devsite-nav-title" role="heading" tooltip>Build for Billions</li> <li class="devsite-nav-description">Create the best experience for entry-level devices</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/build-for-billions" track-type="nav" track-metadata-eventdetail="https://developer.android.com/build-for-billions" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="build for billions" tooltip > <div class="devsite-nav-item-title"> Overview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/docs/quality-guidelines/build-for-billions" track-type="nav" track-metadata-eventdetail="https://developer.android.com/docs/quality-guidelines/build-for-billions" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="build for billions" tooltip > <div class="devsite-nav-item-title"> About new markets </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/androidgo" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/topics/androidgo" track-metadata-position="nav - design &amp; plan" track-metadata-module="tertiary nav" track-metadata-module_headline="build for billions" tooltip > <div class="devsite-nav-item-title"> Android (Go edition) </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown devsite-dropdown-full "> <a href="https://developer.android.com/develop" class="devsite-tabs-content gc-analytics-event android-dropdown-tab" track-metadata-eventdetail="https://developer.android.com/develop" track-type="nav" track-metadata-position="nav - develop" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Develop" track-name="develop" > Develop </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Develop" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop" track-metadata-position="nav - develop" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Develop" track-name="develop" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column android-dropdown android-dropdown-primary android-dropdown-ai"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Build AI experiences</li> <li class="devsite-nav-description">Build AI-powered Android apps with Gemini APIs and more. </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/ai" track-type="nav" track-metadata-eventdetail="https://developer.android.com/ai" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="build ai experiences" tooltip class="button button-primary" > <div class="devsite-nav-item-title"> Get started </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-flag"> <li class="devsite-nav-title" role="heading" tooltip>Core areas</li> <li class="devsite-nav-description">Get the samples and docs for the features you need.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/samples" track-type="nav" track-metadata-eventdetail="https://developer.android.com/samples" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="core areas" tooltip > <div class="devsite-nav-item-title"> Samples </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop/ui" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop/ui" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="core areas" tooltip > <div class="devsite-nav-item-title"> User interfaces </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop/background-work" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop/background-work" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="core areas" tooltip > <div class="devsite-nav-item-title"> Background work </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/data" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/topics/data" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="core areas" tooltip > <div class="devsite-nav-item-title"> Data and files </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop/connectivity" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop/connectivity" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="core areas" tooltip > <div class="devsite-nav-item-title"> Connectivity </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop#core-areas" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop#core-areas" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="core areas" tooltip > <div class="devsite-nav-item-title"> All core areas ⤵️ </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-tools-2"> <li class="devsite-nav-title" role="heading" tooltip>Tools and workflow</li> <li class="devsite-nav-description">Use the IDE to write and build your app, or create your own pipeline.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/studio/write" track-type="nav" track-metadata-eventdetail="https://developer.android.com/studio/write" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="tools and workflow" tooltip > <div class="devsite-nav-item-title"> Write and debug code </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/build/gradle-build-overview" track-type="nav" track-metadata-eventdetail="https://developer.android.com/build/gradle-build-overview" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="tools and workflow" tooltip > <div class="devsite-nav-item-title"> Build projects </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/training/testing" track-type="nav" track-metadata-eventdetail="https://developer.android.com/training/testing" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="tools and workflow" tooltip > <div class="devsite-nav-item-title"> Test your app </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/topic/performance/overview" track-type="nav" track-metadata-eventdetail="https://developer.android.com/topic/performance/overview" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="tools and workflow" tooltip > <div class="devsite-nav-item-title"> Performance </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/tools" track-type="nav" track-metadata-eventdetail="https://developer.android.com/tools" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="tools and workflow" tooltip > <div class="devsite-nav-item-title"> Command-line tools </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/reference/tools/gradle-api" track-type="nav" track-metadata-eventdetail="https://developer.android.com/reference/tools/gradle-api" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="tools and workflow" tooltip > <div class="devsite-nav-item-title"> Gradle plugin API </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-multiple-screens"> <li class="devsite-nav-title" role="heading" tooltip>Device tech</li> <li class="devsite-nav-description">Write code for form factors. Connect devices and share data.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/large-screens/get-started-with-large-screens" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/topics/large-screens/get-started-with-large-screens" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> Adaptive UI </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/training/wearables" track-type="nav" track-metadata-eventdetail="https://developer.android.com/training/wearables" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> Wear OS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop/xr" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop/xr" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> Android XR </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/health-and-fitness/guides" track-type="nav" track-metadata-eventdetail="https://developer.android.com/health-and-fitness/guides" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> Android Health </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/training/cars" track-type="nav" track-metadata-eventdetail="https://developer.android.com/training/cars" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> Android for Cars </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/training/tv" track-type="nav" track-metadata-eventdetail="https://developer.android.com/training/tv" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> Android TV </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/develop#devices" track-type="nav" track-metadata-eventdetail="https://developer.android.com/develop#devices" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="device tech" tooltip > <div class="devsite-nav-item-title"> All devices ⤵️ </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column android-dropdown"> <ul class="devsite-tabs-dropdown-section android-dropdown-section-icon android-dropdown-section-icon-core-library"> <li class="devsite-nav-title" role="heading" tooltip>Libraries</li> <li class="devsite-nav-description">Browse API reference documentation with all the details.</li> <li class="devsite-nav-item"> <a href="https://developer.android.com/reference/packages" track-type="nav" track-metadata-eventdetail="https://developer.android.com/reference/packages" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> Android platform </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/jetpack/androidx/explorer" track-type="nav" track-metadata-eventdetail="https://developer.android.com/jetpack/androidx/explorer" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> Jetpack libraries </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/jetpack/androidx/releases/compose" track-type="nav" track-metadata-eventdetail="https://developer.android.com/jetpack/androidx/releases/compose" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> Compose libraries </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/android/reference/packages" track-type="nav" track-metadata-eventdetail="https://developers.google.com/android/reference/packages" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> Google Play services ↗️ </div> </a> </li> <li class="devsite-nav-item"> <a href="https://play.google.com/sdks" track-type="nav" track-metadata-eventdetail="https://play.google.com/sdks" track-metadata-position="nav - develop" track-metadata-module="tertiary nav" track-metadata-module_headline="libraries" tooltip > <div class="devsite-nav-item-title"> Google Play SDK index ↗️ </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://developer.android.com/distribute" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.android.com/distribute" track-type="nav" track-metadata-position="nav - google play" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Google Play" track-name="google play" > Google Play </a> </tab> <tab > <a href="https://developer.android.com/community" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.android.com/community" track-type="nav" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > Community </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Jetpack" tenant-name="Android Developers" > <form class="devsite-search-form" action="https://developer.android.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-appearance-selector></devsite-appearance-selector> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="https://developer.android.com/studio" data-category="Site-Wide Custom Events" data-label="Site header link" > Android Studio </a> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" aria-label="Lower header breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developer.android.com/get-started/overview" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Get started" > Get started </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developer.android.com/jetpack" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Jetpack" > Jetpack </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://developer.android.com/jetpack" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.android.com/jetpack" track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab > <a href="https://developer.android.com/jetpack/getting-started" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.android.com/jetpack/getting-started" track-type="nav" track-metadata-position="nav - guides" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" > Guides </a> </tab> <tab > <a href="https://developer.android.com/jetpack/samples" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.android.com/jetpack/samples" track-type="nav" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" > Samples </a> </tab> <tab class="devsite-active"> <a href="https://developer.android.com/jetpack/androidx/explorer" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developer.android.com/jetpack/androidx/explorer" track-type="nav" track-metadata-position="nav - libraries" track-metadata-module="primary nav" aria-label="Libraries, selected" data-category="Site-Wide Custom Events" data-label="Tab: Libraries" track-name="libraries" > Libraries </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="androidDevelopers" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup-dark-theme.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Android Developers"> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup.svg" class="devsite-site-logo" alt="Android Developers"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/jetpack" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Essentials" track-name="essentials" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Essentials" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Essentials </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Essentials" track-name="essentials" > <span class="devsite-nav-text" tooltip menu="Essentials"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Essentials"> </span> </span> </li> </ul> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/jetpack" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/jetpack/getting-started" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guides" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Guides </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/jetpack/samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> <li class="devsite-nav-item"> <a href="/jetpack/androidx/explorer" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Libraries" track-name="libraries" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Libraries" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Libraries </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/design" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Design &amp; Plan" track-name="design &amp; plan" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Design &amp; Plan" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Design &amp; Plan </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Design &amp; Plan" track-name="design &amp; plan" > <span class="devsite-nav-text" tooltip menu="Design &amp; Plan"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Design &amp; Plan"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/develop" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Develop" track-name="develop" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Develop" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Develop </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Develop" track-name="develop" > <span class="devsite-nav-text" tooltip menu="Develop"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Develop"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/distribute" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Google Play" track-name="google play" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Play" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Play </span> </a> </li> <li class="devsite-nav-item"> <a href="/community" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Community </span> </a> </li> <li class="devsite-nav-item"> <a href="/studio" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android Studio" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android Studio </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/jetpack/androidx/explorer" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/explorer" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/explorer" ><span class="devsite-nav-text" tooltip>Explore the libraries</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Library Releases</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/jetpack/androidx/versions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/versions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/versions" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/versions/all-channel" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/versions/all-channel" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/versions/all-channel" ><span class="devsite-nav-text" tooltip>All Channels</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/versions/stable-channel" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/versions/stable-channel" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/versions/stable-channel" ><span class="devsite-nav-text" tooltip>Stable Channel</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/versions/rc-channel" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/versions/rc-channel" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/versions/rc-channel" ><span class="devsite-nav-text" tooltip>RC Channel</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/versions/beta-channel" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/versions/beta-channel" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/versions/beta-channel" ><span class="devsite-nav-text" tooltip>Beta Channel</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/versions/alpha-channel" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/versions/alpha-channel" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/versions/alpha-channel" ><span class="devsite-nav-text" tooltip>Alpha Channel</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Release Notes</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/activity" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/activity" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/activity" ><span class="devsite-nav-text" tooltip>androidx.activity</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/ads" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/ads" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/ads" ><span class="devsite-nav-text" tooltip>androidx.ads</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/annotation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/annotation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/annotation" ><span class="devsite-nav-text" tooltip>androidx.annotation</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/appcompat" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/appcompat" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/appcompat" ><span class="devsite-nav-text" tooltip>androidx.appcompat</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/appsearch" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/appsearch" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/appsearch" ><span class="devsite-nav-text" tooltip>androidx.appsearch</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/arch-core" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/arch-core" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/arch-core" ><span class="devsite-nav-text" tooltip>androidx.arch.core</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/asynclayoutinflater" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/asynclayoutinflater" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/asynclayoutinflater" ><span class="devsite-nav-text" tooltip>androidx.asynclayoutinflater</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/autofill" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/autofill" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/autofill" ><span class="devsite-nav-text" tooltip>androidx.autofill</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/benchmark" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/benchmark" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/benchmark" ><span class="devsite-nav-text" tooltip>androidx.benchmark</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/biometric" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/biometric" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/biometric" ><span class="devsite-nav-text" tooltip>androidx.biometric</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/bluetooth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/bluetooth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/bluetooth" ><span class="devsite-nav-text" tooltip>androidx.bluetooth</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/browser" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/browser" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/browser" ><span class="devsite-nav-text" tooltip>androidx.browser</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/camera" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/camera" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/camera" ><span class="devsite-nav-text" tooltip>androidx.camera</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/camera-media3" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/camera-media3" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/camera-media3" ><span class="devsite-nav-text" tooltip>androidx.camera.media3</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/camera-viewfinder" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/camera-viewfinder" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/camera-viewfinder" ><span class="devsite-nav-text" tooltip>androidx.camera.viewfinder</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/car" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/car" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/car" ><span class="devsite-nav-text" tooltip>androidx.car</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/car-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/car-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/car-app" ><span class="devsite-nav-text" tooltip>androidx.car.app</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/cardview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/cardview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/cardview" ><span class="devsite-nav-text" tooltip>androidx.cardview</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/collection" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/collection" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/collection" ><span class="devsite-nav-text" tooltip>androidx.collection</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose" ><span class="devsite-nav-text" tooltip>androidx.compose</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-animation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-animation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-animation" ><span class="devsite-nav-text" tooltip>androidx.compose.animation</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-compiler" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-compiler" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-compiler" ><span class="devsite-nav-text" tooltip>androidx.compose.compiler</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-foundation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-foundation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-foundation" ><span class="devsite-nav-text" tooltip>androidx.compose.foundation</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-material" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-material" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-material" ><span class="devsite-nav-text" tooltip>androidx.compose.material</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-material3" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-material3" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-material3" ><span class="devsite-nav-text" tooltip>androidx.compose.material3</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-material3-adaptive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-material3-adaptive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-material3-adaptive" ><span class="devsite-nav-text" tooltip>androidx.compose.material3.adaptive</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-runtime" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-runtime" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-runtime" ><span class="devsite-nav-text" tooltip>androidx.compose.runtime</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-ui" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-ui" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-ui" ><span class="devsite-nav-text" tooltip>androidx.compose.ui</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/concurrent" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/concurrent" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/concurrent" ><span class="devsite-nav-text" tooltip>androidx.concurrent</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/constraintlayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/constraintlayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/constraintlayout" ><span class="devsite-nav-text" tooltip>androidx.constraintlayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/contentpager" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/contentpager" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/contentpager" ><span class="devsite-nav-text" tooltip>androidx.contentpager</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/coordinatorlayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/coordinatorlayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/coordinatorlayout" ><span class="devsite-nav-text" tooltip>androidx.coordinatorlayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/core" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/core" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/core" ><span class="devsite-nav-text" tooltip>androidx.core</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/core-uwb" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/core-uwb" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/core-uwb" ><span class="devsite-nav-text" tooltip>androidx.core.uwb</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/credentials" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/credentials" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/credentials" ><span class="devsite-nav-text" tooltip>androidx.credentials</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/credentials/registry" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/credentials/registry" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/credentials/registry" ><span class="devsite-nav-text" tooltip>androidx.credentials.registry</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/cursoradapter" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/cursoradapter" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/cursoradapter" ><span class="devsite-nav-text" tooltip>androidx.cursoradapter</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/customview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/customview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/customview" ><span class="devsite-nav-text" tooltip>androidx.customview</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/databinding" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/databinding" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/databinding" ><span class="devsite-nav-text" tooltip>androidx.databinding</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/datastore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/datastore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/datastore" ><span class="devsite-nav-text" tooltip>androidx.datastore</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/documentfile" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/documentfile" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/documentfile" ><span class="devsite-nav-text" tooltip>androidx.documentfile</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/draganddrop" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/draganddrop" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/draganddrop" ><span class="devsite-nav-text" tooltip>androidx.draganddrop</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/drawerlayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/drawerlayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/drawerlayout" ><span class="devsite-nav-text" tooltip>androidx.drawerlayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/dynamicanimation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/dynamicanimation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/dynamicanimation" ><span class="devsite-nav-text" tooltip>androidx.dynamicanimation</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/emoji" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/emoji" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/emoji" ><span class="devsite-nav-text" tooltip>androidx.emoji</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/emoji2" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/emoji2" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/emoji2" ><span class="devsite-nav-text" tooltip>androidx.emoji2</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/enterprise" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/enterprise" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/enterprise" ><span class="devsite-nav-text" tooltip>androidx.enterprise</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/exifinterface" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/exifinterface" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/exifinterface" ><span class="devsite-nav-text" tooltip>androidx.exifinterface</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/fragment" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/fragment" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/fragment" ><span class="devsite-nav-text" tooltip>androidx.fragment</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/games" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/games" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/games" ><span class="devsite-nav-text" tooltip>androidx.games</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/glance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/glance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/glance" ><span class="devsite-nav-text" tooltip>androidx.glance</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/graphics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/graphics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/graphics" ><span class="devsite-nav-text" tooltip>androidx.graphics</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/gridlayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/gridlayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/gridlayout" ><span class="devsite-nav-text" tooltip>androidx.gridlayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/health" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/health" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/health" ><span class="devsite-nav-text" tooltip>androidx.health</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/health-connect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/health-connect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/health-connect" ><span class="devsite-nav-text" tooltip>androidx.health.connect</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/heifwriter" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/heifwriter" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/heifwriter" ><span class="devsite-nav-text" tooltip>androidx.heifwriter</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/hilt" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/hilt" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/hilt" ><span class="devsite-nav-text" tooltip>androidx.hilt</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/ink" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/ink" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/ink" ><span class="devsite-nav-text" tooltip>androidx.ink</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/input" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/input" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/input" ><span class="devsite-nav-text" tooltip>androidx.input</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/interpolator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/interpolator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/interpolator" ><span class="devsite-nav-text" tooltip>androidx.interpolator</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/javascriptengine" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/javascriptengine" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/javascriptengine" ><span class="devsite-nav-text" tooltip>androidx.javascriptengine</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/leanback" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/leanback" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/leanback" ><span class="devsite-nav-text" tooltip>androidx.leanback</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/legacy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/legacy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/legacy" ><span class="devsite-nav-text" tooltip>androidx.legacy</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/lifecycle" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/lifecycle" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/lifecycle" ><span class="devsite-nav-text" tooltip>androidx.lifecycle</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/lint" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/lint" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/lint" ><span class="devsite-nav-text" tooltip>androidx.lint</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/loader" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/loader" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/loader" ><span class="devsite-nav-text" tooltip>androidx.loader</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/localbroadcastmanager" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/localbroadcastmanager" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/localbroadcastmanager" ><span class="devsite-nav-text" tooltip>androidx.localbroadcastmanager</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/media" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/media" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/media" ><span class="devsite-nav-text" tooltip>androidx.media</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/media2" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/media2" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/media2" ><span class="devsite-nav-text" tooltip>androidx.media2</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/media3" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/media3" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/media3" ><span class="devsite-nav-text" tooltip>androidx.media3</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/mediarouter" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/mediarouter" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/mediarouter" ><span class="devsite-nav-text" tooltip>androidx.mediarouter</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/multidex" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/multidex" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/multidex" ><span class="devsite-nav-text" tooltip>androidx.multidex</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/metrics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/metrics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/metrics" ><span class="devsite-nav-text" tooltip>androidx.metrics</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/navigation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/navigation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/navigation" ><span class="devsite-nav-text" tooltip>androidx.navigation</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/paging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/paging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/paging" ><span class="devsite-nav-text" tooltip>androidx.paging</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/palette" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/palette" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/palette" ><span class="devsite-nav-text" tooltip>androidx.palette</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/pdf" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/pdf" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/pdf" ><span class="devsite-nav-text" tooltip>androidx.pdf</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/percentlayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/percentlayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/percentlayout" ><span class="devsite-nav-text" tooltip>androidx.percentlayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/performance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/performance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/performance" ><span class="devsite-nav-text" tooltip>androidx.performance</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/preference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/preference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/preference" ><span class="devsite-nav-text" tooltip>androidx.preference</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/print" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/print" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/print" ><span class="devsite-nav-text" tooltip>androidx.print</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/privacysandbox-activity" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/privacysandbox-activity" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/privacysandbox-activity" ><span class="devsite-nav-text" tooltip>androidx.privacysandbox.activity</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/privacysandbox-ads" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/privacysandbox-ads" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/privacysandbox-ads" ><span class="devsite-nav-text" tooltip>androidx.privacysandbox.ads</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/privacysandbox-plugins" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/privacysandbox-plugins" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/privacysandbox-plugins" ><span class="devsite-nav-text" tooltip>androidx.privacysandbox.plugins</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/privacysandbox-sdkruntime" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/privacysandbox-sdkruntime" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/privacysandbox-sdkruntime" ><span class="devsite-nav-text" tooltip>androidx.privacysandbox.sdkruntime</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/privacysandbox-tools" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/privacysandbox-tools" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/privacysandbox-tools" ><span class="devsite-nav-text" tooltip>androidx.privacysandbox.tools</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/privacysandbox-ui" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/privacysandbox-ui" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/privacysandbox-ui" ><span class="devsite-nav-text" tooltip>androidx.privacysandbox.ui</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/profileinstaller" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/profileinstaller" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/profileinstaller" ><span class="devsite-nav-text" tooltip>androidx.profileinstaller</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/recommendation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/recommendation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/recommendation" ><span class="devsite-nav-text" tooltip>androidx.recommendation</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/recyclerview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/recyclerview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/recyclerview" ><span class="devsite-nav-text" tooltip>androidx.recyclerview</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/remotecallback" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/remotecallback" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/remotecallback" ><span class="devsite-nav-text" tooltip>androidx.remotecallback</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/resourceinspection" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/resourceinspection" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/resourceinspection" ><span class="devsite-nav-text" tooltip>androidx.resourceinspection</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/room" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/room" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/room" ><span class="devsite-nav-text" tooltip>androidx.room</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/savedstate" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/savedstate" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/savedstate" ><span class="devsite-nav-text" tooltip>androidx.savedstate</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/security" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/security" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/security" ><span class="devsite-nav-text" tooltip>androidx.security</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/sharetarget" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/sharetarget" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/sharetarget" ><span class="devsite-nav-text" tooltip>androidx.sharetarget</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/slice" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/slice" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/slice" ><span class="devsite-nav-text" tooltip>androidx.slice</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/slidingpanelayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/slidingpanelayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/slidingpanelayout" ><span class="devsite-nav-text" tooltip>androidx.slidingpanelayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/sqlite" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/sqlite" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/sqlite" ><span class="devsite-nav-text" tooltip>androidx.sqlite</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/startup" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/startup" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/startup" ><span class="devsite-nav-text" tooltip>androidx.startup</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/swiperefreshlayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/swiperefreshlayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/swiperefreshlayout" ><span class="devsite-nav-text" tooltip>androidx.swiperefreshlayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/test" ><span class="devsite-nav-text" tooltip>androidx.test</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/test-uiautomator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/test-uiautomator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/test-uiautomator" ><span class="devsite-nav-text" tooltip>androidx.test.uiautomator</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/textclassifier" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/textclassifier" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/textclassifier" ><span class="devsite-nav-text" tooltip>androidx.textclassifier</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/tracing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/tracing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/tracing" ><span class="devsite-nav-text" tooltip>androidx.tracing</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/transition" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/transition" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/transition" ><span class="devsite-nav-text" tooltip>androidx.transition</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/tv" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/tv" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/tv" ><span class="devsite-nav-text" tooltip>androidx.tv</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/tvprovider" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/tvprovider" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/tvprovider" ><span class="devsite-nav-text" tooltip>androidx.tvprovider</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/xr-arcore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/xr-arcore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/xr-arcore" ><span class="devsite-nav-text" tooltip>androidx.xr.arcore</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/xr-compose" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/xr-compose" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/xr-compose" ><span class="devsite-nav-text" tooltip>androidx.xr.compose</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/xr-compose-material3" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/xr-compose-material3" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/xr-compose-material3" ><span class="devsite-nav-text" tooltip>androidx.xr.compose.material3</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/xr-runtime" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/xr-runtime" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/xr-runtime" ><span class="devsite-nav-text" tooltip>androidx.xr.runtime</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/xr-scenecore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/xr-scenecore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/xr-scenecore" ><span class="devsite-nav-text" tooltip>androidx.xr.scenecore</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/vectordrawable" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/vectordrawable" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/vectordrawable" ><span class="devsite-nav-text" tooltip>androidx.vectordrawable</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/versionedparcelable" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/versionedparcelable" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/versionedparcelable" ><span class="devsite-nav-text" tooltip>androidx.versionedparcelable</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/viewpager" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/viewpager" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/viewpager" ><span class="devsite-nav-text" tooltip>androidx.viewpager</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/viewpager2" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/viewpager2" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/viewpager2" ><span class="devsite-nav-text" tooltip>androidx.viewpager2</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/wear" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/wear" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/wear" ><span class="devsite-nav-text" tooltip>androidx.wear</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/wear-compose" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/wear-compose" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/wear-compose" ><span class="devsite-nav-text" tooltip>androidx.wear.compose</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/wear-protolayout" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/wear-protolayout" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/wear-protolayout" ><span class="devsite-nav-text" tooltip>androidx.wear.protolayout</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/wear-tiles" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/wear-tiles" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/wear-tiles" ><span class="devsite-nav-text" tooltip>androidx.wear.tiles</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/wear-watchface" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/wear-watchface" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/wear-watchface" ><span class="devsite-nav-text" tooltip>androidx.wear.watchface</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/webkit" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/webkit" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/webkit" ><span class="devsite-nav-text" tooltip>androidx.webkit</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/window" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/window" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/window" ><span class="devsite-nav-text" tooltip>androidx.window</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/window-extensions-core" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/window-extensions-core" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/window-extensions-core" ><span class="devsite-nav-text" tooltip>androidx.window.extensions.core</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/work" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/work" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/work" ><span class="devsite-nav-text" tooltip>androidx.work</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/jetifier" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/jetifier" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/jetifier" ><span class="devsite-nav-text" tooltip>tools.build.jetifier</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Release Note Archive</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/archive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/archive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/archive" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/archive/test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/archive/test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/archive/test" ><span class="devsite-nav-text" tooltip>Test</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/archive/arch" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/archive/arch" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/archive/arch" ><span class="devsite-nav-text" tooltip>Architecture Components</span></a></li><li class="devsite-nav-item"><a href="/jetpack/androidx/releases/archive/androidx" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/archive/androidx" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/archive/androidx" ><span class="devsite-nav-text" tooltip>AndroidX</span></a></li></ul></div></li> <li class="devsite-nav-item"><a href="/jetpack/androidx/compose-roadmap" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/compose-roadmap" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/compose-roadmap" ><span class="devsite-nav-text" tooltip>Jetpack Compose Roadmap</span></a></li> <li class="devsite-nav-item"><a href="/jetpack/androidx/releases/compose-kotlin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /jetpack/androidx/releases/compose-kotlin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/jetpack/androidx/releases/compose-kotlin" ><span class="devsite-nav-text" tooltip>Jetpack Compose Kotlin Compatibility</span></a></li> </ul> <ul class="devsite-nav-list" menu="Essentials" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Gemini in Android Studio </span> </span> </li> <li class="devsite-nav-item"> <a href="/gemini-in-android" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn more" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn more </span> </a> </li> <li class="devsite-nav-item"> <a href="/studio" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Get Android Studio" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Get Android Studio </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Get started </span> </span> </li> <li class="devsite-nav-item"> <a href="/get-started/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Hello world" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Hello world </span> </a> </li> <li class="devsite-nav-item"> <a href="/courses" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Training courses" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Training courses </span> </a> </li> <li class="devsite-nav-item"> <a href="/get-started/codelabs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Tutorials" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Tutorials </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop/ui/compose/adopt" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Compose for teams" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Compose for teams </span> </a> </li> <li class="devsite-nav-item"> <a href="/kotlin" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Kotlin for Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Kotlin for Android </span> </a> </li> <li class="devsite-nav-item"> <a href="https://play.google.com/console/about/guides/monetize/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Monetization with Play ↗️" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Monetization with Play ↗️ </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Extend by device </span> </span> </li> <li class="devsite-nav-item"> <a href="/adaptive-apps" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Adaptive apps" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Adaptive apps </span> </a> </li> <li class="devsite-nav-item"> <a href="/xr" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android XR" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android XR </span> </a> </li> <li class="devsite-nav-item"> <a href="/wear" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Wear OS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Wear OS </span> </a> </li> <li class="devsite-nav-item"> <a href="/cars" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android for Cars" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android for Cars </span> </a> </li> <li class="devsite-nav-item"> <a href="/tv" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android TV" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android TV </span> </a> </li> <li class="devsite-nav-item"> <a href="/chrome-os" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: ChromeOS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > ChromeOS </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build by category </span> </span> </li> <li class="devsite-nav-item"> <a href="/games" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Games" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Games </span> </a> </li> <li class="devsite-nav-item"> <a href="/media" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Camera &amp; media" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Camera &amp; media </span> </a> </li> <li class="devsite-nav-item"> <a href="/social-and-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Social &amp; messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Social &amp; messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/health-and-fitness" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Health &amp; fitness" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Health &amp; fitness </span> </a> </li> <li class="devsite-nav-item"> <a href="/productivity" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Productivity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Productivity </span> </a> </li> <li class="devsite-nav-item"> <a href="/work/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Enterprise apps" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Enterprise apps </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Get the latest </span> </span> </li> <li class="devsite-nav-item"> <a href="/latest-updates" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Latest updates" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Latest updates </span> </a> </li> <li class="devsite-nav-item"> <a href="/latest-updates/experimental" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Experimental updates" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Experimental updates </span> </a> </li> <li class="devsite-nav-item"> <a href="/studio/preview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android Studio preview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android Studio preview </span> </a> </li> <li class="devsite-nav-item"> <a href="/jetpack/androidx/versions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Jetpack &amp; Compose libraries" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Jetpack &amp; Compose libraries </span> </a> </li> <li class="devsite-nav-item"> <a href="/training/wearables/versions/4" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Wear OS preview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Wear OS preview </span> </a> </li> <li class="devsite-nav-item"> <a href="/design-for-safety/privacy-sandbox" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Privacy Sandbox" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Privacy Sandbox </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Design &amp; Plan" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > UI Design </span> </span> </li> <li class="devsite-nav-item"> <a href="/design/ui" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Design for Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Design for Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/design/ui/mobile" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Mobile" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Mobile </span> </a> </li> <li class="devsite-nav-item"> <a href="/design/ui/large-screens" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Adaptive UI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Adaptive UI </span> </a> </li> <li class="devsite-nav-item"> <a href="/design/ui/xr" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android XR" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android XR </span> </a> </li> <li class="devsite-nav-item"> <a href="/design/ui/widget" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Widgets" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Widgets </span> </a> </li> <li class="devsite-nav-item"> <a href="/design/ui/wear" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Wear OS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Wear OS </span> </a> </li> <li class="devsite-nav-item"> <a href="/design/ui/tv" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android TV" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android TV </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Architecture </span> </span> </li> <li class="devsite-nav-item"> <a href="/topic/architecture/intro" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Introduction" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Introduction </span> </a> </li> <li class="devsite-nav-item"> <a href="/topic/libraries/view-binding" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Libraries" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Libraries </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide/navigation/navigation-principles" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Navigation" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Navigation </span> </a> </li> <li class="devsite-nav-item"> <a href="/topic/modularization" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Modularization" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Modularization </span> </a> </li> <li class="devsite-nav-item"> <a href="/training/testing/fundamentals" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Testing" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Testing </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Quality </span> </span> </li> <li class="devsite-nav-item"> <a href="/quality" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/quality/core-value" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Core value" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Core value </span> </a> </li> <li class="devsite-nav-item"> <a href="/quality/user-experience" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: User experience" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > User experience </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide/topics/ui/accessibility" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Accessibility" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Accessibility </span> </a> </li> <li class="devsite-nav-item"> <a href="/quality/technical" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Technical quality" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Technical quality </span> </a> </li> <li class="devsite-nav-item"> <a href="/quality/privacy-and-security" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Security" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Security </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Security </span> </span> </li> <li class="devsite-nav-item"> <a href="/security" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/privacy-and-security/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Privacy" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Privacy </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide/topics/permissions/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Permissions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Permissions </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Identity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Identity </span> </a> </li> <li class="devsite-nav-item"> <a href="/security/fraud-prevention" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Fraud prevention" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Fraud prevention </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build for Billions </span> </span> </li> <li class="devsite-nav-item"> <a href="/build-for-billions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/quality-guidelines/build-for-billions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: About new markets" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > About new markets </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide/topics/androidgo" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android (Go edition)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android (Go edition) </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Develop" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build AI experiences </span> </span> </li> <li class="devsite-nav-item"> <a href="/ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Get started" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Get started </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Core areas </span> </span> </li> <li class="devsite-nav-item"> <a href="/samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop/ui" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: User interfaces" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > User interfaces </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop/background-work" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Background work" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Background work </span> </a> </li> <li class="devsite-nav-item"> <a href="/guide/topics/data" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Data and files" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Data and files </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop/connectivity" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Connectivity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Connectivity </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop#core-areas" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: All core areas ⤵️" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > All core areas ⤵️ </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Tools and workflow </span> </span> </li> <li class="devsite-nav-item"> <a href="/studio/write" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Write and debug code" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Write and debug code </span> </a> </li> <li class="devsite-nav-item"> <a href="/build/gradle-build-overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build projects" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Build projects </span> </a> </li> <li class="devsite-nav-item"> <a href="/training/testing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Test your app" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Test your app </span> </a> </li> <li class="devsite-nav-item"> <a href="/topic/performance/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance </span> </a> </li> <li class="devsite-nav-item"> <a href="/tools" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Command-line tools" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Command-line tools </span> </a> </li> <li class="devsite-nav-item"> <a href="/reference/tools/gradle-api" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Gradle plugin API" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Gradle plugin API </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Device tech </span> </span> </li> <li class="devsite-nav-item"> <a href="/guide/topics/large-screens/get-started-with-large-screens" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Adaptive UI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Adaptive UI </span> </a> </li> <li class="devsite-nav-item"> <a href="/training/wearables" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Wear OS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Wear OS </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop/xr" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android XR" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android XR </span> </a> </li> <li class="devsite-nav-item"> <a href="/health-and-fitness/guides" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android Health" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android Health </span> </a> </li> <li class="devsite-nav-item"> <a href="/training/cars" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android for Cars" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android for Cars </span> </a> </li> <li class="devsite-nav-item"> <a href="/training/tv" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android TV" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android TV </span> </a> </li> <li class="devsite-nav-item"> <a href="/develop#devices" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: All devices ⤵️" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > All devices ⤵️ </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Libraries </span> </span> </li> <li class="devsite-nav-item"> <a href="/reference/packages" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android platform" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android platform </span> </a> </li> <li class="devsite-nav-item"> <a href="/jetpack/androidx/explorer" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Jetpack libraries" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Jetpack libraries </span> </a> </li> <li class="devsite-nav-item"> <a href="/jetpack/androidx/releases/compose" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Compose libraries" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Compose libraries </span> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/android/reference/packages" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Play services ↗️" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Play services ↗️ </span> </a> </li> <li class="devsite-nav-item"> <a href="https://play.google.com/sdks" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Play SDK index ↗️" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Play SDK index ↗️ </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developer.android.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Android Developers" > Android Developers </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developer.android.com/get-started/overview" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Get started" > Get started </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developer.android.com/jetpack" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Jetpack" > Jetpack </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developer.android.com/jetpack/androidx/explorer" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Libraries </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <devsite-recommendations-dropdown class="nocontent"></devsite-recommendations-dropdown> <div class="devsite-article-body clearfix devsite-no-page-title"> <h1 class="devsite-page-title" style="width:50%" id="fragment" data-text="Fragment" tabindex="-1">Fragment</h1> <div style="align:right; text-align:right; padding-bottom:21px; margin-top:-45px; border-bottom:1px solid black;"> <a href="/guide/components/fragments">User Guide</a>&nbsp;&nbsp;<a href="https://github.com/android/user-interface-samples">Code Sample</a> </div> <div style="float:left; font-size:medium; margin-bottom:5px; margin-top:10px" class="nocontent"> <div style="text-align:left; font-size:90%; padding-right:30px; margin-right:10px; margin-bottom:10px;"> API Reference<br> <a href="/reference/kotlin/androidx/fragment/app/package-summary">androidx.fragment.app</a><br> <a href="/reference/kotlin/androidx/fragment/app/testing/package-summary">androidx.fragment.app.testing</a><br> </div> </div> <div style="text-align:left; padding-left:10px; margin-left:10px; margin-top:15px; margin-bottom:10px;"> Segment your app into multiple, independent screens that are hosted within an Activity. </div> <div style="clear:both"></div> <table style="width:100%"> <tr> <th style="width:15%">Latest Update</th> <th style="width:15%">Stable Release</th> <th style="width:15%">Release Candidate</th> <th style="width:15%">Beta Release</th> <th style="width:15%">Alpha Release</th></tr> <tr> <td>February 12, 2025</td> <td><a href="/jetpack/androidx/releases/fragment#1.8.6">1.8.6</a></td> <td>-</td> <td>-</td> <td>-</td> </tr> </table> <h2 id="declaring_dependencies" data-text="Declaring dependencies" tabindex="-1">Declaring dependencies</h2> <p>To add a dependency on Fragment, you must add the Google Maven repository to your project. Read <a href="/studio/build/dependencies#google-maven">Google&#39;s Maven repository</a> for more information.</p> <p>Add the dependencies for the artifacts you need in the <code translate="no" dir="ltr">build.gradle</code> file for your app or module:</p> <div> <div class="ds-selector-tabs"><section><h3 id="groovy" data-text="Groovy" tabindex="-1">Groovy</h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Groovy"><span class="devsite-syntax-n">dependencies</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">fragment_version</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"1.8.6"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Java language implementation</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implementation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"androidx.fragment:fragment:$fragment_version"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Kotlin</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implementation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"androidx.fragment:fragment-ktx:$fragment_version"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Compose</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implementation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"androidx.fragment:fragment-compose:$fragment_version"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Testing Fragments in Isolation</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">debugImplementation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"androidx.fragment:fragment-testing-manifest:$fragment_version"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">androidTestImplementation</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"androidx.fragment:fragment-testing:$fragment_version"</span> <span class="devsite-syntax-o">}</span></pre></devsite-code> </section><section><h3 id="kts" data-text="Kotlin" tabindex="-1">Kotlin</h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Kotlin"><span class="devsite-syntax-n">dependencies</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">fragment_version</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"1.8.6"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Java language implementation</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"androidx.fragment:fragment:</span><span class="devsite-syntax-si">$</span><span class="devsite-syntax-n">fragment_version</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Kotlin</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"androidx.fragment:fragment-ktx:</span><span class="devsite-syntax-si">$</span><span class="devsite-syntax-n">fragment_version</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Compose</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"androidx.fragment:fragment-compose:</span><span class="devsite-syntax-si">$</span><span class="devsite-syntax-n">fragment_version</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Testing Fragments in Isolation</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">debugImplementation</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"androidx.fragment:fragment-testing:</span><span class="devsite-syntax-si">$</span><span class="devsite-syntax-n">fragment_version</span><span class="devsite-syntax-s">"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> </section></div> </div> <p>For more information about dependencies, see <a href="/studio/build/dependencies">Add build dependencies</a>.</p> <h2 id="feedback" data-text="Feedback" tabindex="-1">Feedback</h2> <p>Your feedback helps make Jetpack better. Let us know if you discover new issues or have ideas for improving this library. Please take a look at the <a href="https://issuetracker.google.com/issues?q=componentid:460964%20status:open">existing issues</a> in this library before you create a new one. You can add your vote to an existing issue by clicking the star button.</p> <p><a href="https://issuetracker.google.com/issues/new?component=460964&template=1182267" class="button dac-button dac-outline-button">Create a new issue</a></p> <p>See the <a href="https://developers.google.com/issue-tracker">Issue Tracker documentation</a> for more information.</p> <h2 id="version_18_2" data-text="Version 1.8" tabindex="-1">Version 1.8</h2> <h3 id="1.8.6" data-text="Version 1.8.6" tabindex="-1">Version 1.8.6</h3> <p>February 12, 2025</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.6</code> is released. Version 1.8.6 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/42d1f9653eafdf921d3f0be1ffadd8905abac21a..e22fa33d22862979c7905e12ed76e74412dc41d2/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code>&#39;s <code translate="no" dir="ltr">setOnApplyWindowInsetsListener</code> override now takes a null listener, matching what the framework allows. (<a href="https://android-review.googlesource.com/#/q/I575f0b5da72d096b14393afd9819ab66e061b002">I575f0</a>, <a href="https://issuetracker.google.com/issues/282790626">b/282790626</a>)</li> </ul> <h3 id="1.8.5" data-text="Version 1.8.5" tabindex="-1">Version 1.8.5</h3> <p>October 30, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.5</code> is released. Version 1.8.5 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/d20e1de525e7d80ea3b79a4698f86adcb901b66b..42d1f9653eafdf921d3f0be1ffadd8905abac21a/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an <code translate="no" dir="ltr">IllegalStateException</code> triggered by <code translate="no" dir="ltr">saveBackStack</code> only after a Predictive Back gesture was canceled or interrupted. (<a href="https://android-review.googlesource.com/#/q/I3387d9d02495112f211448d7f3c9f862299da697">I3387d</a>, <a href="https://issuetracker.google.com/issues/342419080">b/342419080</a>)</li> </ul> <h3 id="1.8.4" data-text="Version 1.8.4" tabindex="-1">Version 1.8.4</h3> <p>October 2, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.4</code> is released. Version 1.8.4 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/da5509028c3c40784100283320b83785fbd203c6..d20e1de525e7d80ea3b79a4698f86adcb901b66b/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where quickly pressing the system back button or quickly doing gesture back will cause Fragments to crash when using Androidx Transitions. (<a href="https://android-review.googlesource.com/#/q/Ibc038d8db7c3e7903a4dc8bfa556883705d27ee8">Ibc038</a>, <a href="https://issuetracker.google.com/issues/364804225">b/364804225</a>)</li> <li>Fixed an issue in fragments where interrupting a predictive back gesture would send the fragment manager into an undefined state and even up showing the wrong fragment. (<a href="https://android-review.googlesource.com/#/q/If82e2cd540a5319faa2e40d4a28ce31026e2e19d">If82e2</a>, <a href="https://issuetracker.google.com/issues/338624457">b/338624457</a>)</li> <li>Fixed an <code translate="no" dir="ltr">UninitializedPropertyAccessException</code> in <code translate="no" dir="ltr">AndroidFragment</code> when dynamically swapping out the Class your <code translate="no" dir="ltr">AndroidFragment</code> instance is using. (<a href="https://android-review.googlesource.com/#/q/I12dea04016d1f68583acb1265ca0a937a7ebd75d">I12dea</a>)</li> </ul> <h3 id="1.8.3" data-text="Version 1.8.3" tabindex="-1">Version 1.8.3</h3> <p>September 4, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.3</code> is released. Version 1.8.3 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/539527ae77b888b02a3b0ca85afcaea30a416b4e..558c2142ee7a4d7b67c119563e2c364c4c3a9a08/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentManager</code> now correctly takes into account pending operations when handling the Predictive Back gesture. This should ensure that doing a system back no longer causes an <code translate="no" dir="ltr">IndexOutOfBoundsException</code>. (<a href="https://android-review.googlesource.com/#/q/I9ba32fe0583d13618c1eac3f13fdbd8992a3b7ad">I9ba32</a>, <a href="https://issuetracker.google.com/issues/342316801">b/342316801</a>)</li> <li><code translate="no" dir="ltr">AndroidFragment</code> no longer crashes if it is added to composition while the containing activity/fragment&#39;s state is already saved. (<a href="https://android-review.googlesource.com/#/q/I985e91e6d654815c99e97927154d0fd8f2228c0b">I985e9</a>, <a href="https://issuetracker.google.com/issues/356643968">b/356643968</a>)</li> </ul> <h3 id="1.8.2" data-text="Version 1.8.2" tabindex="-1">Version 1.8.2</h3> <p>July 24, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.2</code> is released. Version 1.8.2 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/c06fe0a3e7c61f31e0734f93bef3899fae9dc0f4..539527ae77b888b02a3b0ca85afcaea30a416b4e/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">AndroidFragment</code> now properly handles cases where the parent fragment is put on the Fragment back stack, avoiding &#39;No view found for id&#39; issues when popping back to that fragment. (<a href="https://android-review.googlesource.com/#/q/I94608fed9ada006e5e601ede8adb8be81fae29a0">I94608</a>)</li> <li>Fragments added via the <code translate="no" dir="ltr">FragmentTransaction.add</code> method that takes a <code translate="no" dir="ltr">ViewGroup</code> now wait for <code translate="no" dir="ltr">onContainerAvailable</code> before progressing to <code translate="no" dir="ltr">onStart()</code>. This affects users of that API, such as <code translate="no" dir="ltr">AndroidFragment</code>, which now waits for the <code translate="no" dir="ltr">AndroidFragment</code> to re-enter composition before moving it through <code translate="no" dir="ltr">onStart()</code>. (<a href="https://android-review.googlesource.com/#/q/I94608fed9ada006e5e601ede8adb8be81fae29a0">I94608</a>)</li> </ul> <h3 id="1.8.1" data-text="Version 1.8.1" tabindex="-1">Version 1.8.1</h3> <p>June 26, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.1</code> is released. Version 1.8.1 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/4cb33e7274271da73c61e9231b4d372300cecec4..c06fe0a3e7c61f31e0734f93bef3899fae9dc0f4/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where fragments without a container were immediately <code translate="no" dir="ltr">DESTROYED</code> when starting a predictive back gesture. Now they are held in the <code translate="no" dir="ltr">CREATED</code> state until after the gesture is complete. (<a href="https://android-review.googlesource.com/#/q/If6b83f7dbb655e0bebc99c3c769625626a7c4e8d">If6b83</a>, <a href="https://issuetracker.google.com/issues/345244539">b/345244539</a>)</li> </ul> <h3 id="1.8.0" data-text="Version 1.8.0" tabindex="-1">Version 1.8.0</h3> <p>June 12, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.0</code> is released. Version 1.8.0 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/b9b27a2972eeb4612cbea0f230f514ffb142a5ee..4cb33e7274271da73c61e9231b4d372300cecec4/fragment">these commits</a>.</p> <p><strong>Important changes since 1.7.0</strong></p> <ul> <li>The <code translate="no" dir="ltr">fragment-compose</code> artifact now contains an <code translate="no" dir="ltr">AndroidFragment</code> <code translate="no" dir="ltr">Composable</code> that allows adding fragments into the Compose hierarchy via the fragment class name. It automatically handles the saving and restoring of the Fragment’s state. This should be used as a direct replacement for the previously recommended approach of using <code translate="no" dir="ltr">AndroidViewBinding</code> to inflate a Fragment.</li> <li>The <code translate="no" dir="ltr">onBackStackChangeCancelled</code> callback on the <code translate="no" dir="ltr">FragmentManager</code>’s <code translate="no" dir="ltr">OnBackStackChangedListener</code> interface now fires as part of executing operations in <code translate="no" dir="ltr">FragmentManager</code>, moving it closer in line with the timing of the <code translate="no" dir="ltr">onBackStackChangeCommitted</code> callback.</li> </ul> <h3 id="1.8.0-rc01" data-text="Version 1.8.0-rc01" tabindex="-1">Version 1.8.0-rc01</h3> <p>May 29, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.0-rc01</code> is released. Version 1.8.0-rc01 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/6a69101fd0edc8d02aa316df1f43e0552fd2d7c4..b9b27a2972eeb4612cbea0f230f514ffb142a5ee/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>The <code translate="no" dir="ltr">onBackStackChangeCancelled</code> callback on the <code translate="no" dir="ltr">FragmentManagers OnBackStackChangedListener</code> interface now fires as part of executing operations in <code translate="no" dir="ltr">FragmentManager</code>, moving it closer in line with the timing of the <code translate="no" dir="ltr">onBackStackChangeCommitted</code> callback. (<a href="https://android-review.googlesource.com/#/q/I5ebfb12840173c4e239ff239856c2a05464648f5">I5ebfb</a>, <a href="https://issuetracker.google.com/issues/332916112">b/332916112</a>)</li> </ul> <h3 id="1.8.0-beta01" data-text="Version 1.8.0-beta01" tabindex="-1">Version 1.8.0-beta01</h3> <p>May 14, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.0-beta01</code> is released. Version 1.8.0-beta01 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/5c17ac8d339b80b5f509f83792f5923e337612c7..6a69101fd0edc8d02aa316df1f43e0552fd2d7c4/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.7.1">Fragment <code translate="no" dir="ltr">1.7.1</code></a>: Predictive back will now only run for transactions in which all of the fragments have either a Animator or a Seekable Androidx Transition. This fixes an issue where canceling a partially seekable transaction would cause a black screen. (<a href="https://android-review.googlesource.com/#/q/I4303795b1cb4f7e58cd4f8efe0baa53d64a51dd8">I43037</a>, <a href="https://issuetracker.google.com/issues/339169168">b/339169168</a>)</li> </ul> <h3 id="1.8.0-alpha02" data-text="Version 1.8.0-alpha02" tabindex="-1">Version 1.8.0-alpha02</h3> <p>April 17, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.0-alpha02</code> is released. Version 1.8.0-alpha02 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/02b55f664eba38e42e362e1af3913be1df552d55..5c17ac8d339b80b5f509f83792f5923e337612c7/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.7.0-rc02">Fragment <code translate="no" dir="ltr">1.7.0-rc02</code></a>: Added logs to indicate why setting a <code translate="no" dir="ltr">sharedElement</code> without any other transitions will fail to run. (<a href="https://android-review.googlesource.com/#/q/Iec48ef375eb1c498bc13da82d5d8355be58ba0ff">Iec48e</a>)</li> <li>From <a href="#1.7.0-rc02">Fragment <code translate="no" dir="ltr">1.7.0-rc02</code></a>: Fixed a bug where if a non-seekable shared element was added to a transactions where all other transitions were seekable, there would be a crash. Now the transaction will correctly be considered non-seekable. (<a href="https://android-review.googlesource.com/#/q/I18ccdbc4f7226f265106435945f8ee4039dc475b">I18ccd</a>)</li> </ul> <h3 id="1.8.0-alpha01" data-text="Version 1.8.0-alpha01" tabindex="-1">Version 1.8.0-alpha01</h3> <p>April 3, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.8.0-alpha01</code> is released. Version 1.8.0-alpha01 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/02b55f664eba38e42e362e1af3913be1df552d55/fragment">these commits</a>.</p> <p><strong>New Features</strong></p> <ul> <li>The new <code translate="no" dir="ltr">AndroidFragment</code> <code translate="no" dir="ltr">Composable</code> allows adding fragments into the Compose hierarchy via the fragment class name. It automatically handles the saving and restoring of the Fragment’s state. This can be used as a direct replacement for the <a href="/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidViewBinding(kotlin.Function3,androidx.compose.ui.Modifier,kotlin.Function1)">AndroidViewBinding</a> <code translate="no" dir="ltr">Composable</code>.(<a href="https://issuetracker.google.com/issues/312895363">b/312895363</a>, <a href="https://android-review.googlesource.com/#/q/Icf84199bbe487b2a2b6a95d2b6e09415f810e77a">Icf841</a>)</li> </ul> <p><strong>Documentation Changes</strong></p> <ul> <li>Updated documentation for the <code translate="no" dir="ltr">OnBackStackChangedListener</code> APIs to indicate when they are called and how they should be used. (<a href="https://android-review.googlesource.com/#/q/I0bfd940eea207c7322bce866e8fc585458ec7a85">I0bfd9</a>)</li> </ul> <p><strong>Dependency update</strong></p> <ul> <li>Fragment now depends on <a href="/jetpack/androidx/releases/profileinstaller#1.3.1">Profile Installer 1.3.1</a>.</li> </ul> <h2 id="version_17_2" data-text="Version 1.7" tabindex="-1">Version 1.7</h2> <h3 id="1.7.1" data-text="Version 1.7.1" tabindex="-1">Version 1.7.1</h3> <p>May 14, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.1</code> is released. Version 1.7.1 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/88073d6f9c7c7dc2fc11e9ef53a94e12e4ad1495..291ef1e90f03947a872833589ef6e32ba19e9103/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>Predictive back will now only run for transactions in which all of the fragments have either a Animator or a Seekable Androidx Transition. This fixes an issue where canceling a partially seekable transaction would cause a blank screen. (<a href="https://android-review.googlesource.com/#/q/I4303795b1cb4f7e58cd4f8efe0baa53d64a51dd8">I43037</a>, <a href="https://issuetracker.google.com/issues/339169168">b/339169168</a>)</li> </ul> <h3 id="1.7.0" data-text="Version 1.7.0" tabindex="-1">Version 1.7.0</h3> <p>May 1, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0</code> is released. Version 1.7.0 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/7c8070cb8775c270c1b0f3b4232c701cec631be4..88073d6f9c7c7dc2fc11e9ef53a94e12e4ad1495/fragment">these commits</a>.</p> <p><strong>Predictive Back Gesture Support</strong></p> <ul> <li>Fragments now provide support for Predictive in-app back when using <code translate="no" dir="ltr">Animator</code> or when using <a href="/jetpack/androidx/releases/transition#1.5.0">AndroidX Transition 1.5.0</a>. This allows users to use the back gesture to see the previous fragment by seeking your Animator/Transition before deciding to either commit the transaction via completing the gesture or canceling.</li> </ul> <table> <thead> <tr> <th>Transition System</th> <th>XML Resource</th> <th>Supports Predictive Back</th> </tr> </thead> <tbody> <tr> <td><a href="/reference/android/view/animation/Animation"><code translate="no" dir="ltr">Animation</code></a></td> <td><code translate="no" dir="ltr">R.anim</code></td> <td>No</td> </tr> <tr> <td><a href="/reference/android/animation/Animator"><code translate="no" dir="ltr">Animator</code></a></td> <td><code translate="no" dir="ltr">R.animator</code></td> <td>Yes</td> </tr> <tr> <td>Framework <a href="/reference/android/transition/Transition"><code translate="no" dir="ltr">Transition</code></a></td> <td><code translate="no" dir="ltr">R.transition</code></td> <td>No</td> </tr> <tr> <td>AndroidX <a href="/reference/androidx/transition/Transition"><code translate="no" dir="ltr">Transition</code></a> with <a href="/jetpack/androidx/releases/transition#1.4.1">Transition 1.4.1</a> or less</td> <td><code translate="no" dir="ltr">R.transition</code></td> <td>No</td> </tr> <tr> <td>AndroidX <a href="/reference/androidx/transition/Transition"><code translate="no" dir="ltr">Transition</code></a> with <a href="/jetpack/androidx/releases/transition#1.5.0">Transition 1.5.0</a></td> <td><code translate="no" dir="ltr">R.transition</code></td> <td>Yes</td> </tr> </tbody> </table> <p>If you see any issues with Predictive Back support in Fragments after you’ve <a href="/guide/navigation/custom-back/predictive-back-gesture#opt-predictive">opted into the predictive back gesture</a>, please <a href="https://issuetracker.google.com/issues/new?component=460964">file an issue against Fragment</a> with a sample project that reproduces your issue. You can disable predictive back by using <code translate="no" dir="ltr">FragmentManager.enabledPredictiveBack(false)</code> in the <code translate="no" dir="ltr">onCreate()</code> of your Activity.</p> <p><code translate="no" dir="ltr">FragmentManager.OnBackStackChangedListener()</code> now provides the <code translate="no" dir="ltr">onBackStackChangeProgressed()</code> and <code translate="no" dir="ltr">onBackStackChangeCancelled()</code> for receiving predictive back progress and canceled events respectively.</p> <p><strong>Fragment Compose Artifact</strong></p> <p>A new <code translate="no" dir="ltr">fragment-compose</code> artifact has been created that focuses on supporting apps that are in the process of moving from a Fragment based architecture to a fully Compose based architecture.</p> <p>The first feature available in this new artifact is a <code translate="no" dir="ltr">content</code> extension method on <code translate="no" dir="ltr">Fragment</code> that seeks to make it easier to use Compose for the UI of an individual Fragment by creating a <code translate="no" dir="ltr">ComposeView</code> for you and setting the correct <code translate="no" dir="ltr">ViewCompositionStrategy</code>.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Kotlin"><code translate="no" dir="ltr"><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">ExampleFragment</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Fragment</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">override</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">fun</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onCreateView</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">inflater</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">LayoutInflater</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">container</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ViewGroup?,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">savedInstanceState</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Bundle?</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">content</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Write your @Composable content here</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">viewModel</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ExampleViewModel</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">viewModel</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// or extract it into a separate, testable method</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ExampleComposable</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">viewModel</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <h3 id="1.7.0-rc02" data-text="Version 1.7.0-rc02" tabindex="-1">Version 1.7.0-rc02</h3> <p>April 17, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-rc02</code> is released. Version 1.7.0-rc02 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/bad4645b145a9dff21edd855fd83e097a1a5bcb3..7c8070cb8775c270c1b0f3b4232c701cec631be4/fragment">these commits</a>.</p> <p><strong>Bug Fixes</strong></p> <ul> <li>Added logs to indicate why setting a <code translate="no" dir="ltr">sharedElement</code> without any other transitions will fail to run. (<a href="https://android-review.googlesource.com/#/q/Iec48ef375eb1c498bc13da82d5d8355be58ba0ff">Iec48e</a>)</li> <li>Fixed a bug where if a non-seekable shared element was added to a transactions where all other transitions were seekable, there would be a crash. Now the transaction will correctly be considered non-seekable. (<a href="https://android-review.googlesource.com/#/q/I18ccdbc4f7226f265106435945f8ee4039dc475b">I18ccd</a>)</li> </ul> <h3 id="1.7.0-rc01" data-text="Version 1.7.0-rc01" tabindex="-1">Version 1.7.0-rc01</h3> <p>April 3, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-rc01</code> is released. Version 1.7.0-rc01 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/a57d7d17753695012b58c9ce7ad55a8d39157e62..bad4645b145a9dff21edd855fd83e097a1a5bcb3/fragment">these commits</a>.</p> <p><strong>Dependency update</strong></p> <ul> <li>Fragment now depends on <a href="/jetpack/androidx/releases/profileinstaller#1.3.1">Profile Installer 1.3.1</a>.</li> </ul> <h3 id="1.7.0-beta01" data-text="Version 1.7.0-beta01" tabindex="-1">Version 1.7.0-beta01</h3> <p>March 20, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-beta01</code> is released. Version 1.7.0-beta01 contains <a href="https://android.googlesource.com/platform/frameworks/support/+log/ca2a8cf8da3a3502fccc593974f8085653e38261..a57d7d17753695012b58c9ce7ad55a8d39157e62/fragment">these commits</a>.</p> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentHostCallback</code> is now written in Kotlin so that the nullability of the generic type of the Host matches the nullability of the return type of <code translate="no" dir="ltr">onGetHost()</code>. (<a href="https://android-review.googlesource.com/#/q/I40af54eac4bb30c0b5e16d55626ef8ce9b033ebb">I40af5</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where when committing a Predictive Back gesture on a fragment that is not in a container, that fragment would never be destroyed. The Fragment will now be immediately moved to the final state. (<a href="https://android-review.googlesource.com/#/q/Ida0d901038b60ae42e42942fb16342e443247573">Ida0d9</a>)</li> <li>Fixed an issue in Fragments where interrupting incoming transitions with a Predictive back gesture would destroy the entering view, and leave a blank screen. (<a href="https://android-review.googlesource.com/#/q/Id3f228dd5f53742c68e6cb16b752022e18e00ec9">Id3f22</a>, <a href="https://issuetracker.google.com/issues/319531491">b/319531491</a>)</li> </ul> <h3 id="1.7.0-alpha10" data-text="Version 1.7.0-alpha10" tabindex="-1">Version 1.7.0-alpha10</h3> <p>February 7, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha10</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/78ed9a7c8aebd7f55c3219688444fe02ed7798ad..ca2a8cf8da3a3502fccc593974f8085653e38261/fragment">Version 1.7.0-alpha10 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed the known issue in the previous Fragment release where using Fragment&#39;s Predictive Back support for <code translate="no" dir="ltr">Animator</code> or AndroidX Transition, Fragments would throw a <code translate="no" dir="ltr">NullPointerException</code> from <code translate="no" dir="ltr">handleOnBackProgressed</code> if no <code translate="no" dir="ltr">FragmentManager.OnBackStackChangedListener</code> has ever been added via <a href="/reference/androidx/fragment/app/FragmentManager#addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener)"><code translate="no" dir="ltr">addOnBackStackChangedListener</code></a>. (<a href="https://android-review.googlesource.com/#/q/I7c835eb5ca4632bc3a3f68a2c1fe70d0e194b8d1">I7c835</a>)</li> </ul> <h3 id="1.7.0-alpha09" data-text="Version 1.7.0-alpha09" tabindex="-1">Version 1.7.0-alpha09</h3> <p>January 24, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha09</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/7a45f0bc9e0a73744b3780a6f92e1b570de58bba..06772614ed2238bb66df7df4d1e239ad0564ba1a/fragment">Version 1.7.0-alpha09 contains these commits.</a></p> <p><strong>Fragment Compose Artifact</strong></p> <p>A new <code translate="no" dir="ltr">fragment-compose</code> artifact has been created that focuses on supporting apps that are in the process of moving from a Fragment based architecture to a fully Compose based architecture.</p> <p>The first feature available in this new artifact is a <code translate="no" dir="ltr">content</code> extension method on <code translate="no" dir="ltr">Fragment</code> that seeks to make it easier to use Compose for the UI of an individual Fragment by creating a <code translate="no" dir="ltr">ComposeView</code> for you and setting the correct <code translate="no" dir="ltr">ViewCompositionStrategy</code>. (<a href="https://android.googlesource.com/platform/frameworks/support/+/561cb75bdf7e971f0ba2dec3cdc3286e1b415ecf">561cb7</a>, <a href="https://issuetracker.google.com/258046948">b/258046948</a>)</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Kotlin"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">ExampleFragment</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Fragment</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">override</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">fun</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">onCreateView</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">inflater</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">LayoutInflater</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">container</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ViewGroup?,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">savedInstanceState</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Bundle?</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">content</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Write your @Composable content here</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">viewModel</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ExampleViewModel</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">viewModel</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// or extract it into a separate, testable method</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ExampleComposable</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">viewModel</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentManager.OnBackStackChangedListener()</code> now provides the <code translate="no" dir="ltr">onBackStackChangeProgressed()</code> and <code translate="no" dir="ltr">onBackStackChangeCancelled()</code> for receiving predictive back progress and canceled events respectively. (<a href="https://android.googlesource.com/platform%2Fframeworks%2Fsupport/+/214b87117035d255d195dc300e95f4f2f5409711">214b87</a>)</li> </ul> <p><strong>Known Issue</strong></p> <ul> <li>When using Fragment&#39;s Predictive Back support for <code translate="no" dir="ltr">Animator</code> or AndroidX Transition, Fragments will throw a <code translate="no" dir="ltr">NullPointerException</code> from <code translate="no" dir="ltr">handleOnBackProgressed</code> if no <code translate="no" dir="ltr">FragmentManager.OnBackStackChangedListener</code> has ever been added via <a href="/reference/androidx/fragment/app/FragmentManager#addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener)"><code translate="no" dir="ltr">addOnBackStackChangedListener</code></a>. Manually adding a listener will work around the crash. A fix will be available for this in the next release of Fragments.</li> </ul> <h3 id="1.7.0-alpha08" data-text="Version 1.7.0-alpha08" tabindex="-1">Version 1.7.0-alpha08</h3> <p>January 10, 2024</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha08</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/b5166f9a1e9c047162d1215884c3e2cd41a4a74a..7a45f0bc9e0a73744b3780a6f92e1b570de58bba/fragment">Version 1.7.0-alpha08 contains these commits.</a></p> <p><strong>Clean up</strong></p> <ul> <li>Removed workaround for Transition library that has been fixed in <a href="/jetpack/releases/transition#1.5.0-alpha06">Transition <code translate="no" dir="ltr">1.5.0-alpha06</code></a>. (<a href="https://android-review.googlesource.com/#/q/I04356cee5dcda7c2da3054e7b2b44cc16dbc357d">I04356</a>)</li> </ul> <h3 id="1.7.0-alpha07" data-text="Version 1.7.0-alpha07" tabindex="-1">Version 1.7.0-alpha07</h3> <p>November 29, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha07</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/e63042bab069a262f0e762d23f5a18152f3bf12a..b5166f9a1e9c047162d1215884c3e2cd41a4a74a/fragment">Version 1.7.0-alpha07 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a <code translate="no" dir="ltr">NullPointerException</code> caused by setting a shared element transition and failing to set an enter/exitTransition as well. (<a href="https://android-review.googlesource.com/#/q/I8472b865cf93d1d3463f73942c460263f746fef5">I8472b</a>)</li> <li>From <a href="#1.6.2">Fragment <code translate="no" dir="ltr">1.6.2</code></a>: When the Fragment of a <code translate="no" dir="ltr">FragmentContainerView</code> is inflated, its states such as <code translate="no" dir="ltr">FragmentManager</code>, Host, and id are now accessible in the <code translate="no" dir="ltr">onInflate</code> callback. (<a href="https://android-review.googlesource.com/#/q/I1e44c5dbf5f0e0c55be39489f4c973937f6910cd">I1e44c</a>, <a href="https://issuetracker.google.com/issues/307427423">b/307427423</a>)</li> <li>From <a href="#1.6.2">Fragment <code translate="no" dir="ltr">1.6.2</code></a>: When using <code translate="no" dir="ltr">clearBackStack</code> to remove a set of fragments, any nested Fragment&#39;s <code translate="no" dir="ltr">ViewModel</code> will now be cleared when the parent fragment’s <code translate="no" dir="ltr">ViewModels</code> are cleared. (<a href="https://android-review.googlesource.com/#/q/I6d83cd93421837b213d25d2fdbe5405348cd2637">I6d83c</a>, <a href="https://issuetracker.google.com/issues/296173018">b/296173018</a>)</li> </ul> <h3 id="1.7.0-alpha06" data-text="Version 1.7.0-alpha06" tabindex="-1">Version 1.7.0-alpha06</h3> <p>October 4, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha06</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/91bb8c1f81dcb031bda00fcd8e55f1e890b56f06..e63042bab069a262f0e762d23f5a18152f3bf12a/fragment">Version 1.7.0-alpha06 contains these commits.</a></p> <p><strong>Dependency Update</strong></p> <ul> <li>Fragments has been updated to depend on the new <code translate="no" dir="ltr">animateToStart</code> API added in <a href="/jetpack/androidx/releases/transition#1.5.0-alpha04">Transition <code translate="no" dir="ltr">1.5.0-alpha04</code></a>.</li> </ul> <h3 id="1.7.0-alpha05" data-text="Version 1.7.0-alpha05" tabindex="-1">Version 1.7.0-alpha05</h3> <p>September 20, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha05</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/9ce75ea1baa2af10dda8f787f69c40c6654bcac1..91bb8c1f81dcb031bda00fcd8e55f1e890b56f06/fragment">Version 1.7.0-alpha05 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Fragments now provide support for Predictive back when using Androidx Transitions. This allows you to use the back gesture to seek to the previous fragment with your custom Androidx Transition before deciding to either commit or cancel the transaction via the completed gesture. You must depend on the <a href="/jetpack/androidx/releases/transition#1.5.0-alpha03">Transition <code translate="no" dir="ltr">1.5.0-alpha03</code></a> release to enable this feature. (<a href="https://android-review.googlesource.com/#/q/Ib49b455d0a00d38203de7616fb2be05a3677a548">Ib49b4</a>, <a href="https://issuetracker.google.com/issues/285175724">b/285175724</a>)</li> </ul> <p><strong>Known Issues</strong></p> <ul> <li>There is currently an issue where after you cancel a back gesture with a transition once, the next time you start the back gesture it will fail to run the transition, causing a blank screen. This could be caused by an issue in the Transition library. (<a href="https://issuetracker.google.com/300157785">b/300157785</a>). If you see this issue, please <a href="https://issuetracker.google.com/issues/new?component=460964">file an issue against Fragment</a> with a sample project that reproduces your issue. You can disable predictive back by using <code translate="no" dir="ltr">FragmentManager.enabledPredictiveBack(false)</code> in the <code translate="no" dir="ltr">onCreate()</code> of your Activity.</li> </ul> <h3 id="1.7.0-alpha04" data-text="Version 1.7.0-alpha04" tabindex="-1">Version 1.7.0-alpha04</h3> <p>September 6, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha04</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/3315f1ef094c312203fe26841287902916fbedf5..9ce75ea1baa2af10dda8f787f69c40c6654bcac1/fragment">Version 1.7.0-alpha04 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue when canceling a predictive back gesture where fragments failed to make it to the correct Lifecycle state. (<a href="https://android-review.googlesource.com/#/q/I7cffe7994cb032c14bec01eac3c4b9dd8c8fbf40">I7cffe</a>, <a href="https://issuetracker.google.com/issues/297379023">b/297379023</a>)</li> <li>Fixed a regressions where Animations were allowed to run with Transitions. (<a href="https://android-review.googlesource.com/#/q/I59f36ad415c506f20a5cadbd82e209d6ff98dc37">I59f36</a>)</li> <li>Fixed an issue when using Predictive Back with fragments where attempting to go back twice in quick succession on the second to last fragment on the back stack would cause a crash. (<a href="https://android-review.googlesource.com/#/q/Ifa1a4c4f7982c76d76094c489ffb39542281af71">Ifa1a4</a>)</li> </ul> <h3 id="1.7.0-alpha03" data-text="Version 1.7.0-alpha03" tabindex="-1">Version 1.7.0-alpha03</h3> <p>August 23, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha03</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/8f3937053b6b5e938d7576851bef39c829b017ee..3315f1ef094c312203fe26841287902916fbedf5/fragment">Version 1.7.0-alpha03 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue with Fragments when using predictive back that caused the first fragment in the fragment manager’s back stack to be skipped and the Activity to finish when using system back via 3 button navigation or the predictive back gesture. (<a href="https://android-review.googlesource.com/#/q/I0664b44dd7f6dc49bafb932e3ae47f1aba483fd6">I0664b</a>, <a href="https://issuetracker.google.com/issues/295231788">b/295231788</a>)</li> </ul> <h3 id="1.7.0-alpha02" data-text="Version 1.7.0-alpha02" tabindex="-1">Version 1.7.0-alpha02</h3> <p>August 9, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha02</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/95657d008c8886de1770adf1d52e01e6e952b5b0..5d7dd999525725bd038a00ca4e89e0fef624a6da/fragment">Version 1.7.0-alpha02 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>When using Fragments with Predictive Back Gestures from API 34, if you are using a transition system that does not support seeking (<code translate="no" dir="ltr">Animations</code>, <code translate="no" dir="ltr">Transitions</code>) or no transitions at all, Fragments will now wait until the gesture is complete before executing the back action. (<a href="https://android-review.git.corp.google.com/q/2662926+OR+2662927+OR+2663617+OR+2663618+OR+2663620+OR+2679737+OR+2693186+OR+2692848+OR+2692850+OR+2679738+OR+2679739+OR+2679481+OR+2695268">I8100c</a>)</li> </ul> <h3 id="1.7.0-alpha01" data-text="Version 1.7.0-alpha01" tabindex="-1">Version 1.7.0-alpha01</h3> <p>June 7, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.7.0-alpha01</code> is released. This version is developed in an internal branch.</p> <aside class="note"><strong>Note:</strong><span> This version will only compile against the Android 14 (Upside Down Cake) Beta 1 SDK or higher.</span></aside> <p><strong>New Features</strong></p> <ul> <li>Fragments now provide support for Predictive in-app back when using <code translate="no" dir="ltr">Animator</code>. This allows you to use the back gesture to see the previous fragment with your custom Animator before deciding to either commit the transaction via the completed gesture or cancel. You can also disable this new behavior by using the experimental <code translate="no" dir="ltr">enablePredictiveBack()</code>and passing in <code translate="no" dir="ltr">false</code>.</li> </ul> <aside class="note"><strong>Note:</strong><span> If using the <a href="https://developer.android.com/guide/navigation">Navigation Component</a>, you must upgrade to <a href="/jetpack/androidx/releases/navigation#2.6.0">Navigation <code translate="no" dir="ltr">2.6.0</code></a> to allow <code translate="no" dir="ltr">FragmentManager</code> to intercept the system back gesture and run the Predictive Back animation.</span></aside> <h2 id="version_16_2" data-text="Version 1.6" tabindex="-1">Version 1.6</h2> <h3 id="1.6.2" data-text="Version 1.6.2" tabindex="-1">Version 1.6.2</h3> <p>November 1, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.2</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/2c3ed1b7130ae685522386d109f42c2030276ec6..447211941f6898816452f8b591a9f5a3fa3816f8/fragment">Version 1.6.2 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>When the Fragment of a <code translate="no" dir="ltr">FragmentContainerView</code> is inflated, its states such as <code translate="no" dir="ltr">FragmentManager</code>, Host, and id are now accessible in the <code translate="no" dir="ltr">onInflate</code> callback. (<a href="https://android-review.googlesource.com/#/q/I1e44c5dbf5f0e0c55be39489f4c973937f6910cd">I1e44c</a>, <a href="https://issuetracker.google.com/issues/307427423">b/307427423</a>)</li> <li>When using <code translate="no" dir="ltr">clearBackStack</code> to remove a set of fragments, any nested Fragment&#39;s <code translate="no" dir="ltr">ViewModel</code> will now be cleared when the parent fragment’s <code translate="no" dir="ltr">ViewModels</code> are cleared. (<a href="https://android-review.googlesource.com/#/q/I6d83cd93421837b213d25d2fdbe5405348cd2637">I6d83c</a>, <a href="https://issuetracker.google.com/issues/296173018">b/296173018</a>)</li> </ul> <h3 id="1.6.1" data-text="Version 1.6.1" tabindex="-1">Version 1.6.1</h3> <p>July 26, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.1</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/3d0a1cc9311a4f32d38f50c677b3e71d5c971697..2c3ed1b7130ae685522386d109f42c2030276ec6/fragment">Version 1.6.1 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where the saved state stored when the activity was stopped but not destroyed would be incorrectly cached even after the fragment instance was moved back to the <code translate="no" dir="ltr">RESUMED</code> state. This would cause that cached state to be reused if that fragment instance was on the back stack when using the multiple back stacks API to save and restore that fragment. (<a href="https://android-review.googlesource.com/#/q/I712884633ae73e0784ba0a7fe50bb5a1046e2275">I71288</a>, <a href="https://issuetracker.google.com/issues/246289075">b/246289075</a>)</li> </ul> <p><strong>Dependency Update</strong></p> <ul> <li>Fragment now depends on <a href="/jetpack/androidx/releases/activity#1.7.2">Activity 1.7.2</a>. This fixes an issue where Kotlin users could not extend <code translate="no" dir="ltr">ComponentDialog</code> without an explicit dependency on Activity. (<a href="https://issuetracker.google.com/287509323">b/287509323</a>)</li> </ul> <h3 id="1.6.0" data-text="Version 1.6.0" tabindex="-1">Version 1.6.0</h3> <p>June 7, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/76caddf4220f27dd21aa2da24a43b83340575542..3d0a1cc9311a4f32d38f50c677b3e71d5c971697/fragment">Version 1.6.0 contains these commits.</a></p> <p><strong>Important changes since 1.5.0</strong></p> <ul> <li>The saved state of <code translate="no" dir="ltr">Fragment</code>s has been split entirely between private library state (custom <code translate="no" dir="ltr">Parcelable</code> classes) and state provided by the developer, which is now always stored in a <code translate="no" dir="ltr">Bundle</code> that allows determining exactly where a fragment’s state is originating.</li> <li>The <code translate="no" dir="ltr">FragmentManager.OnBackStackChangedListener</code> interface has been expanded with two additional callbacks of <code translate="no" dir="ltr">onBackStackChangeStarted</code> and <code translate="no" dir="ltr">onBackStackChangeCommitted</code> that are called with each <code translate="no" dir="ltr">Fragment</code> right before they are added/removed from the fragment back stack and right after the transaction is committed, respectively.</li> <li><code translate="no" dir="ltr">FragmentStrictMode</code> added a new <code translate="no" dir="ltr">WrongNestedHierarchyViolation</code> that detects when a child fragment is nested within it’s parent’s View hierarchy, but not added to the parent’s <code translate="no" dir="ltr">childFragmentManager</code>.</li> <li>The <code translate="no" dir="ltr">Fragment</code> and <code translate="no" dir="ltr">FragmentManager</code> APIs that take an <code translate="no" dir="ltr">Intent</code> or <code translate="no" dir="ltr">IntentSender</code> are now properly annotated with <code translate="no" dir="ltr">@NonNull</code> to prevent passing in a null value as a null value would always immediately crash the respective android framework APIs these methods call into.</li> <li><code translate="no" dir="ltr">DialogFragment</code> now provides access to underlying <code translate="no" dir="ltr">ComponentDialog</code> via the <code translate="no" dir="ltr">requireComponentDialog()</code> API.</li> <li>Fragment now depends on <a href="/jetpack/androidx/releases/lifecycle#2.6.1">Lifecycle <code translate="no" dir="ltr">2.6.1</code></a>.</li> <li>Fragment now depends on <a href="/jetpack/androidx/releases/savedstate#1.2.1">SavedState <code translate="no" dir="ltr">1.2.1</code></a>.</li> <li>Fragment now depends on <a href="/jetpack/androidx/releases/profileinstaller#1.3.0">ProfileInstaller <code translate="no" dir="ltr">1.3.0</code></a>.</li> <li><p>The <code translate="no" dir="ltr">fragment-testing-manifest</code> artifact separates out the manifest entries from the rest of the fragment-testing components. This means you can do the following:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Text only"><code translate="no" dir="ltr">debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z") </code></pre></devsite-code> <p>This avoids conflicts due to version skew between <code translate="no" dir="ltr">fragment-testing</code> and <code translate="no" dir="ltr">androidx.test</code></p></li> </ul> <h3 id="1.6.0-rc01" data-text="Version 1.6.0-rc01" tabindex="-1">Version 1.6.0-rc01</h3> <p>May 10, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-rc01</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/01bd392d5702480f8bfe61a8f8bbbea64cf362a0..76caddf4220f27dd21aa2da24a43b83340575542/fragment">Version 1.6.0-rc01 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed as issue causing <code translate="no" dir="ltr">ActivityResult</code>s to be sent with the incorrect request code when multiple <code translate="no" dir="ltr">startActivityForResult</code> requests have been made consecutively. (<a href="https://android-review.googlesource.com/#/q/If0b9da0f226144df6c9ce0ef76642cf47184e63c">If0b9d</a>, <a href="https://issuetracker.google.com/issues/249519359">b/249519359</a>)</li> <li>Fixed an issue where the <code translate="no" dir="ltr">onBackStackChangeListener</code> callbacks were being dispatched for transactions that did not actually change the back stack if they were mixed in with transactions that do. (<a href="https://android-review.googlesource.com/#/q/I0eb5c9622f2984232ac106bb975ba72ae9b2435f">I0eb5c</a>, <a href="https://issuetracker.google.com/issues/279306628">b/279306628</a>)</li> </ul> <h3 id="1.6.0-beta01" data-text="Version 1.6.0-beta01" tabindex="-1">Version 1.6.0-beta01</h3> <p>April 19, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-beta01</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/a200cb82769634cecdb118ec4f0bfdf0b086e597..01bd392d5702480f8bfe61a8f8bbbea64cf362a0/fragment">Version 1.6.0-beta01 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Using <code translate="no" dir="ltr">postponeEnterTransition</code> with a timeout and then replacing the postponed fragment no longer results in leaking the postponed fragment. (<a href="https://android-review.googlesource.com/#/q/I2ec7d50c9a08be4902dcc3cce4615bc1e19ed47d">I2ec7d</a>, <a href="https://issuetracker.google.com/issues/276375110">b/276375110</a>)</li> <li>The new <code translate="no" dir="ltr">onBackStackChangeStarted</code> and <code translate="no" dir="ltr">onBackStackChangeCommitted</code> callbacks will now only dispatch a fragment a single time, even if multiple transactions contain the same fragment. (<a href="https://android-review.googlesource.com/#/q/Ic6b692881ce091c4e73153f60692fe463fb405ca">Ic6b69</a>)</li> </ul> <h3 id="1.6.0-alpha09" data-text="Version 1.6.0-alpha09" tabindex="-1">Version 1.6.0-alpha09</h3> <p>April 5, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-alpha09</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/5e7d256f82fbafb6d059ab7b18fddd87c7531553..a200cb82769634cecdb118ec4f0bfdf0b086e597/fragment">Version 1.6.0-alpha09 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">DialogFragment</code> now provides access to underlying <code translate="no" dir="ltr">ComponentDialog</code> via the <code translate="no" dir="ltr">requireComponentDialog()</code> API. (<a href="https://android-review.googlesource.com/#/q/I022e393bb76c0b1b8d4691661662ee59417b5d85">I022e3</a>, <a href="https://issuetracker.google.com/issues/234274777">b/234274777</a>)</li> <li>The fragment <code translate="no" dir="ltr">commitNow()</code>, <code translate="no" dir="ltr">executePendingTransactions()</code>, and <code translate="no" dir="ltr">popBackStackImmediate()</code> APIs have been annotated with <code translate="no" dir="ltr">@MainThread</code> meaning they will now all throw build errors when they are not called from the main thread instead of waiting to fail at runtime. (<a href="https://android-review.googlesource.com/#/q/Ic966543935dd77a4c149cfc4b796bd912c558fb2">Ic9665</a>, <a href="https://issuetracker.google.com/issues/236538905">b/236538905</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a bug in <code translate="no" dir="ltr">FragmentManager</code> where saving and restoring in the same frame could cause a crash. (<a href="https://android-review.googlesource.com/#/q/Ib36aff4a7263e10d7d795b4d8dbd6431d2552e5c">Ib36af</a>, <a href="https://issuetracker.google.com/issues/246519668">b/246519668</a>)</li> <li><code translate="no" dir="ltr">OnBackStackChangedListener</code> <code translate="no" dir="ltr">onBackStackChangeStarted</code> and <code translate="no" dir="ltr">onBackStackChangeCommitted</code> callbacks now only execute when the <code translate="no" dir="ltr">FragmentManager</code> back stack is changed. (<a href="https://android-review.googlesource.com/#/q/I66055ea52220756aeda717e5208346dcaa611258">I66055</a>, <a href="https://issuetracker.google.com/issues/274788957">b/274788957</a>)</li> </ul> <h3 id="1.6.0-alpha08" data-text="Version 1.6.0-alpha08" tabindex="-1">Version 1.6.0-alpha08</h3> <p>March 22, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-alpha08</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/bf83b7ca1e086138c9ffa3ed2a530db3b038c79a..5e7d256f82fbafb6d059ab7b18fddd87c7531553/fragment">Version 1.6.0-alpha08 contains these commits.</a></p> <p><strong>Behavior Change</strong></p> <ul> <li>The timing of the <code translate="no" dir="ltr">OnBackStackChangedListener.onBackStackChangeCommited</code> callback has been adjusted to execute before fragment operations are executed. This ensures that the callback will never be passed a fragment that is detached. (<a href="https://android-review.googlesource.com/#/q/I66a76810202a9b44b9d4bdffa03be5ed2b28a1e3">I66a76</a>, <a href="https://issuetracker.google.com/issues/273568280">b/273568280</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.5.6">Fragment <code translate="no" dir="ltr">1.5.6</code></a>: Fixed an issue where calling <code translate="no" dir="ltr">clearFragmentResultListener</code> inside a <code translate="no" dir="ltr">setFragmentResultListener</code> wouldn&#39;t work if the <code translate="no" dir="ltr">Lifecycle</code> was already <code translate="no" dir="ltr">STARTED</code> and a result was already available. (<a href="https://android-review.googlesource.com/#/q/If7458be3c43ece5a7ee3b1fe5b89bef2cf8b6131">If7458</a>)</li> </ul> <p><strong>Dependency Updates</strong></p> <ul> <li>Fragment now depends on <a href="/jetpack/androidx/releases/lifecycle#2.6.1">Lifecycle <code translate="no" dir="ltr">2.6.1</code></a>. (<a href="https://android.googlesource.com/platform/frameworks/support/+/586fe7d84e657d9bbc6d3cb3cbb8954f715df557">586fe7</a>)</li> <li>Fragment now depends on <a href="/jetpack/androidx/releases/savedstate#1.2.1">SavedState <code translate="no" dir="ltr">1.2.1</code></a>. (<a href="https://android.googlesource.com/platform/frameworks/support/+/078e4ef4d6b3475ed3a453ea7ba0d03e6bdc02c3">078e4e</a>)</li> <li>Fragment now depends on <a href="/jetpack/androidx/releases/profileinstaller#1.3.0">ProfileInstaller <code translate="no" dir="ltr">1.3.0</code></a>. (<a href="https://android.googlesource.com/platform/frameworks/support/+/3fc05b928c858af7bb318cc5f36a97715c6663a8">3fc05b</a>)</li> </ul> <h3 id="1.6.0-alpha07" data-text="Version 1.6.0-alpha07" tabindex="-1">Version 1.6.0-alpha07</h3> <p>March 8, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-alpha07</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/87533b4ff06971ed59028936cd9b6da988cd4522..bf83b7ca1e086138c9ffa3ed2a530db3b038c79a/fragment">Version 1.6.0-alpha07 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.5.6">Fragment <code translate="no" dir="ltr">1.5.6</code></a>: Fixed an issue where the removal of any Fragment, whether it had added Menu items or not, would invalidate the activity&#39;s menu. (<a href="https://android.googlesource.com/platform/frameworks/support/+/50f098644adc703ae218b0b7e999629f516a0241">50f098</a>, <a href="https://issuetracker.google.com/244336571">b/244336571</a>)</li> </ul> <h3 id="1.6.0-alpha06" data-text="Version 1.6.0-alpha06" tabindex="-1">Version 1.6.0-alpha06</h3> <p>February 22, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-alpha06</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/7d3ac1ab1206c01fae3ebb500b5b942636070155..87533b4ff06971ed59028936cd9b6da988cd4522/fragment">Version 1.6.0-alpha06 contains these commits.</a></p> <p><strong>Behavior change</strong></p> <ul> <li>The new <code translate="no" dir="ltr">onBackStackChangedStarted</code> callback on <code translate="no" dir="ltr">FragmentManager</code>&#39;s <code translate="no" dir="ltr">onBackStackChangedListener</code> will now be executed before fragments begin to move to their target states. (<a href="https://android-review.googlesource.com/#/q/I34726bb6bd8bb7e293b2eb605e961e54f313c8bb">I34726</a>)</li> </ul> <h3 id="1.6.0-alpha05" data-text="Version 1.6.0-alpha05" tabindex="-1">Version 1.6.0-alpha05</h3> <p>February 8, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-alpha05</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/4a2f5e696614339c1ac21f706c1a17c0285780e7..7d3ac1ab1206c01fae3ebb500b5b942636070155/fragment">Version 1.6.0-alpha05 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>The <code translate="no" dir="ltr">FragmentManager.OnBackStackChagnedListener</code> interface now offers two additional callbacks, <code translate="no" dir="ltr">onBackStackChangeStarted</code> and <code translate="no" dir="ltr">onBackStackChangeCommitted</code>, that allow for additional information and control when back stack changes occur in the <code translate="no" dir="ltr">FragmentManager</code>. (<a href="https://android-review.googlesource.com/#/q/Ib7ce5958d86ea1701f78e519ff607aa60a439def">Ib7ce5</a>, <a href="https://issuetracker.google.com/issues/238686802">b/238686802</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">Fragment</code> and <code translate="no" dir="ltr">FragmentManager</code> APIs that take an <code translate="no" dir="ltr">Intent</code> or <code translate="no" dir="ltr">IntentSender</code> are now properly annotated with <code translate="no" dir="ltr">@NonNull</code> to prevent passing in a null value as a null value would always immediately crash the respective Android framework APIs these methods call into. (<a href="https://android-review.googlesource.com/#/q/I06fd4eed31b985d7b9160430efb2f05d1c451dc1">I06fd4</a>)</li> </ul> <h3 id="1.6.0-alpha04" data-text="Version 1.6.0-alpha04" tabindex="-1">Version 1.6.0-alpha04</h3> <p>December 7, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment-*:1.6.0-alpha04</code> is released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/4a2f5e696614339c1ac21f706c1a17c0285780e7/fragment">Version 1.6.0-alpha04 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentStrictMode</code> added a new <code translate="no" dir="ltr">WrongNestedHierarchyViolation</code> that detects when a child fragment is nested within it’s parent’s View hierarchy, but not added to the parent’s <code translate="no" dir="ltr">childFragmentManager</code>. (<a href="https://android-review.googlesource.com/#/q/I725210f957b9be5875f7c0eadaaa992deda6614a">I72521</a>, <a href="https://issuetracker.google.com/issues/249299268">b/249299268</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>Fragments now restore their <code translate="no" dir="ltr">SavedStateRegistry</code> state before <code translate="no" dir="ltr">onAttach()</code>, ensuring that it is available from all upward lifecycle methods. (<a href="https://android-review.googlesource.com/#/q/I1e2b1b1e65900219956c6d9c0d68c175012586b8">I1e2b1</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">fragment-testing-manifest</code> artifact separates out the manifest entries from the rest of the fragment-testing components. This means you can do the following:</li> </ul> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Text only"><code translate="no" dir="ltr">debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z") </code></pre></devsite-code> <p>This avoids conflicts due to version skew between <code translate="no" dir="ltr">fragment-testing</code> and <code translate="no" dir="ltr">androidx.test</code>.(<a href="https://android-review.googlesource.com/#/q/I8e534e2fcab467a43944b6ab4821dc34c1c02cef">I8e534</a>, <a href="https://issuetracker.google.com/issues/128612536">b/128612536</a>)</p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.5.5">Fragment <code translate="no" dir="ltr">1.5.5</code></a>: Fragments will no longer incorrectly save the <code translate="no" dir="ltr">ViewModel</code> state as part of the view registry saved state. (<a href="https://android-review.googlesource.com/#/q/I10d2b5363d0abe967e92ad90a578d3bf88a2ca3b">I10d2b</a>, <a href="https://issuetracker.google.com/issues/253546214">b/253546214</a>)</li> </ul> <h3 id="1.6.0-alpha03" data-text="Version 1.6.0-alpha03" tabindex="-1">Version 1.6.0-alpha03</h3> <p>October 5, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.6.0-alpha03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.6.0-alpha03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.6.0-alpha03</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/dd1e45e8550560087f6447a34a9145048b5766f4..4586cf6e518f0c59410ef2b291e34ff9fdcff4e1/fragment">Version 1.6.0-alpha03 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li>Classes extending <code translate="no" dir="ltr">DialogFragment</code> will now be required to call super in their <code translate="no" dir="ltr">onDismiss()</code> overrides. (<a href="https://android-review.googlesource.com/#/q/I147983f443693b1cafbd996cbbacd726e2dd2130">I14798</a>, <a href="https://issuetracker.google.com/issues/238928865">b/238928865</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed regressions caused by the integration of the new provider callback interfaces (<code translate="no" dir="ltr">OnConfigurationChangedProvider</code>, <code translate="no" dir="ltr">OnMultiWindowModeChangedProvider</code>, <code translate="no" dir="ltr">OnTrimMemoryProvider</code>, <code translate="no" dir="ltr">OnPictureInPictureModeChangedProvider</code>) to ensure that fragments always get the proper callbacks. (<a href="https://android-review.googlesource.com/#/q/I9b380cd13d0fadf4a59be537d22023019f1b7cb4">I9b380</a>,<a href="https://android-review.googlesource.com/#/q/I34581e67bb3a81c7a7e162c3e47e51359896a628">I34581</a>, (<a href="https://android-review.googlesource.com/#/q/I8dfe68f7b8700f0c1d3b13a3d5b826fc924b7452">I8dfe6</a>, <a href="https://issuetracker.google.com/issues/242570955">b/242570955</a>),<a href="https://android-review.googlesource.com/#/q/If9d6bc0c4a942287b9e493b073dcb206d881df6d">If9d6b</a>,<a href="https://android-review.googlesource.com/#/q/Id0096df0c7c3aed66a832e0c05e81539e1a9ca26">Id0096</a>,<a href="https://android-review.googlesource.com/#/q/I690b3596b4f44a69c4f0b429535d609db94e5a79">I690b3</a>,<a href="https://android-review.googlesource.com/#/q/I2cba24e9657afa65c08a53cc80756ecd02b9f1e2">I2cba2</a>)</li> </ul> <h3 id="1.6.0-alpha02" data-text="Version 1.6.0-alpha02" tabindex="-1">Version 1.6.0-alpha02</h3> <p>August 24, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.6.0-alpha02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.6.0-alpha02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.6.0-alpha02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/a7f0710ad21f556f0dde9bf7bdab6d2135170fd4..dd1e45e8550560087f6447a34a9145048b5766f4/fragment">Version 1.6.0-alpha02 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="/jetpack/androidx/releases/fragment#1.5.2">Fragment <code translate="no" dir="ltr">1.5.2</code></a>: Fixed an issue where executing a <code translate="no" dir="ltr">popBackStack()</code> and a <code translate="no" dir="ltr">replace()</code> transaction at the same time could cause exiting fragments to run the wrong <code translate="no" dir="ltr">Animation</code>/<code translate="no" dir="ltr">Animator</code>. (<a href="https://android-review.googlesource.com/#/q/Ib1c07bd0e05c0c1a3d785e29456bad9afb183e2d">Ib1c07</a>, <a href="https://issuetracker.google.com/issues/214835303">b/214835303</a>)</li> </ul> <h3 id="1.6.0-alpha01" data-text="Version 1.6.0-alpha01" tabindex="-1">Version 1.6.0-alpha01</h3> <p>July 27, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.6.0-alpha01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.6.0-alpha01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.6.0-alpha01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/d5e5f4d57931a05bfd2dc75c09b3537e4d3ec976..a7f0710ad21f556f0dde9bf7bdab6d2135170fd4/fragment">Version 1.6.0-alpha01 contains these commits.</a></p> <p><strong>Behavior Changes</strong></p> <ul> <li>The saved state of <code translate="no" dir="ltr">Fragment</code>s has been split entirely between private library state (custom <code translate="no" dir="ltr">Parcelable</code> classes) and state provided by the developer, which is now always stored in a <code translate="no" dir="ltr">Bundle</code> that allows determining exactly where a fragment’s state is originating. (<a href="https://issuetracker.google.com/issues/207158202">b/207158202</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.5.1">Fragment <code translate="no" dir="ltr">1.5.1</code></a>: Fix a regression in the <code translate="no" dir="ltr">DialogFragmentCallbacksDetector</code> where using the lint version bundled with AGP 7.4 would cause lint to crash. (<a href="https://issuetracker.google.com/237567009">b/237567009</a>)</li> </ul> <p><strong>Dependency update</strong></p> <ul> <li>From <a href="#1.5.1">Fragment <code translate="no" dir="ltr">1.5.1</code></a>: The Fragment library now depends on the <a href="/jetpack/androidx/releases/lifecycle#2.5.1">Lifecycle <code translate="no" dir="ltr">2.5.1</code></a>. (<a href="https://android-review.googlesource.com/#/q/Id204c8273a64607e7ee83a452a45a566f5fe0fac">Id204c</a>)</li> <li>From <a href="#1.5.1">Fragment <code translate="no" dir="ltr">1.5.1</code></a>: The Fragment library now depends on <a href="/jetpack/androidx/releases/activity#1.5.1">Activity <code translate="no" dir="ltr">1.5.1</code></a>. (<a href="https://android-review.googlesource.com/#/q/I10f076fcf8083ff61904604f17a65377b0c7e6b3">I10f07</a>)</li> </ul> <h2 id="version_15_2" data-text="Version 1.5" tabindex="-1">Version 1.5</h2> <h3 id="1.5.7" data-text="Version 1.5.7" tabindex="-1">Version 1.5.7</h3> <p>April 19, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.7</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.7</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.7</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/29aa61b8de7b6fc4c40d7853fea944ae84553b19..264a7d28a22c73b74b7b8527075eedd989e8d521/fragment">Version 1.5.7 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Using <code translate="no" dir="ltr">postponeEnterTransition</code> with a timeout and then replacing the postponed fragment no longer results in leaking the postponed fragment. (<a href="https://android-review.googlesource.com/#/q/I2ec7d50c9a08be4902dcc3cce4615bc1e19ed47d">I2ec7d</a>, <a href="https://issuetracker.google.com/issues/276375110">b/276375110</a>)</li> </ul> <h3 id="1.5.6" data-text="Version 1.5.6" tabindex="-1">Version 1.5.6</h3> <p>March 22, 2023</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.6</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.6</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.6</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/81d78b98f8807fb46569ed4c765315088ae8ac7e..29aa61b8de7b6fc4c40d7853fea944ae84553b19/fragment">Version 1.5.6 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where the removal of any Fragment, whether it had added Menu items or not, would invalidate the activity&#39;s menu. (<a href="https://android.googlesource.com/platform/frameworks/support/+/50f098644adc703ae218b0b7e999629f516a0241">50f098</a>, <a href="https://issuetracker.google.com/244336571">b/244336571</a>)</li> <li>Fixed an issue where calling <code translate="no" dir="ltr">clearFragmentResultListener</code> inside a <code translate="no" dir="ltr">setFragmentResultListener</code> wouldn&#39;t work if the <code translate="no" dir="ltr">Lifecycle</code> was already <code translate="no" dir="ltr">STARTED</code> and a result was already available. (<a href="https://android-review.googlesource.com/#/q/If7458be3c43ece5a7ee3b1fe5b89bef2cf8b6131">If7458</a>)</li> </ul> <h3 id="1.5.5" data-text="Version 1.5.5" tabindex="-1">Version 1.5.5</h3> <p>December 7, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.5</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.5</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.5</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/16c70a04b803a84c147e758bfce0e6d2051f2fa2..81d78b98f8807fb46569ed4c765315088ae8ac7e/fragment">Version 1.5.5 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fragments will no longer incorrectly save the <code translate="no" dir="ltr">ViewModel</code> state as part of the view registry saved state. (<a href="https://android-review.googlesource.com/#/q/I10d2b5363d0abe967e92ad90a578d3bf88a2ca3b">I10d2b</a>, <a href="https://issuetracker.google.com/issues/253546214">b/253546214</a>)</li> </ul> <h3 id="1.5.4" data-text="Version 1.5.4" tabindex="-1">Version 1.5.4</h3> <p>October 24, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.4</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.4</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.4</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/a971aa42c5da6841733fedb8cba861c3ad729109..16c70a04b803a84c147e758bfce0e6d2051f2fa2/fragment">Version 1.5.4 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an error where using a custom <code translate="no" dir="ltr">FragmentController</code> with a host that does not implement a provider callback interface (<code translate="no" dir="ltr">OnConfigurationChangedProvider</code>, <code translate="no" dir="ltr">OnMultiWindowModeChangedProvider</code>, <code translate="no" dir="ltr">OnTrimMemoryProvider</code>, <code translate="no" dir="ltr">OnPictureInPictureModeChangedProvider</code>) and calling its deprecated dispatch function would fail to dispatch to child fragments. (<a href="https://android-review.googlesource.com/#/q/I9b380cd13d0fadf4a59be537d22023019f1b7cb4">I9b380</a>)</li> </ul> <h3 id="1.5.3" data-text="Version 1.5.3" tabindex="-1">Version 1.5.3</h3> <p>September 21, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.3</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.3</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.3</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/11370054495ad6e38f7904b59d0889da5235b1ce..a971aa42c5da6841733fedb8cba861c3ad729109/fragment">Version 1.5.3 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an error that caused fragments on the back stack to get <code translate="no" dir="ltr">onMultiWindowModeChanged()</code>, <code translate="no" dir="ltr">onPictureInPictureModeChanged()</code>, <code translate="no" dir="ltr">onLowMemory()</code>, and <code translate="no" dir="ltr">onConfigurationChanged()</code> callbacks. (<a href="https://android-review.googlesource.com/#/q/I34581e67bb3a81c7a7e162c3e47e51359896a628">I34581</a>, <a href="https://android-review.googlesource.com/#/q/I8dfe68f7b8700f0c1d3b13a3d5b826fc924b7452">I8dfe6</a>, <a href="https://issuetracker.google.com/issues/242570955">b/242570955</a>)</li> <li>Nested child fragments will no longer receive multiple <code translate="no" dir="ltr">onMultiWindowModeChanged()</code>, <code translate="no" dir="ltr">onPictureInPictureModeChanged()</code>, <code translate="no" dir="ltr">onLowMemory()</code>, or <code translate="no" dir="ltr">onConfigurationChanged()</code> callbacks. (<a href="https://android-review.googlesource.com/#/q/I690b3596b4f44a69c4f0b429535d609db94e5a79">I690b3</a>, <a href="https://android-review.googlesource.com/#/q/Id0096df0c7c3aed66a832e0c05e81539e1a9ca26">Id0096</a>, <a href="https://android-review.googlesource.com/#/q/If9d6bc0c4a942287b9e493b073dcb206d881df6d">If9d6b</a>, <a href="https://android-review.googlesource.com/#/q/I2cba24e9657afa65c08a53cc80756ecd02b9f1e2">I2cba2</a>)</li> </ul> <h3 id="1.5.2" data-text="Version 1.5.2" tabindex="-1">Version 1.5.2</h3> <p>August 10, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.2</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.2</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.2</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/ef17c40272c8b902ee75158214703bea97a7a298..11370054495ad6e38f7904b59d0889da5235b1ce/fragment">Version 1.5.2 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where executing a <code translate="no" dir="ltr">popBackStack()</code> and a <code translate="no" dir="ltr">replace()</code> transaction at the same time could cause exiting fragments to run the wrong <code translate="no" dir="ltr">Animation</code>/<code translate="no" dir="ltr">Animator</code>. (<a href="https://android-review.googlesource.com/#/q/Ib1c07bd0e05c0c1a3d785e29456bad9afb183e2d">Ib1c07</a>, <a href="https://issuetracker.google.com/issues/214835303">b/214835303</a>)</li> </ul> <h3 id="1.5.1" data-text="Version 1.5.1" tabindex="-1">Version 1.5.1</h3> <p>July 27, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.1</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.1</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.1</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/d5e5f4d57931a05bfd2dc75c09b3537e4d3ec976..ef17c40272c8b902ee75158214703bea97a7a298/fragment">Version 1.5.1 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fix a regression in the <code translate="no" dir="ltr">DialogFragmentCallbacksDetector</code> where using the lint version bundled with AGP 7.4 would cause lint to crash. (<a href="https://issuetracker.google.com/237567009">b/237567009</a>)</li> </ul> <p><strong>Dependency update</strong></p> <ul> <li>The Fragment library now depends on the <a href="/jetpack/androidx/releases/lifecycle#2.5.1">Lifecycle <code translate="no" dir="ltr">2.5.1</code></a>. (<a href="https://android-review.googlesource.com/#/q/Id204c8273a64607e7ee83a452a45a566f5fe0fac">Id204c</a>)</li> <li>The Fragment library now depends on <a href="/jetpack/androidx/releases/activity#1.5.1">Activity <code translate="no" dir="ltr">1.5.1</code></a>. (<a href="https://android-review.googlesource.com/#/q/I10f076fcf8083ff61904604f17a65377b0c7e6b3">I10f07</a>)</li> </ul> <h3 id="1.5.0" data-text="Version 1.5.0" tabindex="-1">Version 1.5.0</h3> <p>June 29, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/218ccafb21e861418ebb20936cad034ed012fb70..d5e5f4d57931a05bfd2dc75c09b3537e4d3ec976/fragment">Version 1.5.0 contains these commits.</a></p> <p><strong>Important changes since 1.4.0</strong></p> <ul> <li><strong>CreationExtras Integration</strong> - <code translate="no" dir="ltr">Fragment</code> now has the ability to provide a stateless <code translate="no" dir="ltr">ViewModelProvider.Factory</code> via <a href="/jetpack/androidx/releases/lifecycle#2.5.0">Lifecycle <code translate="no" dir="ltr">2.5.0</code></a>’s <code translate="no" dir="ltr">CreationExtras</code>.</li> <li><strong>Component Dialog Integration</strong> - <code translate="no" dir="ltr">DialogFragment</code> now uses <code translate="no" dir="ltr">ComponentDialog</code> via <a href="/jetpack/androidx/releases/activity#1.5.0">Activity <code translate="no" dir="ltr">1.5.0</code></a> as the default dialog returned by <code translate="no" dir="ltr">onCreateDialog()</code>.</li> <li><strong>Saved Instance State Refactoring</strong> - Fragments have begun to change the way they save their instance state. This is an effort to help clearly identify what state has been saved in the fragment and the source of the state. The current changes include the following: <ul> <li><code translate="no" dir="ltr">FragmentManager</code> now saves its saved instance state into a <code translate="no" dir="ltr">Bundle</code> instead of directly in a custom <code translate="no" dir="ltr">Parcelable</code>.</li> <li>Results set via the <a href="/guide/fragments/communicate#fragment-result"><code translate="no" dir="ltr">Fragment Result APIs</code></a> that have not yet been delivered are now saved separately from the internal state of the <code translate="no" dir="ltr">FragmentManager</code>.</li> <li>The state associated with each individual fragment is now saved separately from the internal state of the <code translate="no" dir="ltr">FragmentManager</code>, thus allowing you to correlate the amount of saved state associated with an individual fragment with the unique IDs present in the <code translate="no" dir="ltr">Fragment</code> debug logging.</li> </ul></li> </ul> <p><strong>Other Changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentStrictMode</code> now offers the ability for private third-party fragments to bypass specific violation penalties by using <code translate="no" dir="ltr">allowViolation()</code> with the class name.</li> <li>The Fragment APIs for providing a menu to your activity’s <code translate="no" dir="ltr">ActionBar</code> have been deprecated. The <code translate="no" dir="ltr">MenuHost</code> and <code translate="no" dir="ltr">MenuProvider</code> APIs added in <a href="/jetpack/androidx/releases/activity#1.4.0">Activity <code translate="no" dir="ltr">1.4.0</code></a> provide a testable, lifecycle aware equivalent API surface that fragments should use.</li> </ul> <h3 id="1.5.0-rc01" data-text="Version 1.5.0-rc01" tabindex="-1">Version 1.5.0-rc01</h3> <p>May 11, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-rc01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-rc01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-rc01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/c0a89ec374961b3015097ab307ebb8196dbe3888..218ccafb21e861418ebb20936cad034ed012fb70/fragment">Version 1.5.0-rc01 contains these commits.</a></p> <p><strong>Saved Instance State Refactoring</strong></p> <ul> <li>The state associated with each individual fragment is now saved separately from the internal state of the <code translate="no" dir="ltr">FragmentManager</code>, thus allowing you to correlate the amount of saved state associated with an individual fragment with the unique IDs present in the <a href="/guide/fragments/debugging#debug-logging">Fragment debug logging</a>. (<a href="https://android-review.googlesource.com/#/q/a153e0dc72acb0eb453499bb14d50fd774c4dd93">a153e0</a>, <a href="https://issuetracker.google.com/issues/207158202">b/207158202</a>)</li> </ul> <h3 id="1.5.0-beta01" data-text="Version 1.5.0-beta01" tabindex="-1">Version 1.5.0-beta01</h3> <p>April 20, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-beta01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-beta01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-beta01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/7ca43e00a517eaeeedc0a21f482b17f06e3d2181..c0a89ec374961b3015097ab307ebb8196dbe3888/fragment">Version 1.5.0-beta01 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">DialogFragment</code> has added a new <code translate="no" dir="ltr">dismissNow</code> method that uses <code translate="no" dir="ltr">commitNow</code> for parity with the <code translate="no" dir="ltr">showNow</code> function. Note that this will not make the <code translate="no" dir="ltr">Dialog</code> be dismissed immediately, it will only synchronously update the state of the <code translate="no" dir="ltr">FragmentManager</code>. (<a href="https://android-review.googlesource.com/#/q/I15c3618ccbea638e8f2125b5c361cce43721b017">I15c36</a>, <a href="https://issuetracker.google.com/issues/72644830">b/72644830</a>)</li> </ul> <p><strong>Saved Instance State Refactoring</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentManager</code> now saves its saved instance state into a <code translate="no" dir="ltr">Bundle</code> instead of directly in a custom <code translate="no" dir="ltr">Parcelable</code>. This is the first step in providing additional transparency into what is actually being saved by Fragments. (<a href="https://android-review.googlesource.com/#/q/I93807d8bebb127fd24d20dee23fc7813cfa0f6ab">I93807</a>, <a href="https://issuetracker.google.com/issues/207158202">b/207158202</a>)</li> <li>Results set via the <a href="/guide/fragments/communicate#fragment-result">Fragment Result APIs</a> that have not yet been delivered are now saved separately from the internal state of the <code translate="no" dir="ltr">FragmentManager</code>. This will allow for additional transparency into what results are being saved as part of your saved instance state. (<a href="https://android-review.googlesource.com/#/q/I6ea121b1c4a42408de9af44e6cd12a825ec378d1">I6ea12</a>, <a href="https://issuetracker.google.com/issues/207158202">b/207158202</a>)</li> </ul> <h3 id="1.5.0-alpha05" data-text="Version 1.5.0-alpha05" tabindex="-1">Version 1.5.0-alpha05</h3> <p>April 6, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-alpha05</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-alpha05</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-alpha05</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/5ef5671233460b844828e14a816255dbf7904868..7ca43e00a517eaeeedc0a21f482b17f06e3d2181/fragment">Version 1.5.0-alpha05 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">Fragment</code>&#39;s <code translate="no" dir="ltr">setHasOptionsMenu()</code> has been deprecated. To manage menus and their menu items, the new menu APIs should be used instead as per the <a href="#1.5.0-alpha04">Fragment <code translate="no" dir="ltr">1.5.0-alpha04</code> release notes</a>. (<a href="https://android-review.googlesource.com/#/q/I7b4b4dd5cfa1922a7ee0d1d4317a52439e780786">I7b4b4</a>, <a href="https://issuetracker.google.com/issues/226438239">b/226438239</a>)</li> </ul> <h3 id="1.5.0-alpha04" data-text="Version 1.5.0-alpha04" tabindex="-1">Version 1.5.0-alpha04</h3> <p>March 23, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-alpha04</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-alpha04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-alpha04</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/9b2b3d8efd5f00bd4af903bbaa926f6a712d0bd8..5ef5671233460b844828e14a816255dbf7904868/fragment">Version 1.5.0-alpha04 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li>The Fragment APIs for providing a menu to your activity’s <code translate="no" dir="ltr">ActionBar</code> have been deprecated as they tightly couple your fragment to your activity and are not testable in isolation. The <code translate="no" dir="ltr">MenuHost</code> and <code translate="no" dir="ltr">MenuProvider</code> APIs added in <a href="/jetpack/androidx/releases/activity#1.4.0-alpha01">Activity <code translate="no" dir="ltr">1.4.0-alpha01</code></a> provide a testable, lifecycle aware equivalent API surface that fragments should use. (<a href="https://android-review.googlesource.com/#/q/I50a599c9ee85c085e377f74353db72376dcce19a">I50a59</a>, <a href="https://android-review.googlesource.com/#/q/I2075845d3598bf3b2635512918fca04abe2e281a">I20758</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">SavedStateViewFactory</code> now supports using <code translate="no" dir="ltr">CreationExtras</code> even when it was initialized with a <code translate="no" dir="ltr">SavedStateRegistryOwner</code>. If extras are provided, the initialized arguments are ignored. (<a href="https://android-review.googlesource.com/#/q/I6c43bfd75888cb4b8bdd610cd07d4962aaba37ea">I6c43b</a>, <a href="https://issuetracker.google.com/issues/224844583">b/224844583</a>)</li> </ul> <h3 id="1.5.0-alpha03" data-text="Version 1.5.0-alpha03" tabindex="-1">Version 1.5.0-alpha03</h3> <p>February 23, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-alpha03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-alpha03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-alpha03</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/db2ecbef194afcddfaede22e1d884a8959a9277c..9b2b3d8efd5f00bd4af903bbaa926f6a712d0bd8/fragment">Version 1.5.0-alpha03 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li>You can now pass <code translate="no" dir="ltr">CreationExtras</code> to the <code translate="no" dir="ltr">by viewModels()</code> and <code translate="no" dir="ltr">by activityViewModels()</code> functions. (<a href="https://android-review.googlesource.com/#/q/Ibefe7e706d2491ee70070b07755c32c5f99cc57a">Ibefe7</a>, <a href="https://issuetracker.google.com/issues/217601110">b/217601110</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li><code translate="no" dir="ltr">DialogFragment</code> now uses <a href="/reference/kotlin/androidx/activity/ComponentDialog"><code translate="no" dir="ltr">ComponentDialog</code></a> as the default dialog returned by <code translate="no" dir="ltr">onCreateDialog()</code>. (<a href="https://android-review.googlesource.com/#/q/If3784bbe3d65184c75dd8f3f8e292aa9257297b1">If3784</a>, <a href="https://issuetracker.google.com/issues/217618170">b/217618170</a>)</li> </ul> <h3 id="1.5.0-alpha02" data-text="Version 1.5.0-alpha02" tabindex="-1">Version 1.5.0-alpha02</h3> <p>February 9, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-alpha02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-alpha02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-alpha02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/9dceceb54300ed028a7e8fc7a3454f270337ffde..db2ecbef194afcddfaede22e1d884a8959a9277c/fragment">Version 1.5.0-alpha02 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentStrictMode</code> now offers the ability for private third-party fragments to bypass specific violation penalties by using <code translate="no" dir="ltr">allowViolation()</code> with the class name. (<a href="https://android-review.googlesource.com/#/q/I8f67856db22fc99b6d06fde7e0cebb753079cc80">I8f678</a>)</li> </ul> <h3 id="1.5.0-alpha01" data-text="Version 1.5.0-alpha01" tabindex="-1">Version 1.5.0-alpha01</h3> <p>January 26, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.5.0-alpha01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.5.0-alpha01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.5.0-alpha01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/b776acc2f42697fc8a24ca96f38043a133eee415..9dceceb54300ed028a7e8fc7a3454f270337ffde/fragment">Version 1.5.0-alpha01 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">Fragment</code> now integrates with ViewModel CreationExtras, introduced as part of <a href="/jetpack/androidx/releases/lifecycle#2.5.0-alpha01">Lifecycle <code translate="no" dir="ltr">2.5.0-alpha01</code></a>. (<a href="https://android-review.googlesource.com/#/q/I3060ba63bae3019489fc54eb116c3b4c1e50d8a1">I3060b</a>, <a href="https://issuetracker.google.com/issues/207012585">b/207012585</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.4.1">Fragment <code translate="no" dir="ltr">1.4.1</code></a>: <code translate="no" dir="ltr">FragmentContainerView</code> no longer throws an illegal state exception when view IDs generated from xml have negative values. (<a href="https://android-review.googlesource.com/#/q/Ic185b1efe5b48b616881e51b7b892c0f3bfc8e92">Ic185b</a>, <a href="https://issuetracker.google.com/issues/213086140">b/213086140</a>)</li> <li>From <a href="#1.4.1">Fragment <code translate="no" dir="ltr">1.4.1</code></a>: When using a custom <code translate="no" dir="ltr">ownerProducer</code> lambda with the <code translate="no" dir="ltr">by viewModels()</code> lazy function, it will now use the <code translate="no" dir="ltr">defaultViewModelProviderFactory</code> from that owner if a custom <code translate="no" dir="ltr">ViewModelProvider.Factory</code> is not provided instead of always using the fragment&#39;s factory. (<a href="https://android-review.googlesource.com/#/q/I561707e21a66afb0540c941bd5b94f834dc3953c">I56170</a>, <a href="https://issuetracker.google.com/issues/214106513">b/214106513</a>)</li> <li>Fixed a crash when accessing a <code translate="no" dir="ltr">ViewModel</code>for the very first time from a <code translate="no" dir="ltr">registerForActivityResult()</code> callback of a <code translate="no" dir="ltr">Fragment</code>. (<a href="https://android-review.googlesource.com/#/q/Iea2b30ca03908798474cac9327c4e06e3d4fd09b">Iea2b3</a>)</li> </ul> <h2 id="version_14_2" data-text="Version 1.4" tabindex="-1">Version 1.4</h2> <h3 id="1.4.1" data-text="Version 1.4.1" tabindex="-1">Version 1.4.1</h3> <p>January 26, 2022</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.1</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.1</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.1</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/b776acc2f42697fc8a24ca96f38043a133eee415..70c414acc064e4d3bfd7d0eafbaff50dd8aac5ce/fragment">Version 1.4.1 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code> no longer throws an illegal state exception when view IDs generated from xml have negative values. (<a href="https://android-review.googlesource.com/#/q/Ic185b1efe5b48b616881e51b7b892c0f3bfc8e92">Ic185b</a>, <a href="https://issuetracker.google.com/issues/213086140">b/213086140</a>)</li> <li>When using a custom <code translate="no" dir="ltr">ownerProducer</code> lambda with the <code translate="no" dir="ltr">by viewModels()</code> lazy function, it will now use the <code translate="no" dir="ltr">defaultViewModelProviderFactory</code> from that owner if a custom <code translate="no" dir="ltr">ViewModelProvider.Factory</code> is not provided instead of always using the fragment&#39;s factory. (<a href="https://android-review.googlesource.com/#/q/I561707e21a66afb0540c941bd5b94f834dc3953c">I56170</a>, <a href="https://issuetracker.google.com/issues/214106513">b/214106513</a>)</li> </ul> <h3 id="1.4.0" data-text="Version 1.4.0" tabindex="-1">Version 1.4.0</h3> <p>November 17, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/02d119fbee4cdfe60f6b1b1a4ee172a726f26963..b776acc2f42697fc8a24ca96f38043a133eee415/fragment">Version 1.4.0 contains these commits.</a></p> <p><strong>Important changes since 1.3.0</strong></p> <ul> <li>The <code translate="no" dir="ltr">FragmentStrictMode</code> APIs provide <em>runtime</em> checks that allow you to verify that your app or libraries you depend on are not calling deprecated fragment APIs. When a violation is detected, you can choose to print a log message, trigger your own custom listener, or crash your app. The <code translate="no" dir="ltr">FragmentStrictMode.Policy</code> that controls what checks are enabled and what “penalties” are triggered can be set on a <code translate="no" dir="ltr">FragmentManager</code> via the new <code translate="no" dir="ltr">setStrictModePolicy()</code> method. That policy applies to that <code translate="no" dir="ltr">FragmentManager</code> and transitively to any child fragment managers that do not set their own unique policy. See <a href="/guide/fragments/debugging#strictmode">StrictMode for fragments</a>.</li> <li><p><code translate="no" dir="ltr">FragmentContainerView</code> now provides a <code translate="no" dir="ltr">getFragment()</code> method which returns the fragment that was most recently added to the container. This uses the same logic as <code translate="no" dir="ltr">findFragmentById()</code> with the ID of the <code translate="no" dir="ltr">FragmentContainerView</code>, but allows chaining the call.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Kotlin"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">navController</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">binding</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">container</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getFragment&lt;NavHostFragment&gt;</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">navController</span> </code></pre></devsite-code></li> <li><p><code translate="no" dir="ltr">FragmentScenario</code> now implements <code translate="no" dir="ltr">Closeable</code>, allowing you to use it with Kotlin’s <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/use.html"><code translate="no" dir="ltr">use</code></a> method or <a href="https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html">try-with-resources</a>.</p></li> <li><p>Added <code translate="no" dir="ltr">FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}</code> to specify whether to enable the standard Activity-transition animation taken from your theme in Fragments transition.</p></li> <li><p>The experimental API of <code translate="no" dir="ltr">FragmentManager.enableNewStateManager(boolean)</code> has been removed and the <a href="https://medium.com/androiddevelopers/fragments-rebuilding-the-internals-61913f8bf48e">new state manager</a> is now the only option available.</p></li> </ul> <p><strong>Multiple back stacks</strong></p> <p>The <code translate="no" dir="ltr">FragmentManager</code> maintains a back stack made up of fragment transactions that used <a href="/reference/androidx/fragment/app/FragmentTransaction#addToBackStack(java.lang.String)"><code translate="no" dir="ltr">addToBackStack()</code></a>. This allows you to pop those transactions and return to the previous state, using the mechanisms for <a href="/guide/fragments/saving-state">Saving state with fragments</a> to allow your fragments to restore their state appropriately.</p> <p>This release expands on these mechanisms by providing three new <code translate="no" dir="ltr">FragmentManager</code> APIs: <code translate="no" dir="ltr">saveBackStack(String name)</code>, <code translate="no" dir="ltr">restoreBackStack(String name)</code>, and <code translate="no" dir="ltr">clearBackStack(String name)</code>. These APIs use the same <code translate="no" dir="ltr">name</code> as <code translate="no" dir="ltr">addToBackStack()</code> to save the state of the <code translate="no" dir="ltr">FragmentTransaction</code> and the state of every fragment that was added in those transactions and allow you to later restore those transactions and their fragments with their state in tact. This allows you to effectively ‘swap’ between multiple back stacks by saving the current back stack and restoring a saved back stack.</p> <p><code translate="no" dir="ltr">saveBackStack()</code> operates similarly to <a href="/reference/androidx/fragment/app/FragmentManager#popBackStack(java.lang.String,%20int)"><code translate="no" dir="ltr">popBackStack()</code></a> in that it is asynchronous and results in all the fragment transactions back to that specific name to be reversed (‘popped’) and any added fragments to be destroyed and removed, but it differs in a few important ways:</p> <ul> <li><code translate="no" dir="ltr">saveBackStack()</code> is always inclusive.</li> <li>Unlike <code translate="no" dir="ltr">popBackStack()</code> which will pop <strong>all</strong> transactions on the back stack if the specified name is not found on the back stack or if a null name is provided, <code translate="no" dir="ltr">saveBackStack()</code> does nothing if you haven’t previously committed a fragment transaction using <code translate="no" dir="ltr">addToBackStack()</code> with that exact, non-null name.</li> <li>The state of all fragments added from those transactions is saved. This means that the View state of every fragment is stored, <code translate="no" dir="ltr">onSaveInstanceState()</code> of every fragment is called and that state is restored, and any <code translate="no" dir="ltr">ViewModel</code> instances associated with those fragments are retained (and <code translate="no" dir="ltr">onCleared()</code> is <strong>not</strong> called on them).</li> </ul> <p>The fragment transactions that can be used with <code translate="no" dir="ltr">saveBackStack()</code> must meet certain criteria:</p> <ul> <li>Every fragment transaction must use <a href="/reference/androidx/fragment/app/FragmentTransaction#setReorderingAllowed(boolean)"><code translate="no" dir="ltr">setReorderingAllowed(true)</code></a> to ensure the transactions can be restored as a single, atomic operation.</li> <li>The set of transactions saved must be self-contained (i.e., they must <strong>not</strong> explicitly reference any fragments outside of that set of transactions) to ensure that they can be restored at any later time, no matter what changes have been made to the back stack in the intervening time.</li> <li>No fragment that is saved can be a retained fragment or have a retained fragment in their transitive set of child fragments to ensure that the <code translate="no" dir="ltr">FragmentManager</code> does not return any references to saved fragments after the back stack is saved.</li> </ul> <p>Similar to <code translate="no" dir="ltr">saveBackStack()</code>, <code translate="no" dir="ltr">restoreBackStack()</code> and <code translate="no" dir="ltr">clearBackStack()</code>, which would restore a previously saved back stack or clear a previously saved back stack, respectively, both do nothing if you have not previously called <code translate="no" dir="ltr">saveBackStack()</code> with the same name.</p> <p>For more information, see <a href="https://medium.com/androiddevelopers/multiple-back-stacks-b714d974f134">Multiple back stacks: A deep dive</a>.</p> <h3 id="1.4.0-rc01" data-text="Version 1.4.0-rc01" tabindex="-1">Version 1.4.0-rc01</h3> <p>November 3, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-rc01</code> released with no changes from Fragment 1.4.0-beta01. <a href="https://android.googlesource.com/platform/frameworks/support/+log/ca6054a5e12fcf05ba5e20bf93403afdab093986..02d119fbee4cdfe60f6b1b1a4ee172a726f26963/fragment">Version 1.4.0-rc01 contains these commits.</a></p> <h3 id="1.4.0-beta01" data-text="Version 1.4.0-beta01" tabindex="-1">Version 1.4.0-beta01</h3> <p>October 27, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-beta01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-beta01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-beta01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/da9716386798fc4e39075f54e5bd3317384a63e6..ca6054a5e12fcf05ba5e20bf93403afdab093986/fragment">Version 1.4.0-beta01 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Parent fragments will now dispatch <code translate="no" dir="ltr">onHiddenChanged()</code> down their entire hierarchy before launching their own callback. (<a href="https://android-review.googlesource.com/#/q/Iedc201ab435cb963e81bc02d203d4d37ff827e01">Iedc20</a>, <a href="https://issuetracker.google.com/issues/77504618">b/77504618</a>)</li> <li>The keyboard will now close automatically when going from a fragment with an open keyboard to a fragment with a recycler view. (<a href="https://android-review.googlesource.com/#/q/I8b842dd9a421cfbc9189014b802f5e4b6b9c2a47">I8b842</a>, <a href="https://issuetracker.google.com/issues/196852211">b/196852211</a>)</li> <li><code translate="no" dir="ltr">DialogFragment</code> now uses <code translate="no" dir="ltr">setReorderingAllowed(true)</code> for all transactions it creates when you call <code translate="no" dir="ltr">show()</code>, <code translate="no" dir="ltr">showNow()</code>, or <code translate="no" dir="ltr">dismiss()</code>. (<a href="https://android-review.googlesource.com/#/q/Ie2c14fb6d11b426ea0b2c26b035a962f08ddc586">Ie2c14</a>)</li> <li>The extremely long Lint warning of <code translate="no" dir="ltr">DetachAndAttachFragmentInSameFragmentTransaction</code> has been shortened to <code translate="no" dir="ltr">DetachAndAttachSameFragment</code>. (<a href="https://android-review.googlesource.com/#/q/e9eca34ab9edfad6e1b8e9c1a6a26dd26e166998">e9eca3</a>)</li> </ul> <h3 id="1.4.0-alpha10" data-text="Version 1.4.0-alpha10" tabindex="-1">Version 1.4.0-alpha10</h3> <p>September 29, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha10</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha10</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha10</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/1a3dcfb231517d6104969f17063fcc6c97ba6eeb..da9716386798fc4e39075f54e5bd3317384a63e6/fragment">Version 1.4.0-alpha10 contains these commits.</a></p> <p><strong>Lint</strong></p> <ul> <li>Added the <code translate="no" dir="ltr">DetachAndAttachFragmentInSameFragmentTransaction</code> lint warning for detecting calling both <code translate="no" dir="ltr">detach()</code> and <code translate="no" dir="ltr">attach()</code> on the same <code translate="no" dir="ltr">Fragment</code> in the same <code translate="no" dir="ltr">FragmentTransaction</code> - as these complementary operations cancel each other out when done in the same transaction, they must be split into separate transactions to actually do anything. (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/1832956/">aosp/1832956</a>, <a href="https://issuetracker.google.com/issues/200867930">b/200867930</a>)</li> <li>Added the <code translate="no" dir="ltr">FragmentAddMenuProvider</code> lint error for correcting usages of the Fragment Lifecycle to the Fragment view Lifecycle when using the <code translate="no" dir="ltr">addMenuProvider</code> API of <code translate="no" dir="ltr">MenuHost</code>. (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/1830457/">aosp/1830457</a>, <a href="https://issuetracker.google.com/issues/200326272">b/200326272</a>)</li> </ul> <p><strong>Documentation Updates</strong></p> <ul> <li>The deprecation message for APIs now handled by the <a href="https://developer.android.com/training/basics/intents/result">Activity Result APIs</a>, namely <code translate="no" dir="ltr">startActivityForResult</code>, <code translate="no" dir="ltr">startIntentSenderForResult</code>, <code translate="no" dir="ltr">onActivityResult</code>, <code translate="no" dir="ltr">requestPermissions</code>, and <code translate="no" dir="ltr">onRequestPermissionsResult</code>, have all been expanded with more details. (<a href="https://android-review.googlesource.com/#/q/cce80f6e9e1ae0f5b3390b59c5cf1321443ab81f">cce80f</a>)</li> <li>The deprecation message for <code translate="no" dir="ltr">onActivityCreated()</code> for both <code translate="no" dir="ltr">Fragment</code> and <code translate="no" dir="ltr">DialogFragment</code> has all been expanded with more details. (<a href="https://android-review.googlesource.com/#/q/244db49af2b0fa925892da5860462631d32c114d">224db4</a>)</li> </ul> <h3 id="1.4.0-alpha09" data-text="Version 1.4.0-alpha09" tabindex="-1">Version 1.4.0-alpha09</h3> <p>September 15, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha09</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha09</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha09</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/47e81d1c497b8a57534a460c277855db1b0257ae..1a3dcfb231517d6104969f17063fcc6c97ba6eeb/fragment">Version 1.4.0-alpha09 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>You can now call <code translate="no" dir="ltr">clearBackStack(name)</code> to clear any state previously saved with <code translate="no" dir="ltr">saveBackStack(name)</code>. (<a href="https://android-review.googlesource.com/#/q/I70cd75a17faffed340424ef0769bd312df9035ae">I70cd7</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">FragmentContainerView</code> class has been rewritten in Kotlin ensuring that the <code translate="no" dir="ltr">getFragment</code> function will properly respect nullability. (<a href="https://android-review.googlesource.com/#/q/If694a3b70bf84f03c95d67d20e58485135ab7d86">If694a</a>, <a href="https://issuetracker.google.com/issues/189629145">b/189629145</a>)</li> <li>FragmentStrictMode is now written in Kotlin (<a href="https://android-review.googlesource.com/#/q/I117679edc3af067bb0ef901714ace02712c97a40">I11767</a>, <a href="https://issuetracker.google.com/issues/199183506">b/199183506</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where the state of a Fragment that was added with <code translate="no" dir="ltr">setReorderingAllowed(true)</code> and then immediately removed before executing pending transactions would not be properly cleaned up. (<a href="https://android-review.googlesource.com/#/q/I8ccb834a4337dda503e64402dab4aca807d81788">I8ccb8</a>)</li> </ul> <h3 id="1.4.0-alpha08" data-text="Version 1.4.0-alpha08" tabindex="-1">Version 1.4.0-alpha08</h3> <p>September 1, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha08</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha08</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha08</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/1e0ab9e58c3c2ebe8152b7507938aef7e9c1acdc..47e81d1c497b8a57534a460c277855db1b0257ae/fragment">Version 1.4.0-alpha08 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Improved the <code translate="no" dir="ltr">UseRequireInsteadOfGet</code> Lint check to better handle redundant parenthesis. (<a href="https://android-review.googlesource.com/#/q/I2d86527576efa558ea06c270edfd7f34de1a8f5c">I2d865</a>)</li> <li>Improved the <code translate="no" dir="ltr">UseGetLayoutInflater</code> Lint check to handle additional edge cases. (<a href="https://android-review.googlesource.com/#/q/Ie54235d4169c5042441f3e9608296ae4de670850">Ie5423</a>)</li> </ul> <h3 id="1.4.0-alpha07" data-text="Version 1.4.0-alpha07" tabindex="-1">Version 1.4.0-alpha07</h3> <p>August 18, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha07</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha07</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha07</code> are released with no notable changes. <a href="https://android.googlesource.com/platform/frameworks/support/+log/d725303accfa9be6d5c3d61c7603ed1b9a780cbd..1e0ab9e58c3c2ebe8152b7507938aef7e9c1acdc/fragment">Version 1.4.0-alpha07 contains these commits.</a></p> <h3 id="1.4.0-alpha06" data-text="Version 1.4.0-alpha06" tabindex="-1">Version 1.4.0-alpha06</h3> <p>August 4, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha06</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha06</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha06</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/97264aa4532db7f7db1ffb3f42f3a9204971dbfc..d725303accfa9be6d5c3d61c7603ed1b9a780cbd/fragment">Version 1.4.0-alpha06 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue with multiple back stacks when rapidly swapping between back stacks that would appear as an <code translate="no" dir="ltr">IllegalStateException</code> while restoring a <code translate="no" dir="ltr">FragmentTransaction</code> or as a second copy of a fragment appearing. (<a href="https://android-review.googlesource.com/#/q/I9039f01490dae53cb66ef435161b153b4a0568ff">I9039f</a>)</li> <li>Fixed an issue where <code translate="no" dir="ltr">FragmentManager</code> would hold onto a copy of state previously saved via <code translate="no" dir="ltr">saveBackStack()</code> even after that state was restored. (<a href="https://android-review.googlesource.com/#/q/Ied212e256fedc5ba5288d046c023ba1b767a894a">Ied212</a>)</li> <li>The <code translate="no" dir="ltr">dismissAllowingStateLoss()</code> method of <code translate="no" dir="ltr">DialogFragment</code> no longer crashes when you call it after the state is saved when specifically adding the DialogFragment via the <code translate="no" dir="ltr">show(FragmentTransaction, String)</code> method. (<a href="https://android-review.googlesource.com/#/q/I844222aba9e56d7ae6b0cdb57793ab38f6dbe4c1">I84422</a>)</li> </ul> <h3 id="1.4.0-alpha05" data-text="Version 1.4.0-alpha05" tabindex="-1">Version 1.4.0-alpha05</h3> <p>July 21, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha05</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha05</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha05</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/19ae3a88ff0824d615355b492cb56049e16991f2..97264aa4532db7f7db1ffb3f42f3a9204971dbfc/fragment">Version 1.4.0-alpha05 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="/jetpack/androidx/releases/fragment#1.3.6">Fragment <code translate="no" dir="ltr">1.3.6</code></a>: The Fragment’s view is now properly set to <code translate="no" dir="ltr">GONE</code> when using <code translate="no" dir="ltr">hide()</code> when the root view has <code translate="no" dir="ltr">transitionGroup=”true”</code> set. (<a href="https://android-review.googlesource.com/1766655">aosp/1766655</a>, <a href="https://issuetracker.google.com/issues/193603427">b/193603427</a>)</li> <li>From <a href="/jetpack/androidx/releases/fragment#1.3.6">Fragment <code translate="no" dir="ltr">1.3.6</code></a>: <code translate="no" dir="ltr">FragmentActivity</code> now always unlocks the saved state as its first operation in lifecycle callbacks it overrides. (<a href="https://android-review.googlesource.com/#/q/I6db7adb364dfbdd922a376242d54519028d4a9c9">I6db7a</a>)</li> </ul> <p><strong>Dependency update</strong></p> <ul> <li>From <a href="/jetpack/androidx/releases/fragment#1.3.6">Fragment <code translate="no" dir="ltr">1.3.6</code></a>: Fragments now depends on <a href="/jetpack/androidx/releases/activity#1.2.4">Activity <code translate="no" dir="ltr">1.2.4</code></a> (<a href="https://android-review.googlesource.com/#/q/I3a66c06ec44c43106e6f7fb48ba9b9f964429b45">I3a66c</a>)</li> </ul> <h3 id="1.4.0-alpha04" data-text="Version 1.4.0-alpha04" tabindex="-1">Version 1.4.0-alpha04</h3> <p>June 30, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha04</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha04</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/ccf79f53033e665475116a4e78ff124df2a52c4b..19ae3a88ff0824d615355b492cb56049e16991f2/fragment">Version 1.4.0-alpha04 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentManager</code> now uses <code translate="no" dir="ltr">SavedStateRegistry</code> under the hood to save its state. The <code translate="no" dir="ltr">saveAllState()</code> and <code translate="no" dir="ltr">restoreSavedState()</code> methods have also been deprecated in <code translate="no" dir="ltr">FragmentController</code>. If you are using <code translate="no" dir="ltr">FragmentController</code> to host fragments outside of <code translate="no" dir="ltr">FragmentActivity</code>, you should have your <code translate="no" dir="ltr">FragmentHostCallbacks</code> implement <code translate="no" dir="ltr">SavedStateRegistryOwner</code>. (<a href="https://android-review.googlesource.com/#/q/Iba68e71ee9ec0befa79a565a476d25534e86d0e3">Iba68e</a>, <a href="https://issuetracker.google.com/issues/188734238">b/188734238</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where the call to <code translate="no" dir="ltr">saveBackStack()</code> as part of supporting multiple back stacks would fail when done at the same time as running a <code translate="no" dir="ltr">FragmentTransaction</code> that used <code translate="no" dir="ltr">replace()</code>. (<a href="https://android-review.googlesource.com/#/q/I731372db582f00dc3da4fb05a4f2892378945618">I73137</a>)</li> <li>Fixed a <code translate="no" dir="ltr">NullPointerException</code> that would occur after manually restoring a saved back stack that contained multiple transactions when using the <code translate="no" dir="ltr">restoreBackStack()</code> API for multiple back stack support. This also fixed an issue where <code translate="no" dir="ltr">setReorderingAllowed(true)</code> was not being checked for all transactions. (<a href="https://android-review.googlesource.com/#/q/I8c59355e8899ed86c4e54cccc18af5475a78b319">I8c593</a>)</li> <li>Fixed an issue where <code translate="no" dir="ltr">FragmentManager</code> would incorrectly continue to restore previously saved state of fragments even after those fragments were removed from the <code translate="no" dir="ltr">FragmentManager</code>, thus causing the saved state to continuously grow over time. (<a href="https://android-review.googlesource.com/#/q/I1fb8eb6942bc385794308bc2056f365472e5a47c">I1fb8e</a>)</li> </ul> <h3 id="1.4.0-alpha03" data-text="Version 1.4.0-alpha03" tabindex="-1">Version 1.4.0-alpha03</h3> <p>June 16, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha03</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/86ff5b4bb956431ec884586ce0aea0127e189ec4..ccf79f53033e665475116a4e78ff124df2a52c4b/fragment">Version 1.4.0-alpha03 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>All Fragment StrictMode <a href="https://developer.android.com/reference/androidx/fragment/app/strictmode/Violation"><code translate="no" dir="ltr">Violation</code></a> classes have been updated with more detailed error messages that explain the details of the violation. (<a href="https://issuetracker.google.com/issues/187871638">b/187871638</a>) <ul> <li><code translate="no" dir="ltr">FragmentTagUsageViolation</code> now contains more detailed error message that container the parent container that the fragment would have been added to. (<a href="https://android-review.googlesource.com/#/q/Ic33a7bfc836a8640b04af915268f5bc9e027bde3">Ic33a7</a>)</li> <li><code translate="no" dir="ltr">WrongFragmentContainerViolation</code> now has more detailed error message that includes the container that the fragment was being added to. (<a href="https://android-review.googlesource.com/#/q/Ib55f8e4c05e8e2ff6c25916df0749d820ade30d3">Ib55f8</a>)</li> <li>The use case classes for <code translate="no" dir="ltr">TargetFragmentUsageViolation</code> now have more detailed error messages to include the fragment causing the violation and any other contained information. (<a href="https://android-review.googlesource.com/#/q/Icc6aceb7a1fd79894fea1837be43a3090c2af4a6">Icc6ac</a>)</li> <li>The classes extending <code translate="no" dir="ltr">RetainInstanceUsageViolation</code> now have more detailed error messages that include the fragment causing the violation. (<a href="https://android-review.googlesource.com/#/q/I6bd559d35f8b4f9aa340efa3f36cb4aab782bc22">I6bd55</a>)</li> <li><code translate="no" dir="ltr">FragmentReuseViolation</code> now has more detailed error message that includes the previous id of the fragment. (<a href="https://android-review.googlesource.com/#/q/I28ce254ddb61dc3bf4daddfc8cc7eb6985b8b611">I28ce2</a>)</li> <li><code translate="no" dir="ltr">SetUserVisibleHintViolation</code> now has more detailed error message that includes what the user visible hint was being set to. (<a href="https://android-review.googlesource.com/#/q/Ib2d5f91e4ad0575278c04de7721c6f3ad63e5f48">Ib2d5f</a>)</li> </ul></li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>Reverted the restriction on calling <code translate="no" dir="ltr">fitsSystemWindows</code> on a <code translate="no" dir="ltr">FragmentContainerView</code> - this no longer crashes your app. (<a href="https://android-review.googlesource.com/#/q/6b8ddd6cc0bc6df558c5c0e009708d4fbae10a77">6b8ddd</a>, <a href="https://issuetracker.google.com/issues/190622202">b/190622202</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.3.5">Fragment <code translate="no" dir="ltr">1.3.5</code></a>: Fixed a regression in shared element transitions introduced in <a href="#1.3.4">Fragment <code translate="no" dir="ltr">1.3.4</code></a> by <a href="https://android-review.googlesource.com/1679887/">aosp/1679887</a>. Fragments now correctly handle transition groups (either set directly via <code translate="no" dir="ltr">transitionGroup=&quot;true&quot;</code> or indirectly via a <code translate="no" dir="ltr">transitionName</code> or <code translate="no" dir="ltr">background</code>) and shared elements will no longer throw <code translate="no" dir="ltr">IndexOutOfBoundsException</code>s. (<a href="https://android-review.googlesource.com/#/q/I164845639cae1f64cf54e4e89b2a24d7eb649beb">I16484</a>, <a href="https://issuetracker.google.com/issues/188679569">b/188679569</a>, <a href="https://issuetracker.google.com/issues/188969304">b/188969304</a>)</li> <li>The <code translate="no" dir="ltr">FragmentManager</code> will no longer crash when you attempt to hide a removing fragment. (<a href="https://android-review.googlesource.com/#/q/I573ddcfcd1b9c782b5546dd4643e0e4ed042b277">I573dd</a>, <a href="https://issuetracker.google.com/issues/183634730">b/183634730</a>)</li> <li>The <code translate="no" dir="ltr">OnCreateDialogIncorrectCallback</code> lint check will no longer crash when evaluating a top level variable. (<a href="https://android-review.googlesource.com/#/q/0a9efa914d322810f8dc8d9ba06e79d164c8892d">0a9efa</a>, <a href="https://issuetracker.google.com/issues/189967522">b/189967522</a>)</li> </ul> <h3 id="1.4.0-alpha02" data-text="Version 1.4.0-alpha02" tabindex="-1">Version 1.4.0-alpha02</h3> <p>June 2, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/66681ad83c328d0dd821b943bb3d375f02c1db61..86ff5b4bb956431ec884586ce0aea0127e189ec4/fragment">Version 1.4.0-alpha02 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentStrictMode</code> will now always log violations when logging is enabled via the <code translate="no" dir="ltr">FragmentManager</code>, regardless of the current strict mode policy being used. (<a href="https://android-review.googlesource.com/#/q/I02df6361e86124563757d152993aba6468d400f3">I02df6</a>, <a href="https://issuetracker.google.com/issues/187872638">b/187872638</a>)</li> <li><p><code translate="no" dir="ltr">FragmentStrictMode</code> now supports exempting particular <code translate="no" dir="ltr">Fragment</code> classes from strict mode <code translate="no" dir="ltr">Violation</code>s allowing that class to bypass any penalties. (<a href="https://android-review.googlesource.com/#/q/Ib4e5d6217110d76bcc9ce2a15b12e350ccbc773b">Ib4e5d</a>, <a href="https://issuetracker.google.com/issues/184786736">b/184786736</a>)</p></li> <li><p>The <code translate="no" dir="ltr">FragmentStrictMode</code> <code translate="no" dir="ltr">Violation</code> class has been expanded to add structure information based on each violation. This allows you to verify exactly what caused the violation along with the violating fragment (<a href="https://android-review.googlesource.com/#/q/If5118b1a169e4050620d4aac084d4692393e4e04">If5118</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>), each <code translate="no" dir="ltr">Violation</code> contains the following:</p> <ul> <li><code translate="no" dir="ltr">WrongFragmentContainerViolation</code> now contains the <code translate="no" dir="ltr">ViewGroup</code> that the <code translate="no" dir="ltr">Fragment</code> was attempting to be added to. (<a href="https://android-review.googlesource.com/#/q/I83c75a2b30f2defef7868e6d1b1d7ea63e576c57">I83c75</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>)</li> <li><code translate="no" dir="ltr">TargetFragmentUsageViolation</code>has been expanded into, <code translate="no" dir="ltr">SetTargetFragmentUsageViolation</code>, <code translate="no" dir="ltr">GetTargetFragmentUsageViolation</code>, and <code translate="no" dir="ltr">GetTargetFragmentRequestCodeUsageViolation</code>, with <code translate="no" dir="ltr">SetTargetFragmentUsageViolation</code> containing the target fragment and request code. (<a href="https://android-review.googlesource.com/#/q/I741b4e0b8aff45babe1a453d41149c7972538789">I741b4</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>)</li> <li><code translate="no" dir="ltr">SetUserVisibleHintViolation</code> now contains the boolean value passed into <code translate="no" dir="ltr">setUserVisibleHint()</code>. (<a href="https://android-review.googlesource.com/#/q/I0058552a0176f3e964ceda122b1eb2540490d1a5">I00585</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>)</li> <li><code translate="no" dir="ltr">FragmentTagUsageViolation</code> now contains the ViewGroup that the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag was attempting to inflate a fragment into.(<a href="https://android-review.googlesource.com/#/q/I5dbbc3bc1e318dca326b2d58ad5e9b421e33b072">I5dbbc</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>)</li> <li><code translate="no" dir="ltr">FragmentReuseViolation</code> now contains the unique ID of the previous instance of the <code translate="no" dir="ltr">Fragment</code> that caused the viotion. (<a href="https://android-review.googlesource.com/#/q/I0544d256d72efc8bfa3e3eaddd5c36189d09e0ae">I0544d</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>)</li> <li><code translate="no" dir="ltr">RetainInstanceUsageViolation</code> is now abstract and has two subclasses, <code translate="no" dir="ltr">SetRetainInstanceUsageViolation</code> and <code translate="no" dir="ltr">GetRetainInstanceUsageViolation</code>, representing the two cases for the violation type. (<a href="https://android-review.googlesource.com/#/q/Ic81e5ce6a552f47137cf9d101bc6ce81a3f61db3">Ic81e5</a>, <a href="https://issuetracker.google.com/issues/187871150">b/187871150</a>)</li> </ul></li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code> now throws an exception when attempting to change the <code translate="no" dir="ltr">fitsSystemWindow</code> attribute programmatically or via XML. Insets should be handled by each individual fragment’s view. (<a href="https://android-review.googlesource.com/#/q/Ie6651e5de15e2f99f3a6c9fe1554928f34821782">Ie6651</a>, <a href="https://issuetracker.google.com/issues/187304502">b/187304502</a>)</li> </ul> <h3 id="1.4.0-alpha01" data-text="Version 1.4.0-alpha01" tabindex="-1">Version 1.4.0-alpha01</h3> <p>May 18, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.4.0-alpha01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.4.0-alpha01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.4.0-alpha01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/a12bda4096b6d81e46ecf935fe7140fb80dc61e0..66681ad83c328d0dd821b943bb3d375f02c1db61/fragment">Version 1.4.0-alpha01 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><p><code translate="no" dir="ltr">FragmentContainerView</code> now provides a <code translate="no" dir="ltr">getFragment()</code> method which returns the fragment that was most recently added to the container. This uses the same logic as <code translate="no" dir="ltr">findFragmentById()</code> with the ID of the <code translate="no" dir="ltr">FragmentContainerView</code>, but allows chaining the call. (<a href="https://android-review.googlesource.com/#/q/Ife17ac3a7afe345a8a2e8e1bdf9281fabd63a2d1">Ife17a</a>, <a href="https://issuetracker.google.com/issues/162527857">b/162527857</a>)</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Kotlin"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">val</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">navController</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">binding</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">container</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getFragment&lt;NavHostFragment&gt;</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">navController</span> </code></pre></devsite-code></li> <li><p>Added <code translate="no" dir="ltr">FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}</code> to specify whether to enable the standard Activity-transition animation taken from your theme in Fragments transition. (<a href="https://android-review.googlesource.com/#/q/I46652ec813b0413a55d6c90efb656f6d9691c211">I46652</a>)</p></li> </ul> <p><strong>Multiple back stacks</strong></p> <p>The <code translate="no" dir="ltr">FragmentManager</code> maintains a back stack made up of fragment transactions that used <a href="/reference/androidx/fragment/app/FragmentTransaction#addToBackStack(java.lang.String)"><code translate="no" dir="ltr">addToBackStack()</code></a>. This allows you to pop those transactions and return to the previous state, using the mechanisms for <a href="/guide/fragments/saving-state">Saving state with fragments</a> to allow your fragments to restore their state appropriately.</p> <p>This release expands on these mechanisms by providing two new <code translate="no" dir="ltr">FragmentManager</code> APIs: <code translate="no" dir="ltr">saveBackStack(String name)</code> and <code translate="no" dir="ltr">restoreBackStack(String name)</code>. These APIs use the same <code translate="no" dir="ltr">name</code> as <code translate="no" dir="ltr">addToBackStack()</code> to save the state of the <code translate="no" dir="ltr">FragmentTransaction</code> and the state of every fragment that was added in those transactions and allow you to later restore those transactions and their fragments with their state in tact. This allows you to effectively ‘swap’ between multiple back stacks by saving the current back stack and restoring a saved back stack.</p> <p><code translate="no" dir="ltr">saveBackStack()</code> operates similarly to <a href="/reference/androidx/fragment/app/FragmentManager#popBackStack(java.lang.String,%20int)"><code translate="no" dir="ltr">popBackStack()</code></a> in that it is asynchronous and results in all the fragment transactions back to that specific name to be reversed (‘popped’) and any added fragments to be destroyed and removed, but it differs in a few important ways:</p> <ul> <li><code translate="no" dir="ltr">saveBackStack()</code> is always inclusive.</li> <li>Unlike <code translate="no" dir="ltr">popBackStack()</code> which will pop <strong>all</strong> transactions on the back stack if the specified name is not found on the back stack or if a null name is provided, <code translate="no" dir="ltr">saveBackStack()</code> does nothing if you haven’t previously committed a fragment transaction using <code translate="no" dir="ltr">addToBackStack()</code> with that exact, non-null name.</li> <li>The state of all fragments added from those transactions is saved. This means that the View state of every fragment is stored, <code translate="no" dir="ltr">onSaveInstanceState()</code> of every fragment is called and that state is restored, and any <code translate="no" dir="ltr">ViewModel</code> instances associated with those fragments are retained (and <code translate="no" dir="ltr">onCleared()</code> is <strong>not</strong> called on them).</li> </ul> <p>The fragment transactions that can be used with <code translate="no" dir="ltr">saveBackStack()</code> must meet certain criteria:</p> <ul> <li>Every fragment transaction must use <a href="/reference/androidx/fragment/app/FragmentTransaction#setReorderingAllowed(boolean)"><code translate="no" dir="ltr">setReorderingAllowed(true)</code></a> to ensure the transactions can be restored as a single, atomic operation.</li> <li>The set of transactions saved must be self-contained (i.e., they must <strong>not</strong> explicitly reference any fragments outside of that set of transactions) to ensure that they can be restored at any later time, no matter what changes have been made to the back stack in the intervening time.</li> <li>No fragment that is saved can be a retained fragment or have a retained fragment in their transitive set of child fragments to ensure that the <code translate="no" dir="ltr">FragmentManager</code> does not return any references to saved fragments after the back stack is saved.</li> </ul> <p>Similar to <code translate="no" dir="ltr">saveBackStack()</code>, <code translate="no" dir="ltr">restoreBackStack()</code> does nothing if you have not previously called <code translate="no" dir="ltr">saveBackStack()</code> with the same name. (<a href="https://issuetracker.google.com/80029773">b/80029773</a>)</p> <p><strong>Fragment StrictMode</strong></p> <p>The <code translate="no" dir="ltr">FragmentStrictMode</code> APIs provide <em>runtime</em> checks that allow you to verify that your app or libraries you depend on are not calling deprecated fragment APIs. When a violation is detected, you can choose to print a log message, trigger your own custom listener, or crash your app. The <code translate="no" dir="ltr">FragmentStrictMode.Policy</code> that controls what checks are enabled and what “penalties” are triggered can be set on a <code translate="no" dir="ltr">FragmentManager</code> via the new <code translate="no" dir="ltr">setStrictModePolicy()</code> method. That policy applies to that <code translate="no" dir="ltr">FragmentManager</code> and transitively to any child fragment managers that do not set their own unique policy. (<a href="https://github.com/androidx/androidx/pull/123">#123</a>, <a href="https://github.com/androidx/androidx/pull/131">#131</a>, <a href="https://github.com/androidx/androidx/pull/150">#150</a>, <a href="https://issuetracker.google.com/153737341">b/143774122</a>)</p> <ul> <li><code translate="no" dir="ltr">detectFragmentReuse()</code> detects whether a previously removed <code translate="no" dir="ltr">Fragment</code> instance is being re-added to a <code translate="no" dir="ltr">FragmentManager</code>. You should never interact with or keep a reference to a <code translate="no" dir="ltr">Fragment</code> instance after it has been destroyed and removed from a <code translate="no" dir="ltr">FragmentManager</code>. (<a href="https://github.com/androidx/androidx/pull/142">#142</a>, <a href="https://issuetracker.google.com/153738653">b/153738653</a>)</li> <li><code translate="no" dir="ltr">detectFragmentTagUsage()</code> detects when you are using the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag in your layout XML. You should always use <code translate="no" dir="ltr">FragmentContainerView</code> when inflating fragments as part of your layout. (<a href="https://github.com/androidx/androidx/pull/141">#141</a>, <a href="https://issuetracker.google.com/153738235">b/153738235</a>)</li> <li><code translate="no" dir="ltr">detectWrongFragmentContainer()</code> detects when you add a fragment to a container that is <em>not</em> a <code translate="no" dir="ltr">FragmentContainerView</code>. You should always use <code translate="no" dir="ltr">FragmentContainerView</code> as the container for fragments in your layout. (<a href="https://github.com/androidx/androidx/pull/146">#146</a>, <a href="https://issuetracker.google.com/181137036">b/181137036</a>)</li> <li><code translate="no" dir="ltr">detectRetainInstanceUsage()</code> detects when you use the deprecated <code translate="no" dir="ltr">setRetainInstance()</code> or <code translate="no" dir="ltr">getRetainInstance()</code> APIs. (<a href="https://github.com/androidx/androidx/pull/140">#140</a>, <a href="https://issuetracker.google.com/153737954">b/153737954</a>)</li> <li><code translate="no" dir="ltr">detectSetUserVisibleHint()</code> detects when you use the deprecated <code translate="no" dir="ltr">setUserVisibleHint()</code> API. (<a href="https://github.com/androidx/androidx/pull/136">#136</a>, <a href="https://issuetracker.google.com/153738974">b/153738974</a>)</li> <li><code translate="no" dir="ltr">detectTargetFragmentUsage()</code> detects when you use the deprecated <code translate="no" dir="ltr">setTargetFragment()</code>, <code translate="no" dir="ltr">getTargetFragment()</code> or <code translate="no" dir="ltr">getTargetRequestCode()</code> APIs. (<a href="https://github.com/androidx/androidx/pull/139">#139</a>, <a href="https://issuetracker.google.com/153737745">b/153737745</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The experimental API of <code translate="no" dir="ltr">FragmentManager.enableNewStateManager(boolean)</code> has been removed and the <a href="https://medium.com/androiddevelopers/fragments-rebuilding-the-internals-61913f8bf48e">new state manager</a> is now the only option available. (<a href="https://android-review.googlesource.com/#/q/I9003696ae7abecdd43eece8a20fea8e0657dadc4">I90036</a>, <a href="https://issuetracker.google.com/issues/162776418">b/162776418</a>)</li> <li><code translate="no" dir="ltr">FragmentScenario</code> now implements <code translate="no" dir="ltr">Closeable</code>, allowing you to use it with Kotlin’s <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/use.html"><code translate="no" dir="ltr">use</code></a> method or <a href="https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html">try-with-resources</a>. (<a href="https://github.com/androidx/androidx/pull/121">#121</a>, <a href="https://issuetracker.google.com/143774122">b/143774122</a>)</li> </ul> <p><strong>New Lint checks</strong></p> <ul> <li>The <code translate="no" dir="ltr">UseGetLayoutInflater</code> Lint check now warns when using <code translate="no" dir="ltr">LayoutInflater.from(Context)</code> within a <code translate="no" dir="ltr">DialogFragment</code> - you should always use the dialog fragment’s <code translate="no" dir="ltr">getLayoutInflater()</code> method to get the appropriate for <code translate="no" dir="ltr">LayoutInflater</code>. (<a href="https://github.com/androidx/androidx/pull/156">#156</a>, <a href="https://issuetracker.google.com/170781346">b/170781346</a>)</li> <li>The <code translate="no" dir="ltr">DialogFragmentCallbacksDetector</code> Lint check now warns when calling <code translate="no" dir="ltr">setOnCancelListener</code> or <code translate="no" dir="ltr">setOnDismissListener</code> in the <code translate="no" dir="ltr">onCreateDialog()</code> method of a <code translate="no" dir="ltr">DialogFragment</code> - these listeners are owned by the <code translate="no" dir="ltr">DialogFragment</code> itself and you should override <code translate="no" dir="ltr">onCancel()</code> and <code translate="no" dir="ltr">onDismiss()</code> to receive these callbacks. (<a href="https://github.com/androidx/androidx/pull/171">#171</a>, <a href="https://issuetracker.google.com/181780047">b/181780047</a>, <a href="https://issuetracker.google.com/187524311">b/187524311</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.3.4">Fragment 1.3.4</a>: Fixed a regression introduced in <a href="#1.3.3">Fragment <code translate="no" dir="ltr">1.3.3</code></a> when using the <code translate="no" dir="ltr">ViewTreeViewModelStoreOwner.get()</code> API with <code translate="no" dir="ltr">ViewModelProvider</code> or the Jetpack Compose method of <code translate="no" dir="ltr">viewModel()</code> inside a Fragment. These use cases now correctly use the <code translate="no" dir="ltr">ViewModelProvider.Factory</code> provided by your Fragment if it overrides <code translate="no" dir="ltr">getDefaultViewModelProviderFactory()</code> (as <code translate="no" dir="ltr">@AndroidEntryPoint</code> annotated Fragments do when using Hilt). If you do not override that method, a <code translate="no" dir="ltr">SavedStateViewModelFactory</code> that saves and restores its state alongside the Fragment’s view is created as the default factory. (<a href="https://android-review.googlesource.com/#/q/I5cbfacde2479fb270c0c344c478260f20b3207d5">I5cbfa</a>, <a href="https://issuetracker.google.com/issues/186097368">b/186097368</a>)</li> <li>From <a href="#1.3.4">Fragment 1.3.4</a>: When using <code translate="no" dir="ltr">FragmentContainerView</code> on API 29, insets will no longer dispatch indefinitely, fixing issues with <code translate="no" dir="ltr">BottomNavigationBar</code> and <code translate="no" dir="ltr">FloatingActionButton</code> instances. (<a href="https://android-review.googlesource.com/#/q/I1bb780dffcbbcb6a78fbfb74d288a3c0620a3a40">I1bb78</a>, <a href="https://issuetracker.google.com/issues/186012452">b/186012452</a>)</li> <li>From <a href="#1.3.4">Fragment 1.3.4</a>: You can now retrieve your Parcelable from the fragment result bundle after process death. (<a href="https://android-review.googlesource.com/#/q/I6593233191347d9595f81268951d6f8dbb627273">I65932</a>, <a href="https://issuetracker.google.com/issues/187443158">b/187443158</a>)</li> <li>From <a href="#1.3.4">Fragment 1.3.4</a>: When doing a shared element transition on a ViewGroup, if the ViewGroup has <code translate="no" dir="ltr">transitionGroup</code> set to false, it will now properly transition. (<a href="https://android-review.googlesource.com/#/q/I99675eac030325415789be0762aa666355f27dd8">I99675</a>)</li> </ul> <p><strong>External Contribution</strong></p> <ul> <li>Thanks <a href="https://github.com/simonschiller">simonschiller</a> for making <code translate="no" dir="ltr">FragmentScenario</code> implement <code translate="no" dir="ltr">Closeable</code>. (<a href="https://github.com/androidx/androidx/pull/121">#121</a>, <a href="https://issuetracker.google.com/143774122">b/143774122</a>)</li> <li>Thanks <a href="https://github.com/simonschiller">simonschiller</a> for adding the entirety of the <code translate="no" dir="ltr">FragmentStrictMode</code> API for this release! (<a href="https://github.com/androidx/androidx/pull/123">#123</a>, <a href="https://github.com/androidx/androidx/pull/131">#131</a>, <a href="https://github.com/androidx/androidx/pull/150">#150</a>, <a href="https://issuetracker.google.com/153737341">b/143774122</a>, <a href="https://github.com/androidx/androidx/pull/142">#142</a>, <a href="https://issuetracker.google.com/153738653">b/153738653</a>, <a href="https://github.com/androidx/androidx/pull/141">#141</a>, <a href="https://issuetracker.google.com/153738235">b/153738235</a>, <a href="https://github.com/androidx/androidx/pull/146">#146</a>, <a href="https://issuetracker.google.com/181137036">b/181137036</a>, <a href="https://github.com/androidx/androidx/pull/140">#140</a>, <a href="https://issuetracker.google.com/153737954">b/153737954</a>, <a href="https://github.com/androidx/androidx/pull/136">#136</a>, <a href="https://issuetracker.google.com/153738974">b/153738974</a>, <a href="https://github.com/androidx/androidx/pull/139">#139</a>, <a href="https://issuetracker.google.com/153737745">b/153737745</a>)</li> <li>Thanks <a href="https://github.com/tatocaster">tatocaster</a> for adding the <code translate="no" dir="ltr">UseGetLayoutInflater</code> Lint check. (<a href="https://github.com/androidx/androidx/pull/156">#156</a>, <a href="https://issuetracker.google.com/170781346">b/170781346</a>)</li> <li>Thanks <a href="https://github.com/tatocaster">tatocaster</a> for adding the <code translate="no" dir="ltr">DialogFragmentCallbacksDetector</code> Lint check. (<a href="https://github.com/androidx/androidx/pull/171">#171</a>, <a href="https://issuetracker.google.com/181780047">b/181780047</a>)</li> </ul> <h2 id="version_13_2" data-text="Version 1.3" tabindex="-1">Version 1.3</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.3.6" data-text="Version 1.3.6" tabindex="-1">Version 1.3.6</h3> <p>July 21, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.6</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.6</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.6</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/9f7c7f1ee129c30eda48c6e13a4a525ed2c846f6..9bda870a1d83164b81bca5882af8863c0259462f/fragment">Version 1.3.6 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0-alpha03">Fragment <code translate="no" dir="ltr">1.4.0-alpha03</code></a>: The <code translate="no" dir="ltr">FragmentManager</code> will no longer crash when you attempt to hide a removing fragment. (<a href="https://android-review.googlesource.com/#/q/I573ddcfcd1b9c782b5546dd4643e0e4ed042b277">I573dd</a>, <a href="https://issuetracker.google.com/issues/183634730">b/183634730</a>)</li> <li>The Fragment’s view is now properly set to <code translate="no" dir="ltr">GONE</code> when using <code translate="no" dir="ltr">hide()</code> when the root view has <code translate="no" dir="ltr">transitionGroup=”true”</code> set. (<a href="https://android-review.googlesource.com/1766655">aosp/1766655</a>, <a href="https://issuetracker.google.com/issues/193603427">b/193603427</a>)</li> <li><code translate="no" dir="ltr">FragmentActivity</code> now always unlocks the saved state as its first operation in lifecycle callbacks it overrides. (<a href="https://android-review.googlesource.com/#/q/I6db7adb364dfbdd922a376242d54519028d4a9c9">I6db7a</a>)</li> </ul> <p><strong>Dependency update</strong></p> <ul> <li>From <a href="/jetpack/androidx/releases/fragment#1.3.6">Fragment <code translate="no" dir="ltr">1.3.6</code></a>: Fragments now depends on <a href="/jetpack/androidx/releases/activity#1.2.4">Activity <code translate="no" dir="ltr">1.2.4</code></a> (<a href="https://android-review.googlesource.com/#/q/I3a66c06ec44c43106e6f7fb48ba9b9f964429b45">I3a66c</a>)</li> </ul> <h3 id="1.3.5" data-text="Version 1.3.5" tabindex="-1">Version 1.3.5</h3> <p>June 16, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.5</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.5</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.5</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/3d5122ff6f757cd8287879fdb2712ce745d3c7eb..9f7c7f1ee129c30eda48c6e13a4a525ed2c846f6/fragment">Version 1.3.5 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a regression in shared element transitions introduced in <a href="#1.3.4">Fragment <code translate="no" dir="ltr">1.3.4</code></a> by <a href="https://android-review.googlesource.com/1679887/">aosp/1679887</a>. Fragments now correctly handle transition groups (either set directly via <code translate="no" dir="ltr">transitionGroup=&quot;true&quot;</code> or indirectly via a <code translate="no" dir="ltr">transitionName</code> or <code translate="no" dir="ltr">background</code>) and shared elements will no longer throw <code translate="no" dir="ltr">IndexOutOfBoundsException</code>s. (<a href="https://android-review.googlesource.com/#/q/I164845639cae1f64cf54e4e89b2a24d7eb649beb">I16484</a>, <a href="https://issuetracker.google.com/issues/188679569">b/188679569</a>, <a href="https://issuetracker.google.com/issues/188969304">b/188969304</a>)</li> </ul> <h3 id="1.3.4" data-text="Version 1.3.4" tabindex="-1">Version 1.3.4</h3> <p>May 18, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.4</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.4</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.4</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/a12bda4096b6d81e46ecf935fe7140fb80dc61e0..3d5122ff6f757cd8287879fdb2712ce745d3c7eb/fragment">Version 1.3.4 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a regression introduced in <a href="#1.3.3">Fragment <code translate="no" dir="ltr">1.3.3</code></a> when using the <code translate="no" dir="ltr">ViewTreeViewModelStoreOwner.get()</code> API with <code translate="no" dir="ltr">ViewModelProvider</code> or the Jetpack Compose method of <code translate="no" dir="ltr">viewModel()</code> inside a Fragment when using Hilt. These use cases now correctly use the <code translate="no" dir="ltr">ViewModelProvider.Factory</code> provided by your Fragment if it overrides <code translate="no" dir="ltr">getDefaultViewModelProviderFactory()</code> (as <code translate="no" dir="ltr">@AndroidEntryPoint</code> annotated Fragments do). If you do not override that method, a <code translate="no" dir="ltr">SavedStateViewModelFactory</code> that saves and restores its state alongside the Fragment’s view is created as the default factory. (<a href="https://android-review.googlesource.com/#/q/I5cbfacde2479fb270c0c344c478260f20b3207d5">I5cbfa</a>, <a href="https://issuetracker.google.com/issues/186097368">b/186097368</a>)</li> <li>When using <code translate="no" dir="ltr">FragmentContainerView</code> on API 29, insets will no longer dispatch indefinitely, fixing issues with <code translate="no" dir="ltr">BottomNavigationBar</code> and <code translate="no" dir="ltr">FloatingActionButton</code> instances. (<a href="https://android-review.googlesource.com/#/q/I1bb780dffcbbcb6a78fbfb74d288a3c0620a3a40">I1bb78</a>, <a href="https://issuetracker.google.com/issues/186012452">b/186012452</a>)</li> <li>You can now retrieve your Parcelable from the fragment result bundle after process death. (<a href="https://android-review.googlesource.com/#/q/I6593233191347d9595f81268951d6f8dbb627273">I65932</a>, <a href="https://issuetracker.google.com/issues/187443158">b/187443158</a>)</li> <li>When doing a shared element transition on a ViewGroup, if the ViewGroup has <code translate="no" dir="ltr">transitionGroup</code> set to false, it will now properly transition. (<a href="https://android-review.googlesource.com/#/q/I99675eac030325415789be0762aa666355f27dd8">I99675</a>)</li> </ul> <h3 id="1.3.3" data-text="Version 1.3.3" tabindex="-1">Version 1.3.3</h3> <p>April 21, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.3</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.3</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.3</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/359e0b300368007d383fda1172a2813f9126d11f..a12bda4096b6d81e46ecf935fe7140fb80dc61e0/fragment">Version 1.3.3 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Using <code translate="no" dir="ltr">SavedStateViewModelFactory</code> now works when used with the <code translate="no" dir="ltr">SavedStateRegistryOwner</code> returned by using <code translate="no" dir="ltr">ViewTreeSavedStateRegistryOwner.get()</code> with the Fragment&#39;s View. (<a href="https://android-review.googlesource.com/#/q/I21acf18f70ab6dcc60f5946d5b0d878e12bc76df">I21acf</a>, <a href="https://issuetracker.google.com/issues/181577191">b/181577191</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a regression introduced in <a href="#1.3.2">Fragment <code translate="no" dir="ltr">1.3.2</code></a> which would cause <code translate="no" dir="ltr">popEnter</code> animations to not run when popping a <code translate="no" dir="ltr">FragmentTransaction</code> that included a <code translate="no" dir="ltr">setPrimaryNavFragment</code> operation, such as those used by <code translate="no" dir="ltr">NavHostFragment</code>. (<a href="https://android-review.googlesource.com/#/q/I38c877ae34c825b3a451ab325b6f683de00a2457">I38c87</a>, <a href="https://issuetracker.google.com/issues/183877426">b/183877426</a>)</li> <li><code translate="no" dir="ltr">FragmentContainerView</code> now ensures that every <code translate="no" dir="ltr">Fragment</code> is dispatched a new set of <code translate="no" dir="ltr">WindowInsets</code>, ensuring that each fragment can now independently consume the insets. (<a href="https://android-review.googlesource.com/#/q/I63f685e6715334a77e477180ae94771eeef827c3">I63f68</a>, <a href="https://issuetracker.google.com/issues/172153900">b/172153900</a>)</li> <li><code translate="no" dir="ltr">DialogFragment</code> now properly handles cases where a child fragment is added to a container that has the same ID as a container in your custom <code translate="no" dir="ltr">Dialog</code> class, fixing view hierarchy issues when reusing IDs that are used internally by dialogs such as <code translate="no" dir="ltr">BottomSheetDialog</code>. (<a href="https://android-review.googlesource.com/#/q/Ie62791677cb8771f22b19bdce5985426c669fba0">Ie6279</a>, <a href="https://issuetracker.google.com/issues/180021387">b/180021387</a>)</li> <li><code translate="no" dir="ltr">FragmentManager.dump()</code> now properly indents the first fragment in the list of active fragments. (<a href="https://android-review.googlesource.com/#/q/If5c339c3052a95bf5f1db4f97d460b4969ea31cb">If5c33</a>, <a href="https://issuetracker.google.com/issues/183705451">b/183705451</a>)</li> </ul> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>The new fragment state manager now properly handles exit transitions with hide operations. (<a href="https://android-review.googlesource.com/#/q/I9e4de834e866143295435825c6eba8d5b06011f8">I9e4de</a>, <a href="https://issuetracker.google.com/issues/184830265">b/184830265</a>)</li> </ul> <h3 id="1.3.2" data-text="Version 1.3.2" tabindex="-1">Version 1.3.2</h3> <p>March 24, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.2</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.2</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.2</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/587cd19caebfbd63197a766916bf5296b3a6d65e..359e0b300368007d383fda1172a2813f9126d11f/fragment">Version 1.3.2 contains these commits.</a></p> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>When running both <code translate="no" dir="ltr">popBackStack()</code> and <code translate="no" dir="ltr">commit()</code> operations together, the last operation will now set the direction for all animations rather than running some pop animations and some enter animations. (<a href="https://android-review.googlesource.com/#/q/I7072e2c8008318ae812ae461a42ddafbbe6055cd">I7072e</a>, <a href="https://issuetracker.google.com/issues/181142246">b/181142246</a>)</li> <li>Views within in a shared element hierarchy will no longer have their transition name cleared when doing a shared element transition. (<a href="https://android-review.googlesource.com/#/q/I4d4a6d7770d5c6d54e4c647559d5cabae71f0051">I4d4a6</a>, <a href="https://issuetracker.google.com/issues/179934757">b/179934757</a>)</li> </ul> <p><strong>Dependency Updates</strong></p> <ul> <li>Fragment now depends on <a href="/jetpack/androidx/releases/activity#1.2.2">Activity 1.2.2</a>, fixing an issue with Activity’s <code translate="no" dir="ltr">InvalidFragmentVersionForActivityResult</code> lint check when using Fragment 1.3.1 or higher.</li> <li>Fragment now depends on <a href="/jetpack/androidx/releases/lifecycle#2.3.1">Lifecycle 2.3.1</a>.</li> </ul> <h3 id="1.3.1" data-text="Version 1.3.1" tabindex="-1">Version 1.3.1</h3> <p>March 10, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.1</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.1</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.1</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/b4fe1cc9ec5c6d25591e037e4f84316c36d6825a..587cd19caebfbd63197a766916bf5296b3a6d65e/fragment">Version 1.3.1 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Dialogs within a <code translate="no" dir="ltr">DialogFragment</code> can now get access to ViewTree owners through their DecorView, ensuring that <code translate="no" dir="ltr">DialogFragment</code> can be used with <code translate="no" dir="ltr">ComposeView</code>. (<a href="https://android-review.googlesource.com/#/q/Ib92905306e16dcaee63c985f22b5e36b6718dd39">Ib9290</a>, <a href="https://issuetracker.google.com/issues/180691023">b/180691023</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fragments inflated into an already <code translate="no" dir="ltr">RESUMED</code> activity using FragmentContainerView are now properly shown after a configuration change. (<a href="https://android-review.googlesource.com/#/q/Ie14c80467b66186862319469f51bbd4d7ebcbbb9">Ie14c8</a>, <a href="https://issuetracker.google.com/issues/180538371">b/180538371</a>)</li> <li>There is no longer an extra <code translate="no" dir="ltr">}</code> at the end of the fragment <code translate="no" dir="ltr">toString()</code> (<a href="https://android-review.googlesource.com/#/q/I547053a275afdde0720a63370629af49c1b8cd2e">I54705</a>, <a href="https://issuetracker.google.com/issues/177761088">b/177761088</a>)</li> <li>Overridden methods in FragmentActivity now properly inherit the base method javaDoc (<a href="https://android-review.googlesource.com/#/q/I736ce6ad3c248c093ccb4cdf1f40029451fd1422">I736ce</a>, <a href="https://issuetracker.google.com/issues/139548782">b/139548782</a>)</li> <li>The docs for <code translate="no" dir="ltr">setFragmentResult</code> and <code translate="no" dir="ltr">setFragmentResultListener</code> have updated their parameters docs to reflect that they no longer accept nullables (<a href="https://android-review.googlesource.com/#/q/I990baa2e1b71a11b11342c366c284903c247e631">I990ba</a>, <a href="https://issuetracker.google.com/issues/178348386">b/178348386</a>)</li> </ul> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>Fixed a memory leak in fragments caused by <code translate="no" dir="ltr">mFocusedView</code> (<a href="https://android-review.googlesource.com/#/q/Ib4e9eddfba3ad925471890ff0078d9a65416f7da">Ib4e9e</a>, <a href="https://issuetracker.google.com/issues/179925887">b/179925887</a>)</li> <li>Fragments now properly call <code translate="no" dir="ltr">onCreateOptionsMenu</code> when using show/hide transactions (<a href="https://android-review.googlesource.com/#/q/I8bce888e4b9757b5f5c3200e8d884e16372b6ec6">I8bce8</a>, <a href="https://issuetracker.google.com/issues/180255554">b/180255554</a>)</li> <li>Child fragments with transitions that start prior to the fragment being laid out will now properly reach <code translate="no" dir="ltr">RESUMED</code> (<a href="https://android-review.googlesource.com/#/q/Ic11e655bd4ed206485c2762a1af4e5bc7aa4cf9c">Ic11e6</a>, <a href="https://issuetracker.google.com/issues/180825150">b/180825150</a>)</li> <li>Fragments inflated using the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag will now always make it to <code translate="no" dir="ltr">RESUMED</code> (<a href="https://android-review.googlesource.com/#/q/I452acc8016d1be2f4be611cd3affeb33687600ec">I452ac</a>, (<a href="https://android-review.googlesource.com/#/q/I9fa498952456908a11a257cb3fdedcb89fb083a6">I9fa49</a>)</li> </ul> <p><strong>Dependency Updates</strong></p> <ul> <li>Fragment 1.3.1 depends on <a href="/jetpack/androidx/releases/activity#1.2.1">Activity <code translate="no" dir="ltr">1.2.1</code></a>. (<a href="https://android-review.googlesource.com/#/q/I557b913b9c31c7856cd508151e3190c6779c191e">I557b9</a>)</li> </ul> <h3 id="1.3.0" data-text="Version 1.3.0" tabindex="-1">Version 1.3.0</h3> <p>February 10, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/fff94654610fc0f34aef14c059a073e6cdd80b10..b4fe1cc9ec5c6d25591e037e4f84316c36d6825a/fragment">Version 1.3.0 contains these commits.</a></p> <p><strong>Major changes since 1.2.0</strong></p> <ul> <li><strong>New State Manager</strong>: A significant <a href="https://medium.com/androiddevelopers/fragments-rebuilding-the-internals-61913f8bf48e">rewrite of the internals</a> of <code translate="no" dir="ltr">FragmentManager</code> has fixed numerous issues around the dispatch of lifecycle events, animations and transitions, and how postponed fragments are handled.</li> <li><p><strong>Activity Result API Integration</strong>: Added support for the <code translate="no" dir="ltr">ActivityResultRegistry</code> API introduced in <a href="/jetpack/androidx/releases/activity#1.2.0">Activity <code translate="no" dir="ltr">1.2.0</code></a> to handle <code translate="no" dir="ltr">startActivityForResult()</code>+<code translate="no" dir="ltr">onActivityResult()</code> as well as <code translate="no" dir="ltr">requestPermissions()</code>+<code translate="no" dir="ltr">onRequestPermissionsResult()</code> flows without overriding methods in your Fragment in addition to providing hooks for testing these flows. See the updated <a href="/training/basics/intents/result">Getting a Result from an Activity</a>.</p> <ul> <li>This release fixes a number of issues around invalid request codes and the dispatch of permission requests that prevent the Activity Result API from working on previous versions of <code translate="no" dir="ltr">FragmentActivity</code>. You must upgrade to Fragment 1.3.0 to use the Activity Result APIs in a <code translate="no" dir="ltr">FragmentActivity</code> or <code translate="no" dir="ltr">AppCompatActivity</code>.</li> </ul></li> <li><p><strong>Fragment Result API</strong>: Added support for passing results between two Fragments via new APIs on <code translate="no" dir="ltr">FragmentManager</code>. This works for hierarchy fragments (parent/child), DialogFragments, and fragments in Navigation and ensures that results are only sent to your Fragment while it is at least <code translate="no" dir="ltr">STARTED</code>. The target fragment APIs have been deprecated in favor of these new APIs. See <a href="/guide/fragments/communicate#fragment-result">Get Results using the Fragment Result API</a>.</p></li> <li><p><strong><code translate="no" dir="ltr">FragmentOnAttachListener</code></strong>: The <code translate="no" dir="ltr">onAttachFragment()</code> callback on <code translate="no" dir="ltr">FragmentActivity</code> and <code translate="no" dir="ltr">Fragment</code> have been deprecated. A new <code translate="no" dir="ltr">FragmentOnAttachListener</code> has been added to provide a more flexible alternative, allowing delegation of <code translate="no" dir="ltr">onAttachFragment()</code> to separate, testable listeners and support for adding a listener to FragmentManagers other than your direct child FragmentManager.</p></li> <li><p><strong><code translate="no" dir="ltr">FragmentScenario</code> Improvements</strong>: The <code translate="no" dir="ltr">FragmentScenario</code> class from the <code translate="no" dir="ltr">fragment-testing</code> artifact has been rewritten in Kotlin and has received a number of improvements:</p> <ul> <li><code translate="no" dir="ltr">FragmentScenario</code> now uses <a href="/reference/androidx/fragment/app/FragmentTransaction#setMaxLifecycle(androidx.fragment.app.Fragment,%20androidx.lifecycle.Lifecycle.State)"><code translate="no" dir="ltr">setMaxLifecycle()</code></a> to implement <code translate="no" dir="ltr">moveToState()</code>, ensuring consistent behavior on all API levels and decoupling the Fragment’s state from the underlying Activity.</li> <li><code translate="no" dir="ltr">FragmentScenario</code> now supports setting an initial <code translate="no" dir="ltr">Lifecycle.State</code> to support asserting the fragment’s state before moving to each <code translate="no" dir="ltr">Lifecycle.State</code> for the first time.</li> <li>There is now an alternative to the <code translate="no" dir="ltr">FragmentScenario</code> API of <code translate="no" dir="ltr">onFragment</code> in the form of the Kotlin reified extension method <code translate="no" dir="ltr">withFragment</code> that allows you to return a value. Notably, it rethrows exceptions raised in the given block.</li> </ul></li> <li><p><strong><code translate="no" dir="ltr">ViewTree</code> Support</strong>: <code translate="no" dir="ltr">Fragment</code> now supports the <code translate="no" dir="ltr">ViewTreeLifecycleOwner.get(View)</code>, <code translate="no" dir="ltr">ViewTreeViewModelStoreOwner.get(View)</code>, and <code translate="no" dir="ltr">ViewTreeSavedStateRegistryOwner</code> APIs added in <a href="/jetpack/androidx/releases/lifecycle#2.3.0">Lifecycle <code translate="no" dir="ltr">2.3.0</code></a> and <a href="/jetpack/androidx/releases/savedstate#1.1.0">SavedState <code translate="no" dir="ltr">1.1.0</code></a> such that it will return the Fragment as the <code translate="no" dir="ltr">ViewModelStoreOwner</code>, and a <code translate="no" dir="ltr">SavedStateRegistryOwner</code> and <code translate="no" dir="ltr">LifecycleOwner</code> tied to the fragment’s <a href="/reference/androidx/fragment/app/Fragment#getViewLifecycleOwner()">view Lifecycle</a> when using a <code translate="no" dir="ltr">View</code> within a <code translate="no" dir="ltr">Fragment</code>.</p></li> <li><p><strong><code translate="no" dir="ltr">TRANSIT_</code> animation changes</strong>: The fragment default effects, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_OPEN</code>, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_CLOSE</code>, and <code translate="no" dir="ltr">TRANSIT_FRAGMENT_FADE</code>, now use <a href="/reference/android/animation/Animator"><code translate="no" dir="ltr">Animator</code></a> instead of <a href="/reference/kotlin/android/view/animation/Animation"><code translate="no" dir="ltr">Animation</code></a>. The resources used to build these animators are now private.</p></li> <li><p><strong><code translate="no" dir="ltr">setRetainInstance()</code> deprecation</strong>: The <code translate="no" dir="ltr">setRetainInstance()</code> method on Fragments has been deprecated. With the introduction of <a href="/topic/libraries/architecture/viewmodel">ViewModels</a>, developers have a specific API for retaining state that can be associated with Activities, Fragments, and Navigation graphs. This allows developers to use a normal, not retained Fragment and keep the specific state they want retained separate, avoiding a common source of leaks while maintaining the useful properties of a single creation and destruction of the retained state (namely, the constructor of the <code translate="no" dir="ltr">ViewModel</code> and the <code translate="no" dir="ltr">onCleared()</code> callback it receives).</p></li> <li><p><strong>ViewPager 1 adapter deprecation</strong>: With the release of <a href="/jetpack/androidx/releases/viewpager2#1.0.0">ViewPager2 <code translate="no" dir="ltr">1.0.0</code></a>, the <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> classes for interacting with <code translate="no" dir="ltr">ViewPager</code> have been deprecated. See <a href="/training/animation/vp2-migration">Migrate from ViewPager to ViewPager2</a>.</p></li> </ul> <h3 id="1.3.0-rc02" data-text="Version 1.3.0-rc02" tabindex="-1">Version 1.3.0-rc02</h3> <p>January 27, 2021</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-rc02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-rc02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-rc02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/6970bb682fd9f49aa80d74409fd653bad01fe982..fff94654610fc0f34aef14c059a073e6cdd80b10/fragment">Version 1.3.0-rc02 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed an issue where a parent <code translate="no" dir="ltr">DialogFragment</code> would appear above a child <code translate="no" dir="ltr">DialogFragment</code> after a configuration change; child dialog fragments now always appear above a parent dialog fragment. (<a href="https://android-review.googlesource.com/#/q/I3080648340b7f05eac35f5ac77f8a7a2c289a104">I30806</a>, <a href="https://issuetracker.google.com/issues/177439520">b/177439520</a>)</li> <li>Fixed issue where doing a <code translate="no" dir="ltr">hide</code> operation with an <code translate="no" dir="ltr">Animation</code> would cause the hiding fragment to flash at the end of the animation. (<a href="https://android-review.googlesource.com/#/q/I57e2282d6c16dcbb403379d67c5e747379db58b1">I57e22</a>, <a href="https://issuetracker.google.com/issues/175417675">b/175417675</a>)</li> <li>Fragments with transitions added before the view hierarchy is attached now properly reach <code translate="no" dir="ltr">RESUMED</code>. (<a href="https://android-review.googlesource.com/#/q/I1fc1db01450466f9ee012f07e4b608aa3337c838">I1fc1d</a>, <a href="https://issuetracker.google.com/issues/177154873">b/177154873</a>)</li> </ul> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>The Fragment’s view <code translate="no" dir="ltr">Lifecycle</code> now properly handles cases where the Fragment’s view is destroyed before the <code translate="no" dir="ltr">Lifecycle</code> reaches <code translate="no" dir="ltr">CREATED</code>, avoiding exceptions stating “no event down from INITIALIZED”. (<a href="https://android-review.googlesource.com/#/q/eda2bdb8e41d9fd7280f607b7848b12cc435574c">eda2bd</a>, <a href="https://issuetracker.google.com/issues/176138645">b/176138645</a>)</li> <li>Fragments that use an <code translate="no" dir="ltr">Animator</code> now appear in the proper order when using <code translate="no" dir="ltr">FragmentContainerView</code>. (<a href="https://android-review.googlesource.com/#/q/Id9aa349b180cc2c22912efae3f2c44773ecb7126">Id9aa3</a>, <a href="https://issuetracker.google.com/issues/176089197">b/176089197</a>)</li> </ul> <h3 id="1.3.0-rc01" data-text="Version 1.3.0-rc01" tabindex="-1">Version 1.3.0-rc01</h3> <p>December 16, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-rc01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-rc01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-rc01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/38a668d3ef95f40ad28d6e735a2c3eb95ae4cf63..6970bb682fd9f49aa80d74409fd653bad01fe982/fragment">Version 1.3.0-rc01 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">onPrepareOptionsMenu()</code> now follows the same logic as <code translate="no" dir="ltr">onCreateOptionsMenu()</code> and is no longer called when a parent fragment calls <code translate="no" dir="ltr">setMenuVisibility(false)</code>. (<a href="https://android-review.googlesource.com/#/q/Id7de8156980c09e6ece0d977950b4844eb10d516">Id7de8</a>, <a href="https://issuetracker.google.com/issues/173203654">b/173203654</a>)</li> </ul> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>Fixed leak and visual artifact when adding a fragment with an <code translate="no" dir="ltr">Animation</code> to a <code translate="no" dir="ltr">FragmentContainerView</code> and then interrupting that addition with a pop operation. (<a href="https://android-review.googlesource.com/#/q/I952d8409bb6afb810fc97b52c14e23f55ba5ab17">I952d8</a>)</li> <li>Fixed an issue where the fragment&#39;s view would remain in the view hierarchy if it was replaced during its <code translate="no" dir="ltr">onCreate()</code> or <code translate="no" dir="ltr">onViewCreated()</code> methods. (<a href="https://android-review.googlesource.com/#/q/I8a7d5aed2c5648d3b898bb1cc1469f90cf5f1abd">I8a7d5</a>)</li> <li>Focus is now properly restored to Fragment root views when they are resumed. (<a href="https://android-review.googlesource.com/#/q/Ifc84b33272f17f4be48f603e4826b7c6751fbb2f">Ifc84b</a>)</li> <li>Combining pop and replace operations in the same fragment transaction will now show the proper animations (<a href="https://android-review.googlesource.com/#/q/Ifd4e49cd9874a9ac0673083c27ef3c9765bbfa04">Ifd4e4</a>, <a href="https://issuetracker.google.com/issues/170328691">b/170328691</a>)</li> </ul> <h3 id="1.3.0-beta02" data-text="Version 1.3.0-beta02" tabindex="-1">Version 1.3.0-beta02</h3> <p>December 2, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-beta02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-beta02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-beta02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/f5a2c7477391539d8bc9f65a8f0db1e8a7bf2cf5..38a668d3ef95f40ad28d6e735a2c3eb95ae4cf63/fragment">Version 1.3.0-beta02 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentScenario</code> has been fully converted to Kotlin while maintaining source and binary compatibility via usage of Kotlin 1.4&#39;s functional interfaces for <code translate="no" dir="ltr">FragmentAction</code>. (<a href="https://android-review.googlesource.com/#/q/I19d3175b0d7f1adb0ceaa9c1e907b7f608f86b55">I19d31</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>FragmentContainerViews that do not inflate a fragment using the <code translate="no" dir="ltr">class</code> or <code translate="no" dir="ltr">android:name</code> attribute can now be used outside of a <code translate="no" dir="ltr">FragmentActivity</code>. (<a href="https://android-review.googlesource.com/#/q/Id4397edf815e6603016e0a7798232c8e9f9f065f">Id4397</a>, <a href="https://issuetracker.google.com/issues/172266337">b/172266337</a>)</li> <li>Attempting to set the max lifecycle of a fragment to <code translate="no" dir="ltr">DESTROYED</code> will now throw an <code translate="no" dir="ltr">IllegalArgumentException</code> (<a href="https://android-review.googlesource.com/#/q/Ie765188cbaf8473b2aac8f171e869c8fec84e212">Ie7651</a>, <a href="https://issuetracker.google.com/issues/170765622">b/170765622</a>)</li> <li>Initializing a FragmentScenario with a <code translate="no" dir="ltr">DESTROYED</code> state will now throw an <code translate="no" dir="ltr">IllegalArgumentException</code> (<a href="https://android-review.googlesource.com/#/q/I7359000183f73a7b2f01eb637655ca8c655e371e">I73590</a>, <a href="https://issuetracker.google.com/issues/170765622">b/170765622</a>)</li> </ul> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>Fixed an issue where the view would not reach its final state if you interrupt a fragment transition that was using an <code translate="no" dir="ltr">Animator</code> or one of the <code translate="no" dir="ltr">TRANSIT_FRAGMENT_</code> options. (<a href="https://android-review.googlesource.com/#/q/I92426d8572f9ca71c053945ecc2afd839efbc058">I92426</a>, <a href="https://issuetracker.google.com/issues/169874632">b/169874632</a>)</li> <li>Fixed an issue that prevented fragments with an exiting <code translate="no" dir="ltr">Animation</code> from being properly destroyed. (<a href="https://android-review.googlesource.com/#/q/I83d6584916bb3425f552d73a17e1ab938f00190d">I83d65</a>)</li> <li>Exiting fragments that have their effects reversed now correctly cancel and restart with the proper entering effect. (<a href="https://android-review.googlesource.com/#/q/I622265e9b4ebb210657aac2a5b97dd47061bfd5c">I62226</a>, <a href="https://issuetracker.google.com/issues/167092035">b/167092035</a>)</li> <li>Fixed an issue where the exit <code translate="no" dir="ltr">Animator</code> of a <code translate="no" dir="ltr">hide()</code> would not run. (<a href="https://android-review.googlesource.com/#/q/Id7ffe54e883d9bd22d0759edd190a9d68aba3390">Id7ffe</a>)</li> <li>Fragments now properly appear when postponed and then immediately started. (<a href="https://android-review.googlesource.com/#/q/Ie713bb4f44c5d2432680f2efbb8cdb38a9d26bf2">Ie713b</a>, <a href="https://issuetracker.google.com/issues/170022857">b/170022857</a>)</li> <li>Fragments that remove their focused view during an animation will no longer attempt to restore the focus on the detached view once they reach <code translate="no" dir="ltr">RESUMED</code> (<a href="https://android-review.googlesource.com/#/q/I38c65f834e9b85c365952fdb1e84e03a82863063">I38c65</a>, <a href="https://issuetracker.google.com/issues/172925703">b/172925703</a>)</li> </ul> <p><strong>External Contribution</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentFactory</code> now caches fragment classes separately for different <code translate="no" dir="ltr">ClassLoader</code> instances. Thanks Simon Schiller! (<a href="https://github.com/androidx/androidx/pull/87">#87</a>, <a href="https://issuetracker.google.com/113886460">b/113886460</a>)</li> </ul> <h3 id="1.3.0-beta01" data-text="Version 1.3.0-beta01" tabindex="-1">Version 1.3.0-beta01</h3> <p>October 1, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-beta01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-beta01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-beta01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/96eb302ee1740ba656c90c9fb27df3723a1a89c1..f5a2c7477391539d8bc9f65a8f0db1e8a7bf2cf5/fragment">Version 1.3.0-beta01 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">setMaxLifecycle()</code> now supports setting the <code translate="no" dir="ltr">Lifecycle</code> state to <code translate="no" dir="ltr">INITIALIZING</code> as long as the fragment has not been moved to <code translate="no" dir="ltr">CREATED</code>. (<a href="https://issuetracker.google.com/issues/159662173">b/159662173</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>Upgrade androidx to use Kotlin 1.4 (<a href="https://android-review.googlesource.com/#/q/Id647100407925c16d734c8c43392b4e2d108d0e3">Id6471</a>, <a href="https://issuetracker.google.com/issues/165307851">b/165307851</a>, <a href="https://issuetracker.google.com/issues/165300826">b/165300826</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>Fragment resource files have been correctly made private. (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/1425237">aosp/1425237</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fragments inflated using the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag will now properly wait until their views are added to a container before moving to STARTED (<a href="https://android-review.googlesource.com/#/q/I02f4c2b910a182c580e514765062a649745161fb">I02f4c</a>)</li> <li>Fragments that are visible and then <code translate="no" dir="ltr">setMaxLifecycle()</code> to <code translate="no" dir="ltr">CREATED</code> now properly run their exit effects. (<a href="https://issuetracker.google.com/issues/165822335">b/165822335</a>)</li> <li>Removing a detached fragment that is not added to the back stack no longer causes a memory leak. Courtesy of Nicklas Ansman Giertz! (<a href="https://issuetracker.google.com/issues/166489383">b/166489383</a>)</li> <li>Active fragments will now always have a non-null <code translate="no" dir="ltr">FragmentManager</code> and fragments with a non-null <code translate="no" dir="ltr">FragmentManager</code> will always be considered active. (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/1422346">aosp/1422346</a>)</li> <li>The fragment default effects, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_OPEN</code>, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_CLOSE</code>, and <code translate="no" dir="ltr">TRANSIT_FRAGMENT_FADE</code>, now use <a href="/reference/android/animation/Animator"><code translate="no" dir="ltr">Animator</code></a> instead of <a href="/reference/kotlin/android/view/animation/Animation"><code translate="no" dir="ltr">Animation</code></a>. (<a href="https://issuetracker.google.com/issues/1661550343">b/166155034</a>)</li> </ul> <p><strong>New State Manager Bug Fixes</strong></p> <ul> <li>Fragments now properly restore their view focus state from right before they start their animation. (<a href="https://android-review.googlesource.com/#/q/Icc2561fb3dc413250153e5e0fcb2d10846791d53">Icc256</a>)</li> <li>Fragments that only have a shared element transition now properly complete their special effects meaning they actually move to their final state (<a href="https://android-review.googlesource.com/#/q/Iaebc76914b9c24968a2943c18911b183f9dd8a4f">Iaebc7</a>, <a href="https://issuetracker.google.com/issues/166658128">b/166658128</a>)</li> <li>Fragment views are now always removed from the container before being destroyed. (<a href="https://android-review.googlesource.com/#/q/Id587699a6ae9dd696f568f8e0a5304156be1cd82">Id5876</a>)</li> <li>The new state manager now consistently removes the exiting fragment view before adding the entering one. (<a href="https://android-review.googlesource.com/#/q/I41a6ee1a0bc135c0443d8152a8106498241d3862">I41a6e</a>)</li> <li>Explicit changes to a fragment view’s visibility are now respected by the new state manager. This means that if you set an entering fragment’s view to <code translate="no" dir="ltr">INVISIBLE</code> before the animation begins, it will actually stay invisible. (<a href="https://issuetracker.google.com/issues/164481490">b/164481490</a>)</li> <li>Fragments now prioritize <code translate="no" dir="ltr">Animators</code> over <code translate="no" dir="ltr">Animations</code>, meaning a fragment with both will only run the <code translate="no" dir="ltr">Animator</code> and ignore the <code translate="no" dir="ltr">Animation</code>. (<a href="https://issuetracker.google.com/issues/167579557">b/167579557</a>)</li> <li>The new state manager no longer causes fragments to flash when using entering animations. (<a href="https://issuetracker.google.com/issues/163084315">b/163084315</a>)</li> </ul> <p><strong>Known Issue</strong></p> <p>When using the new state manager, if you press back during an entering special effect instead of returning to the previous fragment, the old fragment is never re-added, resulting in a blank screen. (<a href="https://issuetracker.google.com/issues/167259187">b/167259187</a>, <a href="https://issuetracker.google.com/issues/167092035">b/167092035</a>, <a href="https://issuetracker.google.com/issues/168442830">b/168442830</a>)</p> <h3 id="1.3.0-alpha08" data-text="Version 1.3.0-alpha08" tabindex="-1">Version 1.3.0-alpha08</h3> <p>August 19, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha08</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha08</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha08</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/9f60cc700129e30cee9df020005c317fb39d32ec..96eb302ee1740ba656c90c9fb27df3723a1a89c1/fragment">Version 1.3.0-alpha08 contains these commits.</a></p> <p><strong>New State Manager</strong></p> <p>This release includes a major refactoring of the internal state management of <code translate="no" dir="ltr">FragmentManager</code> which affects the dispatch of lifecycle methods, animations and transitions, and how postponed transactions are handled. This is enabled by default. See the <a href="https://medium.com/androiddevelopers/fragments-rebuilding-the-internals-61913f8bf48e">Fragments: Rebuilding the Internals blog post</a> for more details. (<a href="https://issuetracker.google.com/139536619">b/139536619</a>, <a href="https://issuetracker.google.com/147749580">b/147749580</a>)</p> <ul> <li>An <em>experimental</em> API in <code translate="no" dir="ltr">FragmentManager.enableNewStateManager(boolean)</code> can be used to control whether FragmentManager uses the new state manager. (<a href="https://android-review.googlesource.com/#/q/I7b6ee13ea89f3989beafe7c474455e8a04e929a3">I7b6ee</a>)</li> </ul> <p>The following issues are fixed only when using the new state manager:</p> <ul> <li>The previous fragment of a <code translate="no" dir="ltr">replace</code> operation is now correctly stopped before the new fragment is started. (<a href="https://issuetracker.google.com/161654580">b/161654580</a>)</li> <li>Fragments now prevent multiple competing animations on the same fragments, avoiding cases where an <code translate="no" dir="ltr">Animation</code> would override all <code translate="no" dir="ltr">Transition</code> effects or an <code translate="no" dir="ltr">Animator</code> and a <code translate="no" dir="ltr">Transition</code> on an individual fragment would both run. (<a href="https://issuetracker.google.com/149569323">b/149569323</a>)</li> <li>The <code translate="no" dir="ltr">enterTransition</code> and <code translate="no" dir="ltr">exitTranstion</code> of <strong>all</strong> fragments entering and exiting are now ran rather than only the last entering fragment and the first exiting fragment. (<a href="https://issuetracker.google.com/149344150">b/149344150</a>)</li> <li>Postponed fragments no longer get stuck at the <code translate="no" dir="ltr">CREATED</code> state but instead move to <code translate="no" dir="ltr">STARTED</code> with other fragments. (<a href="https://issuetracker.google.com/129035555">b/129035555</a>)</li> <li>Fixed an issue where <code translate="no" dir="ltr">FragmentManager</code> would execute operations out of order when mixing a postponed re-ordered transaction and a non-reordered transaction. (<a href="https://issuetracker.google.com/147297731">b/147297731</a>)</li> <li>Popping multiple fragments simultaneously will no longer result in intermediate fragments being temporarily visible when postponing fragments. (<a href="https://issuetracker.google.com/37140383">b/37140383</a>)</li> <li><code translate="no" dir="ltr">FragmentManager</code> now returns the correct fragments when calling <code translate="no" dir="ltr">findFragmentById()</code> or <code translate="no" dir="ltr">findFragmentByTag()</code> from within the <code translate="no" dir="ltr">onAttachFragment()</code> callback. (<a href="https://issuetracker.google.com/153082833">b/153082833</a>)</li> <li>Fragments no longer call <code translate="no" dir="ltr">onCreateView()</code> on fragments being destroyed when the fragment replacing them is postponed. (<a href="https://issuetracker.google.com/143915710">b/143915710</a>)</li> <li>The error message when attempting to combine framework <code translate="no" dir="ltr">Transition</code> and AndroidX <code translate="no" dir="ltr">Transition</code> instances now mentions the fragment with the invalid transition. (<a href="https://issuetracker.google.com/155574969">b/155574969</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>You can now call <code translate="no" dir="ltr">launch()</code> on an <code translate="no" dir="ltr">ActivityResultLauncher</code> in the <code translate="no" dir="ltr">onCreate()</code> lifecycle method of a fragment. (<a href="https://issuetracker.google.com/issues/161464278">b/161464278</a>)</li> <li>Calling <code translate="no" dir="ltr">registerForActivityResult()</code> after <code translate="no" dir="ltr">onCreate()</code> now throws an exception indicating that this is not allowed rather than silently failing to deliver results after a configuration change. (<a href="https://issuetracker.google.com/162255449">b/162255449</a>)</li> <li><code translate="no" dir="ltr">FragmentActivity</code> now uses the <code translate="no" dir="ltr">OnContextAvailableListener</code> API introduced in <a href="/jetpack/androidx/releases/activity#1.2.0-alpha08">Activity <code translate="no" dir="ltr">1.2.0-alpha08</code></a> to restore the state of the <code translate="no" dir="ltr">FragmentManager</code>. Any listeners added to subclasses of <code translate="no" dir="ltr">FragmentActivity</code> will run after this listener. (<a href="https://android-review.googlesource.com/#/q/I513da73bc0862b62af4166be35ba353fc7869a09">I513da</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li><code translate="no" dir="ltr">ActivityOptions</code> passed through when using <code translate="no" dir="ltr">startIntentSenderForResult()</code> are now respected. (<a href="https://issuetracker.google.com/162247961">b/162247961</a>)</li> </ul> <p><strong>Known Issue</strong></p> <ul> <li>When using the new state manager, directly setting the visibility of the fragment’s root view after <code translate="no" dir="ltr">onViewCreated()</code> and before <code translate="no" dir="ltr">onResume()</code> results in the visibility you set being overridden by <code translate="no" dir="ltr">FragmentManager</code>, who controls the visibility of the root view. As a workaround, you should always use the <code translate="no" dir="ltr">hide()</code> and <code translate="no" dir="ltr">show()</code> operations to change the visibility of your fragment. (<a href="https://issuetracker.google.com/164481490">b/164481490</a>)</li> </ul> <h3 id="1.3.0-alpha07" data-text="Version 1.3.0-alpha07" tabindex="-1">Version 1.3.0-alpha07</h3> <p>July 22, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha07</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha07</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha07</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/bea4dafe72ba1ec91a105da3128954d5ed7f1cd0..9f60cc700129e30cee9df020005c317fb39d32ec/fragment">Version 1.3.0-alpha07 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentScenario</code> now supports setting an initial Lifecycle state of <code translate="no" dir="ltr">CREATED</code>, <code translate="no" dir="ltr">STARTED</code>, or <code translate="no" dir="ltr">RESUMED</code> rather than always moving the Fragment to the <code translate="no" dir="ltr">RESUMED</code> state. (<a href="https://issuetracker.google.com/159662750">b/159662750</a>)</li> <li>Added an alternative to the <code translate="no" dir="ltr">FragmentScenario</code> API of <code translate="no" dir="ltr">onFragment</code> in the form of the Kotlin reified extension method <code translate="no" dir="ltr">withFragment</code> that allows you to return a value. Notably, it rethrows exceptions raised in the given block. (<a href="https://issuetracker.google.com/158697631">b/158697631</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentScenario</code> now uses <a href="/reference/androidx/fragment/app/FragmentTransaction#setMaxLifecycle(androidx.fragment.app.Fragment,%20androidx.lifecycle.Lifecycle.State)"><code translate="no" dir="ltr">setMaxLifecycle()</code></a> to implement <code translate="no" dir="ltr">moveToState()</code>, ensuring consistent behavior on all API levels and decoupling the Fragment’s state from the underlying Activity. (<a href="https://issuetracker.google.com/156527405">b/156527405</a>)</li> <li>The <code translate="no" dir="ltr">SavedStateRegistryOwner</code> returned by <code translate="no" dir="ltr">ViewTreeSavedStateRegistryOwner</code> is now tied to the fragment view’s Lifecycle. This ensures that it has its state saved and restore at the same time as the fragment’s view. (<a href="https://issuetracker.google.com/158503763">b/158503763</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fragments now wait for the fragment’s view to be attached before calling <code translate="no" dir="ltr">ViewCompat.requestApplyInsets()</code>, avoiding cases where the inset request was being dropped. (<a href="https://issuetracker.google.com/158095749">b/158095749</a>)</li> <li>Calling <code translate="no" dir="ltr">clearFragmentResultListener</code> now properly clears the lifecycle observer. (<a href="https://issuetracker.google.com/issues/159274993">b/159274993</a>)</li> </ul> <h3 id="1.3.0-alpha06" data-text="Version 1.3.0-alpha06" tabindex="-1">Version 1.3.0-alpha06</h3> <p>June 10, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha06</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha06</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha06</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/ccc6e95c574b66563952c33fbe26888b93a0e0cb..bea4dafe72ba1ec91a105da3128954d5ed7f1cd0/fragment">Version 1.3.0-alpha06 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>The <code translate="no" dir="ltr">onAttachFragment()</code> callback on <code translate="no" dir="ltr">FragmentActivity</code> and <code translate="no" dir="ltr">Fragment</code> have been deprecated. A new <code translate="no" dir="ltr">FragmentOnAttachListener</code> has been added to provide a more flexible alternative, allowing delegation of <code translate="no" dir="ltr">onAttachFragment()</code> to separate, testable listeners and support for adding a listener to FragmentManagers other than your direct child FragmentManager. (<a href="https://android-review.googlesource.com/#/q/I06d3daa4247914ae363382f7eab920657f23b5fa">I06d3d</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Parent fragments now have their view state restored before their child fragments, fixing a visual ordering issue after a configuration change when a <code translate="no" dir="ltr">DialogFragment</code> would show another <code translate="no" dir="ltr">DialogFragment</code> as a child fragment. (<a href="https://issuetracker.google.com/issues/157195715">b/157195715</a>)</li> <li>Fixed an issue where the <code translate="no" dir="ltr">UseRequireInsteadOfGet</code> Lint check would not handle chained usages of the <code translate="no" dir="ltr">?.</code> and <code translate="no" dir="ltr">!!</code> operators correctly. (<a href="https://issuetracker.google.com/issues/157677616">b/157677616</a>)</li> </ul> <h3 id="1.3.0-alpha05" data-text="Version 1.3.0-alpha05" tabindex="-1">Version 1.3.0-alpha05</h3> <p>May 20, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha05</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha05</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha05</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/942518f415d35ff9f2ff78f312c076c673468877..ccc6e95c574b66563952c33fbe26888b93a0e0cb/fragment">Version 1.3.0-alpha05 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Added support for <code translate="no" dir="ltr">ViewTreeViewModelStoreOwner</code> from <a href="/jetpack/androidx/releases/lifecycle#2.3.0-alpha03">Lifecycle <code translate="no" dir="ltr">2.3.0-alpha03</code></a>, and <code translate="no" dir="ltr">ViewTreeSavedStateRegistryOwner</code> from <a href="/jetpack/androidx/releases/savedstate#1.1.0-alpha01">SavedState <code translate="no" dir="ltr">1.1.0-alpha01</code></a> when using a <code translate="no" dir="ltr">View</code> within a <code translate="no" dir="ltr">Fragment</code>. (<a href="https://android-review.googlesource.com/1300264">aosp/1297993</a>, <a href="https://android-review.googlesource.com/1298680">aosp/1300264</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">setFragmentResult()</code> and <code translate="no" dir="ltr">setFragmentResultListener()</code> APIs now take a non-null <code translate="no" dir="ltr">Bundle</code> and <code translate="no" dir="ltr">FragmentResultListener</code>, respectively. To explicitly clear a previously set result or listener, use the new <code translate="no" dir="ltr">clearFragmentResult()</code> and <code translate="no" dir="ltr">clearFragmentResultListener()</code> methods. (<a href="https://issuetracker.google.com/issues/155416778">b/155416778</a>)</li> <li>The <code translate="no" dir="ltr">setFragmentResultListener()</code> Kotlin extensions that take a lambda are now marked as <code translate="no" dir="ltr">inline</code>. (<a href="https://issuetracker.google.com/issues/155323404">b/155323404</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>The previously deprecated <code translate="no" dir="ltr">startActivityForResult()</code>, <code translate="no" dir="ltr">startIntentSenderForResult()</code>, and <code translate="no" dir="ltr">requestPermissions</code> on <code translate="no" dir="ltr">Fragment</code> now internally use <code translate="no" dir="ltr">ActivityResultRegistry</code>, thus removing the restriction on using only the lower bits (below <code translate="no" dir="ltr">0xFFFF</code>) for your request codes when using those APIs. (<a href="https://issuetracker.google.com/issues/155518741">b/155518741</a>)</li> </ul> <p><strong>Documentation Updates</strong></p> <ul> <li>Expanded the documentation on the <code translate="no" dir="ltr">Fragment(@LayoutRes int)</code> and <code translate="no" dir="ltr">DialogFragment(@LayoutRes int)</code> constructors to clarify that they should be called from your subclasses’ no argument constructor when using the default <code translate="no" dir="ltr">FragmentFactory</code>. (<a href="https://issuetracker.google.com/issues/153042497">b/153042497</a>)</li> </ul> <h3 id="1.3.0-alpha04" data-text="Version 1.3.0-alpha04" tabindex="-1">Version 1.3.0-alpha04</h3> <p>April 29, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha04</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha04</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/6c98d66b901be2eecdf89477ccd70d2490ca6fc2..942518f415d35ff9f2ff78f312c076c673468877/fragment">Version 1.3.0-alpha04 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Added support for passing results between two Fragments via new APIs on <code translate="no" dir="ltr">FragmentManager</code>. This works for hierarchy fragments (parent/child), DialogFragments, and fragments in Navigation and ensures that results are only sent to your Fragment while it is at least <code translate="no" dir="ltr">STARTED</code>. (<a href="https://issuetracker.google.com/issues/149787344">b/149787344</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The target fragment APIs have been deprecated. To pass data between fragments the new Fragment Result APIs should be used instead. (<a href="https://issuetracker.google.com/issues/149787344">b/149787344</a>)</li> <li>The <code translate="no" dir="ltr">startActivityForResult()</code>/<code translate="no" dir="ltr">onActivityResult()</code> and <code translate="no" dir="ltr">requestPermissions()</code>/<code translate="no" dir="ltr">onRequestPermissionsResult()</code> APIs on Fragment have been deprecated. Please use the <a href="/training/basics/intents/result">Activity Result APIs</a>. (<a href="https://android-review.googlesource.com/1290887">aosp/1290887</a>)</li> <li><strong>Breaking change</strong> from <a href="/jetpack/androidx/releases/activity#1.2.0-alpha04">Activity <code translate="no" dir="ltr">1.2.0-alpha04</code></a>: the <code translate="no" dir="ltr">prepareCall()</code> method has been renamed to <code translate="no" dir="ltr">registerForActivityResult()</code>. (<a href="https://android-review.googlesource.com/1278717">aosp/1278717</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>The fragment’s <code translate="no" dir="ltr">getViewLifecycleOwner()</code> is now stopped before <code translate="no" dir="ltr">onSaveInstanceState()</code> is called, mirroring the behavior of the fragment’s lifecycle. (<a href="https://issuetracker.google.com/issues/154645875">b/154645875</a>)</li> <li>Calling <code translate="no" dir="ltr">setMenuVisibility(false)</code> on a fragment now correctly changes the visibility of menus provided by its child fragments. (<a href="https://issuetracker.google.com/issues/153593580">b/153593580</a>)</li> <li>Fixed an <code translate="no" dir="ltr">illegalStateException</code> when adding a fragment to a <code translate="no" dir="ltr">DialogFragment</code>’s view hierarchy with <code translate="no" dir="ltr">FragmentContainerView</code>. (<a href="https://issuetracker.google.com/issues/154366601">b/154366601</a>)</li> <li>The <code translate="no" dir="ltr">getDefaultViewModelProviderFactory()</code> method on fragments no longer crashes when hosting your fragments outside of an activity. (<a href="https://issuetracker.google.com/issues/153762914">b/153762914</a>)</li> </ul> <h3 id="1.3.0-alpha03" data-text="Version 1.3.0-alpha03" tabindex="-1">Version 1.3.0-alpha03</h3> <p>April 1, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha03</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/1e0ba6efec9a86f20ddc75c8c2b132e009cfb6b1..6c98d66b901be2eecdf89477ccd70d2490ca6fc2/fragment">Version 1.3.0-alpha03 contains these commits.</a></p> <p><strong>API Changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">prepareCall</code> methods on <code translate="no" dir="ltr">Fragment</code> are now <code translate="no" dir="ltr">final</code>. (<a href="https://issuetracker.google.com/issues/152439361">b/152439361</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a regression introduced in <a href="#1.3.0-alpha02">Fragment <code translate="no" dir="ltr">1.3.0-alpha02</code></a> when using <code translate="no" dir="ltr">BottomSheetDialogFragment</code>. (<a href="https://issuetracker.google.com/issues/151652127">b/151652127</a>, <a href="https://android-review.googlesource.com/1263328">aosp/1263328</a>, <a href="https://android-review.googlesource.com/1265163">aosp/1265163</a>)</li> <li>Fixed a crash when using <code translate="no" dir="ltr">prepareCall</code> from a fragment after a configuration change. (<a href="https://issuetracker.google.com/issues/152137004">b/152137004</a>)</li> <li>Fixed an issue where shared element and exit transitions are ignored when using <code translate="no" dir="ltr">setTargetFragment()</code>. (<a href="https://issuetracker.google.com/issues/152023196">b/152023196</a>)</li> <li>From <a href="#1.2.4">Fragment <code translate="no" dir="ltr">1.2.4</code></a>: Updated the Fragment ProGuard rules to allow obfuscation of kept fragments. (<a href="https://issuetracker.google.com/issues/151605338">b/151605338</a>)</li> <li>From <a href="#1.2.4">Fragment <code translate="no" dir="ltr">1.2.4</code></a>: Disabled the <code translate="no" dir="ltr">FragmentLiveDataObserve</code> Lint rule on <code translate="no" dir="ltr">DialogFragment</code> classes as their lifecycle and view lifecycle are always in sync, making it safe to use either <code translate="no" dir="ltr">this</code> or <code translate="no" dir="ltr">viewLifecycleOwner</code> when calling <code translate="no" dir="ltr">observe</code>. (<a href="https://issuetracker.google.com/issues/151765086">b/151765086</a>)</li> </ul> <p><strong>Dependency Changes</strong></p> <ul> <li>Fragments depend on <a href="/jetpack/androidx/releases/activity#1.2.0-alpha03">Activity <code translate="no" dir="ltr">1.2.0-alpha03</code></a>, which had significant improvements to the Activity Result API introduced in Activity <code translate="no" dir="ltr">1.2.0-alpha02</code>.</li> </ul> <h3 id="1.3.0-alpha02" data-text="Version 1.3.0-alpha02" tabindex="-1">Version 1.3.0-alpha02</h3> <p>March 18, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/666ae665acfcfa2a20eccc18e4494808169742f4..1e0ba6efec9a86f20ddc75c8c2b132e009cfb6b1/fragment">Version 1.3.0-alpha02 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Added support for the <code translate="no" dir="ltr">ActivityResultRegistry</code> API introduced in <a href="/jetpack/androidx/releases/activity#1.2.0-alpha02">Activity <code translate="no" dir="ltr">1.2.0-alpha02</code></a> to handle the <code translate="no" dir="ltr">startActivityForResult()</code>+<code translate="no" dir="ltr">onActivityResult()</code> as well as <code translate="no" dir="ltr">requestPermissions()</code>+<code translate="no" dir="ltr">onRequestPermissionsResult()</code> flows without overriding methods in your Fragment in addition to providing hooks for testing these flows. See the updated <a href="/training/basics/intents/result">Getting a Result from an Activity</a>. (<a href="https:///issuetracker.google.com/issues/125158199">b/125158199</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">DialogFragment</code> now provides a constructor that takes a <code translate="no" dir="ltr">@LayoutRes</code> that indicates the layout that <code translate="no" dir="ltr">onCreateView()</code> should inflate by default. (<a href="https://issuetracker.google.com/issues/150327080">b/150327080</a>)</li> <li>The <code translate="no" dir="ltr">onActivityCreated()</code> method is now deprecated. Code touching the fragment&#39;s view should be done in <code translate="no" dir="ltr">onViewCreated()</code> (which is called immediately before <code translate="no" dir="ltr">onActivityCreated()</code>) and other initialization code should be in <code translate="no" dir="ltr">onCreate()</code>. To receive a callback specifically when the activity&#39;s <code translate="no" dir="ltr">onCreate()</code> is complete, a <code translate="no" dir="ltr">LifeCycleObserver</code> should be registered on the activity&#39;s <code translate="no" dir="ltr">Lifecycle</code> in <code translate="no" dir="ltr">onAttach()</code>, and removed once the <code translate="no" dir="ltr">onCreate()</code> callback is received. (<a href="https://issuetracker.google.com/issues/144309266">b/144309266</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>From <a href="#1.2.3">Fragment <code translate="no" dir="ltr">1.2.3</code></a>: Fixed a bug in <code translate="no" dir="ltr">DialogFragment</code> that caused a <code translate="no" dir="ltr">StackOverflowError</code> when calling <code translate="no" dir="ltr">getLayoutInflater()</code> from within <code translate="no" dir="ltr">onCreateDialog()</code>. (<a href="https://issuetracker.google.com/issues/117894767">b/117894767</a>, <a href="https://android-review.googlesource.com/1258664">aosp/1258664</a>)</li> <li>From <a href="#1.2.3">Fragment <code translate="no" dir="ltr">1.2.3</code></a>: Reduced the scope of Fragment’s included ProGuard rules to ensure that unused Fragment classes can be stripped. (<a href="https://issuetracker.google.com/issues/149665169">b/149665169</a>)</li> <li>From <a href="#1.2.3">Fragment <code translate="no" dir="ltr">1.2.3</code></a>: Fixed false positives in the <code translate="no" dir="ltr">UseRequireInsteadOfGet</code> Lint check when using a local variable name that shadowed the Kotlin property name. (<a href="https://issuetracker.google.com/issues/149891163">b/149891163</a>)</li> <li>From <a href="#1.2.3">Fragment <code translate="no" dir="ltr">1.2.3</code></a>: <code translate="no" dir="ltr">FragmentContainerView</code> no longer throws an <code translate="no" dir="ltr">UnsupportedOperationException</code> for using the incorrect constructor in layout preview. (<a href="https://issuetracker.google.com/issues/149707833">b/149707833</a>)</li> </ul> <p><strong>Known Issues</strong></p> <ul> <li><code translate="no" dir="ltr">BottomSheetDialogFragment</code> no longer properly positions its dialog on the screen. (<a href="https://issuetracker.google.com/issues/151652127">b/151652127</a>)</li> </ul> <h3 id="1.3.0-alpha01" data-text="Version 1.3.0-alpha01" tabindex="-1">Version 1.3.0-alpha01</h3> <p>March 4, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.3.0-alpha01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.3.0-alpha01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.3.0-alpha01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/905771170a6b905b05c195eb55273e8f0aade92b..666ae665acfcfa2a20eccc18e4494808169742f4/fragment">Version 1.3.0-alpha01 contains these commits.</a></p> <p><strong>New Features</strong></p> <ul> <li>Added support for the <code translate="no" dir="ltr">ViewTreeLifecycleOwner.get(View)</code> API added in <a href="/jetpack/androidx/releases/lifecycle#2.3.0-alpha01">Lifecycle <code translate="no" dir="ltr">2.3.0-alpha01</code></a> such that it will return the Fragment’s <a href="/reference/androidx/fragment/app/Fragment#getViewLifecycleOwner()"><code translate="no" dir="ltr">viewLifecycleOwner</code></a> as the <code translate="no" dir="ltr">LifecycleOwner</code> for any Views returned by <code translate="no" dir="ltr">onCreateView()</code>. (<a href="https://android-review.googlesource.com/1182955">aosp/1182955</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">setRetainInstance()</code> method on Fragments has been deprecated. With the introduction of <a href="/topic/libraries/architecture/viewmodel">ViewModels</a>, developers have a specific API for retaining state that can be associated with Activities, Fragments, and Navigation graphs. This allows developers to use a normal, not retained Fragment and keep the specific state they want retained separate, avoiding a common source of leaks while maintaining the useful properties of a single creation and destruction of the retained state (namely, the constructor of the <code translate="no" dir="ltr">ViewModel</code> and the <code translate="no" dir="ltr">onCleared()</code> callback it receives). (<a href="https://issuetracker.google.com/issues/143911815">b/143911815</a>)</li> <li>With the release of <a href="/jetpack/androidx/releases/viewpager2#1.0.0">ViewPager2 <code translate="no" dir="ltr">1.0.0</code></a>, the <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> classes for interacting with <code translate="no" dir="ltr">ViewPager</code> have been deprecated. See <a href="/training/animation/vp2-migration">Migrate from ViewPager to ViewPager2</a>. (<a href="https://issuetracker.google.com/issues/145132715">b/145132715</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fragment ProGuard rules now correctly only keep the default constructors <code translate="no" dir="ltr">Fragment</code> classes that are used rather than for all <code translate="no" dir="ltr">Fragment</code> instances, fixing a regression introduced in <a href="/jetpack/androidx/releases/fragment#1.2.1">Fragment <code translate="no" dir="ltr">1.2.1</code></a>. (<a href="https://issuetracker.google.com/issues/149665169">b/149665169</a></li> <li>The <code translate="no" dir="ltr">require___()</code> Lint rules added in <a href="/jetpack/androidx/releases/fragment#1.2.2">Fragment <code translate="no" dir="ltr">1.2.2</code></a> no longer false positive on local variables that share the same name as the shadowed Kotlin property names (i.e., <code translate="no" dir="ltr">view</code>). (<a href="https://issuetracker.google.com/issues/149891163">b/149891163</a>)</li> <li><code translate="no" dir="ltr">FragmentContainerView</code> no longer throws an <code translate="no" dir="ltr">UnsupportedOperationException</code> when using the layout preview in Android Studio. (<a href="https://issuetracker.google.com/issues/149707833">b/149707833</a>)</li> <li>Fixed an issue where retained fragments that were added after the state is saved would not be continually recreated and then destroyed after each configuration change. (<a href="https://issuetracker.google.com/issues/145832397">b/145832397</a>)</li> </ul> <h2 id="version_125_3" data-text="Version 1.2.5" tabindex="-1">Version 1.2.5</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.2.5" data-text="Version 1.2.5" tabindex="-1">Version 1.2.5</h3> <p>June 10, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.5</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.5</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.5</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/1f1113dbc41d1678cef9a13711434b9640729ccd..1fa73cb2d5a51ba9016a9d7f8cf80e04ad50f528/fragment">Version 1.2.5 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>The fragment’s <code translate="no" dir="ltr">getViewLifecycleOwner()</code> is now stopped before <code translate="no" dir="ltr">onSaveInstanceState()</code> is called, mirroring the behavior of the fragment’s lifecycle. This was previously released in <a href="#1.3.0-alpha04">Fragment <code translate="no" dir="ltr">1.3.0-alpha04</code></a>. (<a href="https://issuetracker.google.com/issues/154645875">b/154645875</a>)</li> <li>Calling <code translate="no" dir="ltr">setMenuVisibility(false)</code> on a fragment now correctly changes the visibility of menus provided by its child fragments. This was previously released in <a href="#1.3.0-alpha04">Fragment <code translate="no" dir="ltr">1.3.0-alpha04</code></a>. (<a href="https://issuetracker.google.com/issues/153593580">b/153593580</a>)</li> </ul> <h2 id="version_124_3" data-text="Version 1.2.4" tabindex="-1">Version 1.2.4</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.2.4" data-text="Version 1.2.4" tabindex="-1">Version 1.2.4</h3> <p>April 1, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.4</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.4</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.4</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/bb33dc2112f153d6d7ae15a267d2acd7ac53dabb..1f1113dbc41d1678cef9a13711434b9640729ccd/fragment">Version 1.2.4 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Updated the Fragment ProGuard rules to allow obfuscation of kept fragments. (<a href="https://issuetracker.google.com/issues/151605338">b/151605338</a>)</li> <li>Disabled the <code translate="no" dir="ltr">FragmentLiveDataObserve</code> Lint rule on <code translate="no" dir="ltr">DialogFragment</code> classes as their lifecycle and view lifecycle are always in sync, making it safe to use either <code translate="no" dir="ltr">this</code> or <code translate="no" dir="ltr">viewLifecycleOwner</code> when calling <code translate="no" dir="ltr">observe</code>. (<a href="https://issuetracker.google.com/issues/151765086">b/151765086</a>)</li> </ul> <h2 id="version_123_3" data-text="Version 1.2.3" tabindex="-1">Version 1.2.3</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.2.3" data-text="Version 1.2.3" tabindex="-1">Version 1.2.3</h3> <p>March 18, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.3</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.3</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.3</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/9598eb9e7eaf8411e0433c8b5fc5a5bc8abc096a..bb33dc2112f153d6d7ae15a267d2acd7ac53dabb/fragment">Version 1.2.3 contains these commits.</a></p> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed a bug in <code translate="no" dir="ltr">DialogFragment</code> that caused a <code translate="no" dir="ltr">StackOverflowError</code> when calling <code translate="no" dir="ltr">getLayoutInflater()</code> from within <code translate="no" dir="ltr">onCreateDialog()</code>. (<a href="https://issuetracker.google.com/issues/117894767">b/117894767</a>, <a href="https://android-review.googlesource.com/1258665">aosp/1258665</a>)</li> <li>Reduced the scope of Fragment’s included ProGuard rules to ensure that unused Fragment classes can be stripped. (<a href="https://issuetracker.google.com/issues/149665169">b/149665169</a>)</li> <li>Fixed false positives in the <code translate="no" dir="ltr">UseRequireInsteadOfGet</code> Lint check when using a local variable name that shadowed the Kotlin property name. (<a href="https://issuetracker.google.com/issues/149891163">b/149891163</a>)</li> <li><code translate="no" dir="ltr">FragmentContainerView</code> no longer throws an <code translate="no" dir="ltr">UnsupportedOperationException</code> for using the incorrect constructor in layout preview. (<a href="https://issuetracker.google.com/issues/149707833">b/149707833</a>)</li> </ul> <h2 id="version_122_3" data-text="Version 1.2.2" tabindex="-1">Version 1.2.2</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.2.2" data-text="Version 1.2.2" tabindex="-1">Version 1.2.2</h3> <p>February 19, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.2</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.2</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.2</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/b27fe92ff55203b778e3201a949a85c7c6c1bf76..9598eb9e7eaf8411e0433c8b5fc5a5bc8abc096a/fragment">Version 1.2.2 contains these commits.</a></p> <p><strong>New Lint checks</strong></p> <ul> <li>Lint suggests using the <code translate="no" dir="ltr">viewLifecycleOwner</code> as the <code translate="no" dir="ltr">LifecycleOwner</code> to calls into <code translate="no" dir="ltr">OnBackPressedDispatcher</code> in <code translate="no" dir="ltr">onCreateView()</code>, <code translate="no" dir="ltr">onViewCreated()</code>, and <code translate="no" dir="ltr">onActivityCreated()</code>. (<a href="https://issuetracker.google.com/issues/142117657">b/142117657</a>)</li> <li>Added a new Lint check that confirms that you are using the correct <code translate="no" dir="ltr">debugImplementation</code> when using the <code translate="no" dir="ltr">fragment-testing</code> artifact. (<a href="https://issuetracker.google.com/issues/141500106">b/141500106</a>)</li> <li>Fragments now suggest using the associated <code translate="no" dir="ltr">require___()</code> methods for more descriptive error messages instead of <code translate="no" dir="ltr">checkNotNull(get___())</code>, <code translate="no" dir="ltr">requireNonNull(get___())</code>, or <code translate="no" dir="ltr">get___()!!</code> for all of the Fragment APIs that include both a <code translate="no" dir="ltr">get</code> and <code translate="no" dir="ltr">require</code> equivalent. (<a href="https://android-review.googlesource.com/1202883">aosp/1202883</a>)</li> </ul> <p><strong>Bug Fixes</strong></p> <ul> <li>Fixed the Fragment ProGuard files to avoid R8 warnings (<a href="https://issuetracker.google.com/issues/148963981">b/148963981</a>)</li> <li>Improved the existing Lint check suggesting using <code translate="no" dir="ltr">viewLifecycleOwner</code> when using <code translate="no" dir="ltr">observe</code> to also handle the <code translate="no" dir="ltr">livedata-ktx</code> extension method version of <code translate="no" dir="ltr">observe</code>. (<a href="https://issuetracker.google.com/issues/148996309">b/148996309</a>)</li> <li>Fixed the formatting for many of the Lint checks (<a href="https://android-review.googlesource.com/1157012">aosp/1157012</a>)</li> </ul> <p><strong>External contributions</strong></p> <ul> <li>Thanks to Zac Sweers for contributing the <code translate="no" dir="ltr">require___()</code> Lint checks on behalf of Slack! (<a href="https://android-review.googlesource.com/1202883">aosp/1202883</a>)</li> </ul> <h2 id="version_121_3" data-text="Version 1.2.1" tabindex="-1">Version 1.2.1</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.2.1" data-text="Version 1.2.1" tabindex="-1">Version 1.2.1</h3> <p>February 5, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.1</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.1</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.1</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/905771170a6b905b05c195eb55273e8f0aade92b..b27fe92ff55203b778e3201a949a85c7c6c1bf76/fragment">Version 1.2.1 contains these commits</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fragments added via the <code translate="no" dir="ltr">add</code> and <code translate="no" dir="ltr">replace</code> methods that take a <code translate="no" dir="ltr">Class</code> instance (or the Kotlin reified versions) now have their default constructor kept by ProGuard. (<a href="https://issuetracker.google.com/issues/148181315">b/148181315</a>)</li> <li><code translate="no" dir="ltr">FragmentStatePagerAdapter</code> and <code translate="no" dir="ltr">FragmentPagerAdapter</code> no longer catch exceptions thrown by <code translate="no" dir="ltr">FragmentManager</code> when running <code translate="no" dir="ltr">finishUpdate()</code>. (<a href="https://android-review.googlesource.com/1208711/">aosp/1208711</a>)</li> <li>Fixed an issue where <code translate="no" dir="ltr">FragmentManager.findFragment()</code> did not work with fragments added via the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag. (<a href="https://issuetracker.google.com/issues/147784323">b/147784323</a>)</li> <li>Fragments inflated using the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag now always receive a call to <code translate="no" dir="ltr">onInflate()</code> before <code translate="no" dir="ltr">onCreate()</code> when in the layout. (<a href="https://android-review.googlesource.com/1215856/">aosp/1215856</a>)</li> <li>Calling <code translate="no" dir="ltr">toString()</code> on a <code translate="no" dir="ltr">FragmentManager</code> instance no longer throws a <code translate="no" dir="ltr">NullPointerException</code> when the Activity is already destroyed. (<a href="https://issuetracker.google.com/issues/148189412">b/148189412</a>)</li> </ul> <p><strong>Dependency changes</strong></p> <ul> <li>Fragments <code translate="no" dir="ltr">1.2.1</code> now depends on <a href="/jetpack/androidx/releases/lifecycle#viewmodel-savedstate-2.2.0">Lifecycle ViewModel SavedState <code translate="no" dir="ltr">2.2.0</code></a>.</li> </ul> <h2 id="version_120_3" data-text="Version 1.2.0" tabindex="-1">Version 1.2.0</h2> <aside class="note"><strong>Note:</strong><span> The Kotlin dependant libraries of this version (<code translate="no" dir="ltr">fragment-ktx</code>,<code translate="no" dir="ltr">fragment-testing</code>) target Java 8 programming language bytecode. Please read <a href="/studio/write/java8-support">Use Java 8 language features</a> to learn how to use it in your project.</span></aside> <h3 id="1.2.0" data-text="Version 1.2.0" tabindex="-1">Version 1.2.0</h3> <p>January 22, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/52c5cbd1c318a40cad51528d31aa6535f1ab38fe..905771170a6b905b05c195eb55273e8f0aade92b/fragment">Version 1.2.0 contains these commits</a>.</p> <p><strong>Important changes since 1.1.0</strong></p> <ul> <li><strong>FragmentContainerView</strong>: The <code translate="no" dir="ltr">FragmentContainerView</code> is the strongly recommended container for dynamically added Fragments, replacing usage of <code translate="no" dir="ltr">FrameLayout</code> or other layouts. It also supports the same <code translate="no" dir="ltr">class</code>, <code translate="no" dir="ltr">android:name</code>, and optional <code translate="no" dir="ltr">android:tag</code> as the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag, but uses a normal <code translate="no" dir="ltr">FragmentTransaction</code> to add this initial fragment, instead of the custom code path used by <code translate="no" dir="ltr">&lt;fragment&gt;</code>.</li> <li><strong><code translate="no" dir="ltr">onDestroyView()</code> timing</strong>: Fragments now wait for exit animations, exit framework transitions, and exit AndroidX transitions (when using <a href="/jetpack/androidx/releases/transition#version_130_2">Transition <code translate="no" dir="ltr">1.3.0</code></a>) to complete before calling <code translate="no" dir="ltr">onDestroyView()</code>.</li> <li><strong>Class based <code translate="no" dir="ltr">add()</code> and <code translate="no" dir="ltr">replace()</code></strong>: Added new overloads of <code translate="no" dir="ltr">add()</code> and <code translate="no" dir="ltr">replace()</code> on <code translate="no" dir="ltr">FragmentTransaction</code> that take a <code translate="no" dir="ltr">Class&lt;? extends Fragment&gt;</code> and optional <code translate="no" dir="ltr">Bundle</code> of arguments. These methods use your <code translate="no" dir="ltr">FragmentFactory</code> to construct an instance of the Fragment to add. Kotlin extensions that use reified types (i.e, <code translate="no" dir="ltr">fragmentTransaction.replace&lt;YourFragment&gt;(R.id.container)</code>) have also been added to <code translate="no" dir="ltr">fragment-ktx</code>.</li> <li><strong>Lifecycle ViewModel SavedState Integration</strong>: <code translate="no" dir="ltr">SavedStateViewModelFactory</code> is now the default factory used when using <code translate="no" dir="ltr">by viewModels()</code>, <code translate="no" dir="ltr">by activityViewModels()</code>, the <code translate="no" dir="ltr">ViewModelProvider</code> constructor, or <code translate="no" dir="ltr">ViewModelProviders.of()</code> with a Fragment.</li> <li><strong>New Lint checks</strong>: Added a new Lint check that ensures you are using <code translate="no" dir="ltr">getViewLifecycleOwner()</code> when observing <code translate="no" dir="ltr">LiveData</code> from <code translate="no" dir="ltr">onCreateView()</code>, <code translate="no" dir="ltr">onViewCreated()</code>, or <code translate="no" dir="ltr">onActivityCreated()</code>.</li> <li><strong><code translate="no" dir="ltr">getFragmentManager()</code> deprecation</strong>: The <code translate="no" dir="ltr">getFragmentManager()</code> and <code translate="no" dir="ltr">requireFragmentManager()</code> methods on Fragment have been deprecated and replaced with a single <code translate="no" dir="ltr">getParentFragmentManager()</code> method, which returns the non-null <code translate="no" dir="ltr">FragmentManager</code> the Fragment is added to (you can use <code translate="no" dir="ltr">isAdded()</code> to determine if it is safe to call).</li> <li><strong><code translate="no" dir="ltr">FragmentManager.enableDebugLogging()</code> deprecation</strong>: The static <code translate="no" dir="ltr">FragmentManager.enableDebugLogging</code> method has been deprecated. FragmentManager now respects <a href="/reference/android/util/Log#isLoggable(java.lang.String,%20int)"><code translate="no" dir="ltr">Log.isLoggable()</code></a> for the tag <code translate="no" dir="ltr">FragmentManager</code>, allowing you to enable either <code translate="no" dir="ltr">DEBUG</code> or <code translate="no" dir="ltr">VERBOSE</code> logging without re-compiling your app.</li> </ul> <p><strong>Known Issues</strong></p> <ul> <li>Fragments referenced only via the <code translate="no" dir="ltr">class</code> or <code translate="no" dir="ltr">android:name</code> attribute on a <code translate="no" dir="ltr">FragmentContainerView</code> are not kept by ProGuard automatically, requiring that you manually add a keep rule for each fragment class. (<a href="https://issuetracker.google.com/issues/142601969">b/142601969</a>)</li> <li>When adding a <code translate="no" dir="ltr">NavHostFragment</code> using <code translate="no" dir="ltr">class</code> or <code translate="no" dir="ltr">android:name</code> in XML with <code translate="no" dir="ltr">FragmentContainerView</code>, you cannot use <code translate="no" dir="ltr">findNavController()</code> in <code translate="no" dir="ltr">onCreate()</code> of your Activity. (<a href="https://issuetracker.google.com/issues/142847973">b/142847973</a>)</li> </ul> <h3 id="1.2.0-rc05" data-text="Version 1.2.0-rc05" tabindex="-1">Version 1.2.0-rc05</h3> <p>January 8, 2020</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-rc05</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-rc05</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-rc05</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/51813e9145ac8b1ed7f01f3b8dc6741abc937079..52c5cbd1c318a40cad51528d31aa6535f1ab38fe/fragment">Version 1.2.0-rc05 contains these commits</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed a regression in Fragment <code translate="no" dir="ltr">1.2.0-rc04</code> when using the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag which caused <code translate="no" dir="ltr">onViewCreated()</code> to be called incorrectly during activity destruction. (<a href="https://issuetracker.google.com/issues/146290333">b/146290333</a>)</li> <li>Fragments added with the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag now properly have their non-config cleared even when they are only sometimes in the layout (i.e., only in your landscape layout). As a consequence, these Fragments are now correctly moved to <code translate="no" dir="ltr">CREATED</code> even when not in your layout instead of being instantiated but never moving through any lifecycle methods. (<a href="https://issuetracker.google.com/issues/145769287">b/145769287</a>)</li> </ul> <h3 id="1.2.0-rc04" data-text="Version 1.2.0-rc04" tabindex="-1">Version 1.2.0-rc04</h3> <p>December 18, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-rc04</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-rc04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-rc04</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/0754f64b25856c50be34974ca8081be31c1b8b2f..51813e9145ac8b1ed7f01f3b8dc6741abc937079/fragment">Version 1.2.0-rc04 contains these commits</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Adjusted the animations for <code translate="no" dir="ltr">TRANSIT_FRAGMENT_OPEN</code>, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_CLOSE</code>, and <code translate="no" dir="ltr">TRANSIT_FRAGMENT_FADE</code> to avoid visual issues. (<a href="https://issuetracker.google.com/issues/145468417">b/145468417</a>)</li> </ul> <h3 id="1.2.0-rc03" data-text="Version 1.2.0-rc03" tabindex="-1">Version 1.2.0-rc03</h3> <p>December 4, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-rc03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-rc03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-rc03</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/daa892ee7bce89afe2ab151da444916753225de8..0754f64b25856c50be34974ca8081be31c1b8b2f/fragment">Version 1.2.0-rc03 contains these commits</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed an unintentional behavior change where Fragments who have been removed are still returned by <code translate="no" dir="ltr">findFragmentById()</code> / <code translate="no" dir="ltr">findFragmentByTag()</code> while their exit animations/transitions run. (<a href="https://issuetracker.google.com/issues/143982969">b/143982969</a>, <a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/1167585">aosp/1167585</a>)</li> <li>Child fragments are now correctly stopped before their parents when the containing activity calls <code translate="no" dir="ltr">onSaveInstanceState()</code>. (<a href="https://issuetracker.google.com/issues/144380645">b/144380645</a>)</li> <li>Fixed an issue where Views were incorrectly marked <code translate="no" dir="ltr">INVISIBLE</code> after popping a hidden Fragment. (<a href="https://issuetracker.google.com/issues/70793925">b/70793925</a>)</li> <li>Fragment shared element transitions now handle Views that have been rotated, scaled, etc. (<a href="https://issuetracker.google.com/issues/142835261">b/142835261</a>)</li> </ul> <p><strong>Documentation Updates</strong></p> <ul> <li>Clarified the deprecation documentation around <code translate="no" dir="ltr">setUserVisibleHint()</code>. (<a href="https://issuetracker.google.com/issues/143897055">b/143897055</a>)</li> <li>Improved the documentation on <code translate="no" dir="ltr">setFragmentFactory()</code> and <code translate="no" dir="ltr">getFragmentFactory()</code> to better indicate that setting a <code translate="no" dir="ltr">FragmentFactory</code> will also affect child FragmentManagers. (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/1170095">aosp/1170095</a>)</li> </ul> <p><strong>Dependency changes</strong></p> <ul> <li>Fragments now depends on Lifecycle <code translate="no" dir="ltr">2.2.0-rc03</code>, Lifecycle ViewModel SavedState <code translate="no" dir="ltr">1.0.0-rc03</code>, and Activity <code translate="no" dir="ltr">1.1.0-rc03</code>.</li> </ul> <h3 id="1.2.0-rc02" data-text="Version 1.2.0-rc02" tabindex="-1">Version 1.2.0-rc02</h3> <p>November 7, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-rc02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-rc02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-rc02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/b36efec9f0fbc815605584732e6e2b59b7fd0575..daa892ee7bce89afe2ab151da444916753225de8/fragment">Version 1.2.0-rc02 contains these commits</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>When in Kotlin, the LintFix for using <code translate="no" dir="ltr">getViewLifecycleOwner()</code> when observing <code translate="no" dir="ltr">LiveData</code> from <code translate="no" dir="ltr">onCreateView()</code>, <code translate="no" dir="ltr">onViewCreated()</code>, or <code translate="no" dir="ltr">onActivityCreated()</code> (introduced in <a href="/jetpack/androidx/releases/fragment#1.2.0-rc01">Fragment <code translate="no" dir="ltr">1.2.0-rc01</code></a>) now uses the Kotlin property access syntax <code translate="no" dir="ltr">viewLifecycleOwner</code> instead of <code translate="no" dir="ltr">getViewLifecycleOwner()</code>. (<a href="https://android-review.googlesource.com/1143821">aosp/1143821</a>)</li> </ul> <h3 id="1.2.0-rc01" data-text="Version 1.2.0-rc01" tabindex="-1">Version 1.2.0-rc01</h3> <p>October 23, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-rc01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-rc01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-rc01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/50959249335066aab14331fa93c0fa132cc00deb..b36efec9f0fbc815605584732e6e2b59b7fd0575/fragment">Version 1.2.0-rc01 contains these commits</a>.</p> <p><strong>New features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code> now supports the <code translate="no" dir="ltr">class</code> attribute in addition to <code translate="no" dir="ltr">android:name</code>, mirroring the functionality of the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag. (<a href="https://issuetracker.google.com/issues/142722242">b/142722242</a>)</li> <li>Added a new Lint check that ensures you are using <code translate="no" dir="ltr">getViewLifecycleOwner()</code> when observing <code translate="no" dir="ltr">LiveData</code> from <code translate="no" dir="ltr">onCreateView()</code>, <code translate="no" dir="ltr">onViewCreated()</code>, or <code translate="no" dir="ltr">onActivityCreated()</code>. (<a href="https://issuetracker.google.com/issues/137122478">b/137122478</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>The <code translate="no" dir="ltr">onDismiss</code> and <code translate="no" dir="ltr">onCancel</code> callbacks on <code translate="no" dir="ltr">DialogFragment</code> now guarantee that the <code translate="no" dir="ltr">DialogInterface</code> passed to them is non-null and that <code translate="no" dir="ltr">getDialog()</code> returns non-null when they are executed. (<a href="https://issuetracker.google.com/issues/141974033">b/141974033</a>)</li> <li><code translate="no" dir="ltr">FragmentContainerView</code> now adds the Fragment defined by <code translate="no" dir="ltr">class</code> or <code translate="no" dir="ltr">android:name</code> as part of inflation, ensuring that <code translate="no" dir="ltr">findFragmentById()</code> and <code translate="no" dir="ltr">findFragmentByTag()</code> work immediately afterwards. (<a href="https://issuetracker.google.com/issues/142520327">b/142520327</a>)</li> <li>Fixed an <code translate="no" dir="ltr">IllegalStateException</code> in <code translate="no" dir="ltr">FragmentContainerView</code> due to the state being saved. (<a href="https://issuetracker.google.com/issues/142580713">b/142580713</a>)</li> <li>Fixed an <code translate="no" dir="ltr">UnsupportedOperationException</code> in <code translate="no" dir="ltr">FragmentContainerView</code> when the <code translate="no" dir="ltr">FragmentContainerView</code> class is obfuscated. (<a href="https://issuetracker.google.com/issues/142657034">b/142657034</a>)</li> </ul> <p><strong>Known issues</strong></p> <ul> <li>Fragments referenced only via the <code translate="no" dir="ltr">class</code> or <code translate="no" dir="ltr">android:name</code> attribute on a <code translate="no" dir="ltr">FragmentContainerView</code> are not kept by ProGuard automatically, requiring that you manually add a keep rule for each fragment class. We have disabled the Lint rule suggesting moving to <code translate="no" dir="ltr">FragmentContainerView</code> until this is fixed via <code translate="no" dir="ltr">aapt2</code>. (<a href="https://issuetracker.google.com/issues/142601969">b/142601969</a>)</li> </ul> <h3 id="1.2.0-beta02" data-text="Version 1.2.0-beta02" tabindex="-1">Version 1.2.0-beta02</h3> <p>October 11, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-beta02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-beta02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-beta02</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/20f7c62349217f2b3f79a3c7548b2331235de42c..50959249335066aab14331fa93c0fa132cc00deb/fragment">Version 1.2.0-beta02 contains these commits</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed an issue where Fragment&#39;s <code translate="no" dir="ltr">onInflate()</code> did not receive proper attributes from <code translate="no" dir="ltr">FragmentContainerView</code>, breaking cases such as <code translate="no" dir="ltr">NavHostFragment</code>. (<a href="https://issuetracker.google.com/issues/142421837">b/142421837</a>)</li> </ul> <h3 id="1.2.0-beta01" data-text="Version 1.2.0-beta01" tabindex="-1">Version 1.2.0-beta01</h3> <p>October 9, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-beta01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-beta01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-beta01</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/1d4e6911dcf86c2b56d96037e56d0bbe4552732f..20f7c62349217f2b3f79a3c7548b2331235de42c/fragment">Version 1.2.0-beta01 contains these commits</a>.</p> <p><strong>New features</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code> adds support for adding an initial fragment with added support for the <code translate="no" dir="ltr">android:name</code> and optional <code translate="no" dir="ltr">android:tag</code> XML attributes. Unlike the <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag, <code translate="no" dir="ltr">FragmentContainerView</code> uses a normal <code translate="no" dir="ltr">FragmentTransaction</code> under the hood to add the initial fragment, allowing further <code translate="no" dir="ltr">FragmentTransaction</code> operations on the <code translate="no" dir="ltr">FragmentContainerView</code> and enables the usage of View Binding for the layout. (<a href="https://issuetracker.google.com/issues/139830628">b/139830628</a>, <a href="https://issuetracker.google.com/issues/141177981">b/141177981</a>)</li> <li>Fragments now contains a Lint warning offering a quick fix to replace <code translate="no" dir="ltr">&lt;fragment&gt;</code> with <code translate="no" dir="ltr">FragmentContainerView</code>. (<a href="https://issuetracker.google.com/issues/139830056">b/139830056</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed a <code translate="no" dir="ltr">ClassCastException</code> when using <code translate="no" dir="ltr">androidx.transition</code>. (<a href="https://issuetracker.google.com/issues/140680619">b/140680619</a>)</li> <li>When using <a href="/jetpack/androidx/releases/transition#1.3.0-beta01">Transition <code translate="no" dir="ltr">1.3.0-beta01</code></a>, Fragments now wait for <code translate="no" dir="ltr">androidx.transition</code> transitions (in addition to framework transitions and animations, which were fixed in <a href="/jetpack/androidx/releases/fragment#1.2.0-alpha03">Fragment <code translate="no" dir="ltr">1.2.0-alpha03</code></a> and <a href="/jetpack/androidx/releases/fragment#1.2.0-alpha02">Fragment <code translate="no" dir="ltr">1.2.0-alpha02</code></a>, respectively) to finish before dispatching <code translate="no" dir="ltr">onDestroyView()</code>. (<a href="https://android-review.googlesource.com/1119841">aosp/1119841</a>)</li> <li>When using <a href="/jetpack/androidx/releases/transition#1.3.0-beta01">Transition <code translate="no" dir="ltr">1.3.0-beta01</code></a>, Fragments now properly cancel <code translate="no" dir="ltr">androidx.transition</code> transitions before starting new transitions / animations on the same container. (<a href="https://android-review.googlesource.com/1119841">aosp/1119841</a>)</li> <li>Fixed an issue on API 17 and lower when using <code translate="no" dir="ltr">androidx.transition</code> transitions on the root view of your Fragment when using <code translate="no" dir="ltr">FragmentContainerView</code>. (<a href="https://issuetracker.google.com/issues/140361893">b/140361893</a>)</li> <li>The <code translate="no" dir="ltr">fragment-testing</code> artifact now depends on AndroidX Test <code translate="no" dir="ltr">1.2.0</code>, fixing an incompatibility with the latest Espresso 3.2.0. (<a href="https://issuetracker.google.com/issues/139100149">b/139100149</a>)</li> <li>Removed usage of <code translate="no" dir="ltr">Log.w</code> in FragmentManager. (<a href="https://android-review.googlesource.com/1126468">aosp/1126468</a>)</li> </ul> <p><strong>Known issues</strong></p> <ul> <li>Fragment&#39;s <code translate="no" dir="ltr">onInflate()</code> do not receive proper attributes from <code translate="no" dir="ltr">FragmentContainerView</code>, breaking cases such as <code translate="no" dir="ltr">NavHostFragment</code>. (<a href="https://issuetracker.google.com/issues/142421837">b/142421837</a>)</li> </ul> <h3 id="1.2.0-alpha04" data-text="Version 1.2.0-alpha04" tabindex="-1">Version 1.2.0-alpha04</h3> <p>September 18, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-alpha04</code>, <code translate="no" dir="ltr">androidx.fragment-ktx:example:1.2.0-alpha04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-alpha04</code> are released. <a href="https://android.googlesource.com/platform/frameworks/support/+log/8e4aaeee0302e90400b8aa995dbbc220aa5dfe21..6e3bf267861f1dffb15c0ceff82f553a658c9972/fragment">Version 1.2.0-alpha04 contains these commits</a>.</p> <p><strong>API changes</strong></p> <ul> <li>The <code translate="no" dir="ltr">getFragmentManager()</code> and <code translate="no" dir="ltr">requireFragmentManager()</code> methods on <code translate="no" dir="ltr">Fragment</code> have been deprecated and replaced with a single <code translate="no" dir="ltr">getParentFragmentManager()</code> method, which returns the non-null <code translate="no" dir="ltr">FragmentManager</code> the Fragment is added to (you can use <code translate="no" dir="ltr">isAdded()</code> to determine if it is safe to call). (<a href="https://issuetracker.google.com/issues/140574496">b/140574496</a>)</li> <li>The static <code translate="no" dir="ltr">FragmentManager.enableDebugLogging</code> method has been deprecated. FragmentManager now respects <a href="/reference/android/util/Log#isLoggable(java.lang.String,%20int)"><code translate="no" dir="ltr">Log.isLoggable()</code></a> for the tag <code translate="no" dir="ltr">FragmentManager</code>, allowing you to enable either <code translate="no" dir="ltr">DEBUG</code> or <code translate="no" dir="ltr">VERBOSE</code> logging without re-compiling your app. (<a href="https://android-review.googlesource.com/1116591">aosp/1116591</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fragments are now properly destroyed while exit animations on other fragments are running. (<a href="https://issuetracker.google.com/issues/140574199">b/140574199</a>)</li> <li>Fixed an issue where Fragments would call <code translate="no" dir="ltr">Activity.findViewById()</code> where before it did not. (<a href="https://android-review.googlesource.com/1116431">aosp/1116431</a>)</li> </ul> <h3 id="1.2.0-alpha03" data-text="Version 1.2.0-alpha03" tabindex="-1">Version 1.2.0-alpha03</h3> <p>September 5, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-alpha03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-alpha03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-alpha03</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/b4eddfd7b427a4a334dceb6e0fb600de38ccdd4f..8e4aaeee0302e90400b8aa995dbbc220aa5dfe21/fragment">here</a>.</p> <p><strong>API changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code> is now <code translate="no" dir="ltr">final</code>. (<a href="https://issuetracker.google.com/issues/140133091">b/140133091</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentContainerView</code> now properly reverses the draw order when popping fragments off the back stack. (<a href="https://issuetracker.google.com/issues/139104187">b/139104187</a>)</li> <li>Fixed an issue where the wrong animation would run when both popping a fragment and adding a new fragment at the same time. (<a href="https://issuetracker.google.com/issues/111659726">b/111659726</a>)</li> <li>Fragments now wait for transitions (in addition to animations, which was fixed in <a href="/jetpack/androidx/releases/fragment#1.2.0-alpha02">Fragment <code translate="no" dir="ltr">1.2.0-alpha02</code></a>) to finish before dispatching <code translate="no" dir="ltr">onDestroyView()</code>. (<a href="https://issuetracker.google.com/issues/138741697">b/138741697</a>)</li> </ul> <h3 id="1.2.0-alpha02" data-text="Version 1.2.0-alpha02" tabindex="-1">Version 1.2.0-alpha02</h3> <p>August 7, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-alpha02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-alpha02</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:11.2.0-alpha02</code> is released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/588801999e8e8ea9ec080a796f72fefa17f3cd3b..ece690f1fdb4481b47c5128fd21d88da7d6850a6/fragment">here</a>.</p> <p><strong>New features</strong></p> <ul> <li><code translate="no" dir="ltr">SavedStateViewModelFactory</code> is now the default factory used when using <code translate="no" dir="ltr">by viewModels()</code>, <code translate="no" dir="ltr">by activityViewModels()</code>, the <code translate="no" dir="ltr">ViewModelProvider</code> constructor, or <code translate="no" dir="ltr">ViewModelProviders.of()</code> with a <code translate="no" dir="ltr">Fragment</code>. (<a href="https://issuetracker.google.com/issues/135716331">b/135716331</a>)</li> <li>The default animations when using <code translate="no" dir="ltr">TRANSIT_FRAGMENT_OPEN</code>, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_CLOSE</code>, <code translate="no" dir="ltr">TRANSIT_FRAGMENT_FADE</code> with <code translate="no" dir="ltr">setTransition</code> on a <code translate="no" dir="ltr">FragmentTransaction</code> have been updated to match the animations used by activities on Android 10 devices. (<a href="https://android-review.googlesource.com/1012812">aosp/1012812</a>, <a href="https://android-review.googlesource.com/1014730">aosp/1014730</a>)</li> </ul> <p><strong>API changes</strong></p> <ul> <li>Introduces <code translate="no" dir="ltr">FragmentContainerView</code> as the strongly recommended container for dynamically added Fragments, replacing usage of <code translate="no" dir="ltr">FrameLayout</code>, etc. as it fixes animation z-ordering issues and window insets dispatching to Fragments. (<a href="https://issuetracker.google.com/issues/37036000">b/37036000</a>, <a href="https://android-review.googlesource.com/985243">aosp/985243</a>, <a href="https://issuetracker.google.com/issues/136494650">b/136494650</a>)</li> <li>Added a static <code translate="no" dir="ltr">FragmentManager.findFragment(View)</code> method to retrieve the containing Fragment from a view inflated by a fragment. A Kotlin extension is also available in <code translate="no" dir="ltr">fragment-ktx</code>. (<a href="https://android-review.googlesource.com/1090757">aosp/1090757</a>)</li> <li>Added new overloads of <code translate="no" dir="ltr">add()</code> and <code translate="no" dir="ltr">replace()</code> on <code translate="no" dir="ltr">FragmentTransaction</code> that take a <code translate="no" dir="ltr">Class&lt;? extends Fragment&gt;</code> and optional <code translate="no" dir="ltr">Bundle</code> of arguments. These methods use your <code translate="no" dir="ltr">FragmentFactory</code> to construct an instance of the Fragment to add. Kotlin extension that use reified types (i.e, <code translate="no" dir="ltr">fragmentTransaction.replace&lt;YourFragment&gt;(R.id.container)</code>) have also been added to <code translate="no" dir="ltr">fragment-ktx</code>. (<a href="https://issuetracker.google.com/issues/126124987">b/126124987</a>)</li> <li><code translate="no" dir="ltr">@MainThread</code> annotations have been added to <code translate="no" dir="ltr">Fragment</code> lifecycle callbacks. (<a href="https://issuetracker.google.com/issues/127272564">b/127272564</a>)</li> <li>The breadcrumb title related APIs on <code translate="no" dir="ltr">FragmentTransaction</code> and <code translate="no" dir="ltr">FragmentManager.BackStackEntry</code> have been deprecated. (<a href="https://issuetracker.google.com/issues/138252944">b/138252944</a>)</li> <li>The <code translate="no" dir="ltr">setTransitionStyle</code> method on <code translate="no" dir="ltr">FragmentTransaction</code> has been deprecated. (<a href="https://android-review.googlesource.com/1011537">aosp/1011537</a>)</li> <li>Many of the methods in <code translate="no" dir="ltr">FragmentManager</code> are no longer <code translate="no" dir="ltr">abstract</code>. <code translate="no" dir="ltr">FragmentManager</code> itself remains <code translate="no" dir="ltr">abstract</code> and should not be directly instantiated or extended; you should continue to only get an existing instance from <code translate="no" dir="ltr">getSupportFragmentManager()</code>, <code translate="no" dir="ltr">getChildFragmentManager()</code>, etc.</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>From <a href="#1.1.0-rc04">Fragment <code translate="no" dir="ltr">1.1.0-rc04</code></a>: Fragments now correctly cancel postponed transitions on Fragments have been popped. (<a href="https://issuetracker.google.com/issues/138251858">b/138251858</a>)</li> <li>From <a href="#1.1.0-rc03">Fragment <code translate="no" dir="ltr">1.1.0-rc03</code></a>: Fixed an issue where calling <code translate="no" dir="ltr">postponeEnterTransition()</code> with a timeout more than once would not cancel previous timeouts. (<a href="https://issuetracker.google.com/issues/137797118">b/137797118</a>)</li> <li>From <a href="#1.1.0-rc02">Fragment <code translate="no" dir="ltr">1.1.0-rc02</code></a>: Fixed a crash in <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> when removing the current item. (<a href="https://issuetracker.google.com/issues/137209870">b/137209870</a>)</li> <li>Fragments now wait for animations to finish before dispatching <code translate="no" dir="ltr">onDestroyView()</code>. (<a href="https:///issuetracker.google.com/issues/136110528">b/136110528</a>)</li> <li>Fragment animations from child fragments and their descendants are now properly handled when animating the parent Fragment. (<a href="https:///issuetracker.google.com/issues/116675313">b/116675313</a>)</li> <li>Fixed a <code translate="no" dir="ltr">NullPointerException</code> when using shared element transitions and combining a pop and add operation. (<a href="https://issuetracker.google.com/issues/120507394">b/120507394</a>)</li> <li>Added a workaround to <code translate="no" dir="ltr">IllegalStateException</code>s when using <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> in Robolectric tests. (<a href="https://issuetracker.google.com/issues/137201343">b/137201343</a>)</li> </ul> <h3 id="1.2.0-alpha01" data-text="Version 1.2.0-alpha01" tabindex="-1">Version 1.2.0-alpha01</h3> <p>July 2, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.2.0-alpha01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.2.0-alpha01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.2.0-alpha01</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/0491995874ce17bcaf19ad9864f5ec6a0ae1b46d..588801999e8e8ea9ec080a796f72fefa17f3cd3b/fragment">here</a>.</p> <p><strong>New features</strong></p> <ul> <li>FragmentManager now calls <code translate="no" dir="ltr">requestApplyInsets()</code> after attaching the Fragment’s view and directly before calling <code translate="no" dir="ltr">onViewCreated()</code>, ensuring that your view always has the correct insets. (<a href="https://issuetracker.google.com/issues/135945162">b/135945162</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed a <code translate="no" dir="ltr">NullPointerException</code> when popping a <code translate="no" dir="ltr">FragmentTransaction</code> that used <code translate="no" dir="ltr">setPrimaryNavigationFragment()</code> before <code translate="no" dir="ltr">replace()</code>. (<a href="https://issuetracker.google.com/issues/134673465">b/134673465</a>)</li> </ul> <h2 id="version_110_3" data-text="Version 1.1.0" tabindex="-1">Version 1.1.0</h2> <h3 id="1.1.0" data-text="Version 1.1.0" tabindex="-1">Version 1.1.0</h3> <p>September 5, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/f8b89aff336c926d3e9a661f497fa07db93e4283..0a0b85c233fab9c76d9bb2cd9e9b59bc0ffbe6c5/fragment">here</a>.</p> <p><strong>Important Changes since 1.0.0</strong></p> <ul> <li><strong>fragment-testing</strong>: The <code translate="no" dir="ltr">fragment-testing</code> artifact provides a <code translate="no" dir="ltr">FragmentScenario</code> class for testing a fragment in isolation. See <a href="/training/basics/fragments/testing">Test your app’s fragments documentation</a> for more details.</li> <li><strong>FragmentFactory</strong>: You can now set a <code translate="no" dir="ltr">FragmentFactory</code> on a <code translate="no" dir="ltr">FragmentManager</code> to manage the creation of fragment instances, removing the strict requirement to have a no-argument constructor.</li> <li><strong>Kotlin Property Delegates for ViewModels</strong>: The <code translate="no" dir="ltr">fragment-ktx</code> artifact now contains two Kotlin property delegates: <code translate="no" dir="ltr">by viewModels()</code> for accessing ViewModels associated with the individual fragment and <code translate="no" dir="ltr">by activityViewModels()</code> for accessing ViewModels scoped to the activity.</li> <li><strong>Max Lifecycle</strong>: You can now set a max Lifecycle state for a Fragment by calling <code translate="no" dir="ltr">setMaxLifecycle()</code> on a <code translate="no" dir="ltr">FragmentTransaction</code>. This replaces the now deprecated <code translate="no" dir="ltr">setUserVisibleHint()</code>. <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> have a new constructor that allows you to switch to the new behavior.</li> <li><strong>FragmentActivity LayoutId constructor</strong>: Subclasses of <code translate="no" dir="ltr">FragmentActivity</code> can now optionally call into a constructor on <code translate="no" dir="ltr">FragmentActivity</code> that takes an <code translate="no" dir="ltr">R.layout</code> ID, indicating the layout that should be set as the content view as an alternative to calling <code translate="no" dir="ltr">setContentView()</code> in <code translate="no" dir="ltr">onCreate()</code>. This does not change the requirement that your subclass have a no-argument constructor.</li> <li><strong>Fragment LayoutId constructor</strong>: Subclasses of <code translate="no" dir="ltr">Fragment</code> can now optionally call into a constructor on <code translate="no" dir="ltr">Fragment</code> that takes an <code translate="no" dir="ltr">R.layout</code> ID, indicating the layout that should be used for this fragment as an alternative to overriding <code translate="no" dir="ltr">onCreateView()</code>. The inflated layout can be configured in <code translate="no" dir="ltr">onViewCreated()</code>.</li> <li><strong>Postpone with a timeout</strong>: A new overload of <code translate="no" dir="ltr">postponeEnterTransition()</code> has been added that takes a timeout.</li> </ul> <h3 id="1.1.0-rc04" data-text="Version 1.1.0-rc04" tabindex="-1">Version 1.1.0-rc04</h3> <p>August 7, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-rc04</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-rc04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-rc04</code> is released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/fb2e8b50c7c18c54f770ad7544287ef9a260ec01..f8b89aff336c926d3e9a661f497fa07db93e4283/fragment">here</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fragments now correctly cancel postponed transitions on Fragments have been popped. (<a href="https://issuetracker.google.com/issues/138251858">b/138251858</a>)</li> </ul> <h3 id="1.1.0-rc03" data-text="Version 1.1.0-rc03" tabindex="-1">Version 1.1.0-rc03</h3> <p>July 19, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-rc03</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-rc03</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-rc03</code> is released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/16e3ea9c8519ff086ea5f0bbc4d6fa84743e87f1..fb2e8b50c7c18c54f770ad7544287ef9a260ec01/fragment">here</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed an issue where calling <code translate="no" dir="ltr">postponeEnterTransition()</code> with a timeout more than once would not cancel previous timeouts. (<a href="https://issuetracker.google.com/issues/137797118">b/137797118</a>)</li> </ul> <h3 id="1.1.0-rc02" data-text="Version 1.1.0-rc02" tabindex="-1">Version 1.1.0-rc02</h3> <p>July 17, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-rc02</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-rc02</code>, and <code translate="no" dir="ltr">androidx.fragment-testing:fragment:1.1.0-rc02</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/31e072b23ddd65615efc5f3fbece2276b6b5cae4..16e3ea9c8519ff086ea5f0bbc4d6fa84743e87f1/fragment">here</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed a crash in <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> when removing the current item. (<a href="https://issuetracker.google.com/issues/137209870">b/137209870</a>)</li> </ul> <h3 id="1.1.0-rc01" data-text="Version 1.1.0-rc01" tabindex="-1">Version 1.1.0-rc01</h3> <p>July 2, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-rc01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-rc01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-rc01</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/0491995874ce17bcaf19ad9864f5ec6a0ae1b46d..31e072b23ddd65615efc5f3fbece2276b6b5cae4/fragment">here</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li>Fragments now properly update their visibility when using <code translate="no" dir="ltr">show()</code> or <code translate="no" dir="ltr">hide()</code> operations while the transition is running. (<a href="https://issuetracker.google.com/issues/133385058">b/133385058</a>)</li> <li>Fixed a <code translate="no" dir="ltr">NullPointerException</code> when popping a <code translate="no" dir="ltr">FragmentTransaction</code> that used <code translate="no" dir="ltr">setPrimaryNavigationFragment()</code> before <code translate="no" dir="ltr">replace()</code>. (<a href="https://issuetracker.google.com/issues/134673465">b/134673465</a>)</li> </ul> <h3 id="1.1.0-beta01" data-text="Version 1.1.0-beta01" tabindex="-1">Version 1.1.0-beta01</h3> <p>June 5, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-beta01</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-beta01</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-beta01</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/ff4d74c16caf828426d4e6dd8e2d22db9f1be303..b74c465a858f50f5733ec376b2817d240e619b16/fragment">here</a>.</p> <p><strong>Bug fixes</strong></p> <ul> <li><code translate="no" dir="ltr">androidx.lifecycle.Lifecycle</code> callbacks (specifically related to <code translate="no" dir="ltr">STARTED</code>, <code translate="no" dir="ltr">RESUMED</code>, <code translate="no" dir="ltr">PAUSED</code>, <code translate="no" dir="ltr">STOPPED</code>, and <code translate="no" dir="ltr">DESTROYED</code>) for nested Fragments are now properly nested. (<a href="https://issuetracker.google.com/issues/133497591">b/133497591</a>)</li> <li><code translate="no" dir="ltr">OnBackPressedCallback</code> instances registered in a Fragment’s <code translate="no" dir="ltr">onCreate()</code> now properly take precedence over the child FragmentManager. (<a href="https://issuetracker.google.com/issues/133175997">b/133175997</a>)</li> <li>Child fragments are no longer animated when their parent fragment is being replaced. (<a href="https://issuetracker.google.com/issues/121017790">b/121017790</a>)</li> <li>Fragments animations and transitions are now ignored when using <code translate="no" dir="ltr">animateLayoutChanges=&quot;true&quot;</code>, fixing an issue where Fragments were not properly destroyed. (<a href="https://issuetracker.google.com/issues/116257087">b/116257087</a>)</li> </ul> <h3 id="1.1.0-alpha09" data-text="Version 1.1.0-alpha09" tabindex="-1">Version 1.1.0-alpha09</h3> <p>May 16, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-alpha09</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-alpha09</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-alpha09</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/948d2294e7ae482dffa9641ec0fb0cbb3412481a..ff4d74c16caf828426d4e6dd8e2d22db9f1be303/fragment">here</a>.</p> <p><strong>API changes</strong></p> <ul> <li>Fragments now receive a callback to a new <code translate="no" dir="ltr">onPrimaryNavigationFragmentChanged(boolean)</code> method when the primary navigation fragment changes. <a href="https://android-review.googlesource.com/960857">aosp/960857</a></li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Menu Items inflated by a child Fragment are now correctly removed when the Parent Fragment is removed. <a href="https://issuetracker.google.com/issues/131581013">b/131581013</a></li> </ul> <h3 id="1.1.0-alpha08" data-text="Version 1.1.0-alpha08" tabindex="-1">Version 1.1.0-alpha08</h3> <p>May 7, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-alpha08</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-alpha08</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-alpha08</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/0fe6b4168055f8da37c439dc82fbc535a9e1987a..948d2294e7ae482dffa9641ec0fb0cbb3412481a/fragment">here</a>.</p> <p>This release is incompatible with Preferences 1.1.0-alpha01 through 1.1.0-alpha04. Please upgrade to Preferences 1.1.0-alpha05 when using this version of Fragments.</p> <p><strong>New features</strong></p> <ul> <li>Added a new overload of <code translate="no" dir="ltr">postponeEnterTransition()</code> that takes a timeout, after which the Fragment will automatically call <code translate="no" dir="ltr">startPostponedEnterTransition()</code> <a href="https://issuetracker.google.com/issues/120803208">b/120803208</a></li> </ul> <p><strong>API changes</strong></p> <ul> <li>Breaking change: the previously deprecated <code translate="no" dir="ltr">FragmentFactory</code> <code translate="no" dir="ltr">instantiate</code> method that took a <code translate="no" dir="ltr">Bundle</code> has been removed. <a href="https://android-review.googlesource.com/953856">aosp/953856</a></li> <li>Breaking change: The <code translate="no" dir="ltr">RESUME_ONLY_CURRENT_FRAGMENT</code> and <code translate="no" dir="ltr">USE_SET_USER_VISIBLE_HINT</code> constants in <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> have been renamed to <code translate="no" dir="ltr">BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT</code> and <code translate="no" dir="ltr">BEHAVIOR_SET_USER_VISIBLE_HINT</code>, respectively. <a href="https://android-review.googlesource.com/954782">aosp/954782</a></li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fragments that have had their lifecycle capped via <code translate="no" dir="ltr">setMaxLifecycle()</code> no longer get resumed before reaching their final state. <a href="https://issuetracker.google.com/issues/131557151">b/131557151</a></li> <li>When using <code translate="no" dir="ltr">setMaxLifecycle(Lifecycle.State.CREATED)</code>, Fragments will properly have their view destroyed. <a href="https://android-review.googlesource.com/954180">aosp/954180</a></li> </ul> <h3 id="1.1.0-alpha07" data-text="Version 1.1.0-alpha07" tabindex="-1">Version 1.1.0-alpha07</h3> <p>April 25, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-alpha07</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-alpha07</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-alpha07</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/ea6ef7b3e86be09ad7380887c0ddada0064cdee5..1d1a928881b4a7a75a85ab5b723cc81c829f1c83/fragment">here</a>.</p> <p><strong>New features</strong></p> <ul> <li>You can now set a max Lifecycle state for a Fragment by calling <code translate="no" dir="ltr">setMaxLifecycle()</code> on a <code translate="no" dir="ltr">FragmentTransaction</code>. This replaces the now deprecated <code translate="no" dir="ltr">setUserVisibleHint()</code>. <code translate="no" dir="ltr">FragmentPagerAdapter</code> and <code translate="no" dir="ltr">FragmentStatePagerAdapter</code> have a new constructor that allows you to switch to the new behavior. (<a href="https://issuetracker.google.com/issues/129780800">b/129780800</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">moveToState(STARTED)</code> on <code translate="no" dir="ltr">FragmentScenario</code> can now only be called on API 24+ devices. (<a href="https://issuetracker.google.com/issues/129880016">b/129880016</a>)</li> </ul> <p><strong>Behavior Changes</strong></p> <ul> <li>As a consequence of (<a href="https://issuetracker.google.com/issues/129907905">b/129907905</a>), fragments on the back stack will <strong>not</strong> get a callback to <code translate="no" dir="ltr">onCreateView()</code> when the hosting activity is recreated. <code translate="no" dir="ltr">onCreateView()</code> will now only be called when the fragment becomes visible (i.e., the back stack is popped).</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed an issue when using a <code translate="no" dir="ltr">&lt;fragment&gt;</code> tag in XML and the <code translate="no" dir="ltr">contentLayoutId</code> constructor of <code translate="no" dir="ltr">FragmentActivity</code> or <code translate="no" dir="ltr">AppCompatActivity</code>. (<a href="https://issuetracker.google.com/issues/129907905">b/129907905</a>)</li> <li>Corrected an issue where fragments on the back stack would not be moved to at least <code translate="no" dir="ltr">CREATED</code> after a configuration change, causing ViewModels and child retained fragments to not be properly disposed. (<a href="https://issuetracker.google.com/issues/129593351">b/129593351</a>)</li> <li>Fixed a crash in <code translate="no" dir="ltr">restoreSaveState</code> caused by a desync of the retained fragments after the instance state is saved. (<a href="https://issuetracker.google.com/issues/130433793">b/130433793</a>) (<a href="https://android-review.googlesource.com/947824">aosp/947824</a>)</li> <li>Fixed issues where an <code translate="no" dir="ltr">OnBackPressedCallback</code> added with a fragment lifecycle would not be called if the <code translate="no" dir="ltr">FragmentManager</code> had a back stack. See <a href="/jetpack/androidx/releases/activity#1.0.0-alpha07">androidx.activity 1.0.0-alpha07</a> for more details. (<a href="https://android-review.googlesource.com/948209">aosp/948209</a>)</li> <li>Fragments no longer enforce <code translate="no" dir="ltr">LAYER_TYPE_HARDWARE</code> for animations. If you specifically need a hardware layer animation, please set it as part of your animation. (<a href="https://issuetracker.google.com/issues/129486478">b/129486478</a>)</li> </ul> <h3 id="1.1.0-alpha06" data-text="Version 1.1.0-alpha06" tabindex="-1">Version 1.1.0-alpha06</h3> <p>April 3, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-alpha06</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-alpha06</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-alpha06</code> are released. The commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/4c34c957abe3a1cec4eb2342bb41a88c838999f7..ea6ef7b3e86be09ad7380887c0ddada0064cdee5/fragment">here</a>.</p> <p><strong>New features</strong></p> <ul> <li>Exceptions thrown by FragmentManager now include the Fragment’s name in the message. (<a href="https://issuetracker.google.com/issues/67759402">b/67759402</a>)</li> </ul> <p><strong>API Changes</strong></p> <ul> <li><code translate="no" dir="ltr">Fragment</code> and <code translate="no" dir="ltr">FragmentActivity</code> now contain a second constructor that takes a <code translate="no" dir="ltr">@LayoutRes int</code>, which replaces the previous behavior of annotating your class with <code translate="no" dir="ltr">@ContentView</code>. This approach works in both app and library modules. (<a href="https://issuetracker.google.com/issues/128352521">b/128352521</a>)</li> <li>FragmentActivity’s <code translate="no" dir="ltr">onActivityResult()</code> is now properly marked as <code translate="no" dir="ltr">@CallSuper</code>. (<a href="https://issuetracker.google.com/issues/127971684">b/127971684</a>)</li> <li>The FragmentFactory’s <code translate="no" dir="ltr">instantiate</code> method that takes an argument Bundle has been deprecated and apps should use the new <code translate="no" dir="ltr">instantiate</code> overload that does not take a Bundle. (<a href="https://issuetracker.google.com/issues/128836103">b/128836103</a>)</li> <li><code translate="no" dir="ltr">FragmentScenario</code> methods are now properly annotated with <code translate="no" dir="ltr">@StyleRes</code>. (<a href="https://android-review.googlesource.com/924193">aosp/924193</a>)</li> <li><code translate="no" dir="ltr">FragmentTabHost</code> has been deprecated. (<a href="https://issuetracker.google.com/issues/127971835">b/127971835</a>)</li> <li>FragmentActivity’s <code translate="no" dir="ltr">getThemedContext()</code> has been removed. (<a href="https://android-review.googlesource.com/934078">aosp/934078</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed a regression in 1.1.0-alpha05 that caused the incoming Fragment to flash on the screen. (<a href="https://issuetracker.google.com/issues/129405432">b/129405432</a>)</li> <li>Fixed an issue where the primary navigation fragment would be lost after a popBackStack+replace+popBackStack series of operations. (<a href="https://issuetracker.google.com/issues/124332597">b/124332597</a>)</li> <li>Fixed an issue when using <code translate="no" dir="ltr">@ContentView</code> constructors on your Activity when restoring Fragment state. (<a href="https://issuetracker.google.com/issues/127313094">b/127313094</a>)</li> <li>Corrected the logic of <code translate="no" dir="ltr">setTargetFragment()</code> when replacing an existing target Fragment with a Fragment not yet attached to the FragmentManager. (<a href="https://android-review.googlesource.com/932156/">aosp/932156</a>)</li> </ul> <h3 id="1.1.0-alpha05" data-text="Version 1.1.0-alpha05" tabindex="-1">Version 1.1.0-alpha05</h3> <p>March 13, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment:1.1.0-alpha05</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx:1.1.0-alpha05</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing:1.1.0-alpha05</code> are released. The full list of commits included in this version can be found <a href="https://android.googlesource.com/platform/frameworks/support/+log/e3951615d7fc9e64177ce46599a36fe1c26ac918..4c34c957abe3a1cec4eb2342bb41a88c838999f7/fragment">here</a>.</p> <p><strong>New features</strong></p> <ul> <li><code translate="no" dir="ltr">@ContentView</code> annotation lookups are now cached (<a href="https://issuetracker.google.com/issues/123709449">b/123709449</a>)</li> </ul> <p><strong>Behavior changes</strong></p> <ul> <li>Calling <code translate="no" dir="ltr">remove()</code>, <code translate="no" dir="ltr">hide()</code>, <code translate="no" dir="ltr">show()</code>, <code translate="no" dir="ltr">detach()</code>, and <code translate="no" dir="ltr">setPrimaryNavigationFragment()</code> with a Fragment attached to a different FragmentManager now throws an <code translate="no" dir="ltr">IllegalStateException</code> rather than silently failing (<a href="https://android-review.googlesource.com/904301">aosp/904301</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li><code translate="no" dir="ltr">onNewIntent</code> for <code translate="no" dir="ltr">FragmentActivity</code> is now correctly marked with <code translate="no" dir="ltr">@CallSuper</code> (<a href="https://issuetracker.google.com/issues/124120586">b/124120586</a>)</li> <li>Fixed an issue where <code translate="no" dir="ltr">DialogFragment</code>’s <code translate="no" dir="ltr">onDismiss()</code> could be called twice when using <code translate="no" dir="ltr">getDialog().dismiss()</code> or <code translate="no" dir="ltr">getDialog().cancel()</code> (<a href="https://issuetracker.google.com/issues/126563750">b/126563750</a>)</li> </ul> <h3 id="1.1.0-alpha04" data-text="Version 1.1.0-alpha04" tabindex="-1">Version 1.1.0-alpha04</h3> <p>February 7, 2019</p> <p><code translate="no" dir="ltr">androidx.fragment:fragment 1.1.0-alpha04</code>, <code translate="no" dir="ltr">androidx.fragment:fragment-ktx 1.1.0-alpha04</code>, and <code translate="no" dir="ltr">androidx.fragment:fragment-testing 1.1.0-alpha04</code> are released.</p> <p><strong>New features</strong></p> <ul> <li>Added support for the <code translate="no" dir="ltr">@ContentView</code> class annotation that allows you to indicate which layout XML file should be inflated as an alternative to overriding <code translate="no" dir="ltr">onCreateView()</code>. It is recommended to do view related work in <code translate="no" dir="ltr">onViewCreated()</code>. (<a href="https://android-review.googlesource.com/837619">aosp/837619</a>)</li> <li><code translate="no" dir="ltr">fragment-testing</code> now depends on <code translate="no" dir="ltr">androidx.test:core-ktx</code> 1.1.0 stable (<a href="https://issuetracker.google.com/issues/121209673">b/121209673</a>)</li> <li>You can now use <code translate="no" dir="ltr">openActionBarOverflowOrOptionsMenu</code> with <code translate="no" dir="ltr">FragmentScenario</code> to test Fragment hosted options menus (<a href="https://issuetracker.google.com/issues/121126668">b/121126668</a>)</li> </ul> <p><strong>API changes</strong></p> <ul> <li>Added a <code translate="no" dir="ltr">requireArguments()</code> method which returns a <code translate="no" dir="ltr">@NonNull Bundle</code> or throws an <code translate="no" dir="ltr">IllegalStateException</code> (<a href="https://issuetracker.google.com/issues/121196360">b/121196360</a>)</li> <li>Added a note that <code translate="no" dir="ltr">getLifecycle()</code>, <code translate="no" dir="ltr">getViewLifecycleOwner()</code>, and <code translate="no" dir="ltr">getViewLifecycleOwnerLiveData()</code> should not be overridden and will be made final in a future release. Please <a href="https://issuetracker.google.com/issues/new?component=460964">file a feature request</a> if you are currently overriding this method. (<a href="https://android-review.googlesource.com/880714">aosp/880714</a>)</li> <li>Added a note that <code translate="no" dir="ltr">getViewModelStore()</code> should not be overridden and will be made final in a future release. Please <a href="https://issuetracker.google.com/issues/new?component=460964">file a feature request</a> if you are currently overriding this method. (<a href="https://android-review.googlesource.com/880713">aosp/880713</a>)</li> <li>Fixed an issue with binary compatibility with previous releases of Fragments. (<a href="https://android-review.googlesource.com/887877">aosp/887877</a>) (<a href="https://android-review.googlesource.com/889834">aosp/889834</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Target fragments are correctly cleared out when you pass <code translate="no" dir="ltr">null</code> to <code translate="no" dir="ltr">setTargetFragment()</code>. (<a href="https://android-review.googlesource.com/849969">aosp/849969</a>)</li> <li>Fixed an issue where target Fragments were sometimes unavailable in or after <code translate="no" dir="ltr">onDestroy()</code>. (<a href="https://issuetracker.google.com/issues/122312935">b/122312935</a>)</li> <li>DialogFragment’s onDismiss() is now called before <code translate="no" dir="ltr">onDestroy()</code>. (<a href="https://android-review.googlesource.com/874133">aosp/874133</a>) (<a href="https://android-review.googlesource.com/890734">aosp/890734</a>)</li> </ul> <h3 id="1.1.0-alpha03" data-text="Version 1.1.0-alpha03" tabindex="-1">Version 1.1.0-alpha03</h3> <p>December 17, 2018</p> <p><strong>New features</strong></p> <ul> <li>Fragment now implements <code translate="no" dir="ltr">BundleSavedStateRegistryOwner</code> and depends on the newly released SavedState library [<a href="https://android-review.googlesource.com/824380">aosp/824380</a>]</li> <li>A <code translate="no" dir="ltr">by activityViewModels</code> Kotlin property delegate has been added to retrieve ViewModels associated with the containing Activity [<a href="https://issuetracker.google.com/issues/119050253">b/119050253</a>]</li> <li>The <code translate="no" dir="ltr">by viewModels</code> Kotlin property delegate has been expanded to take an optional lambda method for getting the <code translate="no" dir="ltr">ViewModelStoreOwner</code>, allowing you to pass in the parent Fragment or other custom <code translate="no" dir="ltr">ViewModelStoreOwner</code> with code such as <code translate="no" dir="ltr">val viewModel: MyViewModel by viewModels(::requireParentFragment)</code> [<a href="https://issuetracker.google.com/issues/119050253">b/119050253</a>]</li> </ul> <p><strong>API changes</strong></p> <ul> <li><code translate="no" dir="ltr">FragmentScenario</code> now allows you to specify a theme such as <code translate="no" dir="ltr">Theme.AppCompat</code> [<a href="https://issuetracker.google.com/issues/119054431">b/119054431</a>]. This is a breaking change.</li> <li>Added a <code translate="no" dir="ltr">requireView()</code> method which returns a <code translate="no" dir="ltr">@NonNull View</code> or throws an <code translate="no" dir="ltr">IllegalStateException</code> [<a href="https://issuetracker.google.com/issues/120241368">b/120241368</a>]</li> <li>Added a <code translate="no" dir="ltr">requireParentFragment()</code> method which returns a <code translate="no" dir="ltr">@NonNull Fragment</code> or throws an <code translate="no" dir="ltr">IllegalStateException</code> [<a href="https://issuetracker.google.com/issues/112103783">b/112103783</a>]</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed IllegalStateException: Failure saving state <a href="https://issuetracker.google.com/issues/120814739">b/120814739</a></li> <li>Fragments being restored from saved instance state will now always receive a non-null <code translate="no" dir="ltr">Bundle</code> [<a href="https://issuetracker.google.com/issues/119794496">b/119794496</a>]</li> <li>Removed Fragments no longer reuse their <code translate="no" dir="ltr">Lifecycle</code> object if re-added [<a href="https://issuetracker.google.com/issues/118880674">b/118880674</a>]</li> </ul> <h3 id="1.1.0-alpha02" data-text="Version 1.1.0-alpha02" tabindex="-1">Version 1.1.0-alpha02</h3> <p>December 3, 2018</p> <p><strong>New features</strong></p> <ul> <li>FragmentScenario’s Kotlin extensions now let you use a lambda for Fragment construction as an alternative to passing in a <code translate="no" dir="ltr">FragmentFactory</code> instance. (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/812913">aosp/812913</a>)</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fixed an IllegalStateException when using nested Fragments on the back stack (<a href="https://issuetracker.google.com/issues/119256498">b/119256498</a>)</li> <li>Fixed crash when using <code translate="no" dir="ltr">FragmentScenario.recreate()</code> with a <code translate="no" dir="ltr">FragmentFactory</code> (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/820540">aosp/820540</a>)</li> <li>Fixed an issue where target Fragments were not accessible after the Fragment was removed (<a href="https://android-review.googlesource.com/c/platform/frameworks/support/+/807634/">aosp/807634</a>)</li> </ul> <h3 id="1.1.0-alpha01" data-text="Version 1.1.0-alpha01" tabindex="-1">Version 1.1.0-alpha01</h3> <p>November 5, 2018</p> <p>This is the first release of the <code translate="no" dir="ltr">fragment-testing</code> artifact and <code translate="no" dir="ltr">FragmentScenario</code> which is built on top of the androidx.test:core APIs. See the <a href="/training/basics/fragments/testing">Fragment testing documentation</a> for more details.</p> <p><strong>New features</strong></p> <ul> <li>New FragmentScenario class for testing Fragments in isolation.</li> <li>You can now set a <code translate="no" dir="ltr">FragmentFactory</code> on any <code translate="no" dir="ltr">FragmentManager</code> to control how new Fragment instances are instantiated.</li> <li>Added a new <code translate="no" dir="ltr">by viewModels()</code> Kotlin property delegate for retrieving ViewModels from a Fragment.</li> <li>Pending input events (such as clicks) are now canceled in a Fragment’s <code translate="no" dir="ltr">onStop()</code>.</li> </ul> <p><strong>API changes</strong></p> <ul> <li>Significantly expanded the nullability annotations across the Fragment API surface.</li> </ul> <p><strong>Bug fixes</strong></p> <ul> <li>Fix an issue which caused Fragment operations to fail from within LiveData <a href="https://issuetracker.google.com/issues/77944637">(b/77944637)</a></li> </ul> <p><strong>Known issues</strong></p> <ul> <li>Target Fragments cannot be accessed after a Fragment has been removed from the FragmentManager.</li> <li><code translate="no" dir="ltr">fragment-testing</code> depends on <code translate="no" dir="ltr">androidx.test:core:1.0.0-beta01</code> instead of the correct <code translate="no" dir="ltr">androidx.test:core:1.0.0</code>.</li> </ul> <devsite-hats-survey class="nocontent" hats-id="VxqvKSur40kxBYCLVTd0SSGykbno" listnr-id="5207477"></devsite-hats-survey> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Content and code samples on this page are subject to the licenses described in the <a href="/license">Content License</a>. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.</p> <p>Last updated 2025-02-12 UTC.</p> </devsite-content-footer> <devsite-notification link="https://google.qualtrics.com/jfe/form/SV_cRR9tonbkUQYb5Q?link=dac" link-text="Take survey" message="Please help us improve the Android Developer experience by taking a short survey." > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-12 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> <nav class="devsite-footer-promos nocontent" aria-label="Promotions"> <ul class="devsite-footer-promos-list"> <li class="devsite-footer-promo"> <a href="//x.com/AndroidDev" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer X Promo" > <picture> <source class="devsite-dark-theme" srcset="https://developer.android.com/_static/android/images/logo-x_dt.svg" media="(prefers-color-scheme: dark)" loading="lazy" alt="X"> <img class="devsite-footer-promo-icon" src="/_static/android/images/logo-x.svg" loading="lazy" alt="X"> </picture> <span class="devsite-footer-promo-label"> X </span> </a> <div class="devsite-footer-promo-description">Follow @AndroidDev on X</div> </li> <li class="devsite-footer-promo"> <a href="//www.youtube.com/user/androiddevelopers" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer YouTube Promo" > <picture> <source class="devsite-dark-theme" srcset="https://developer.android.com/_static/android/images/logo-youtube_dt.svg" media="(prefers-color-scheme: dark)" loading="lazy" alt="YouTube"> <img class="devsite-footer-promo-icon" src="//www.gstatic.com/images/icons/material/product/2x/youtube_48dp.png" loading="lazy" alt="YouTube"> </picture> <span class="devsite-footer-promo-label"> YouTube </span> </a> <div class="devsite-footer-promo-description">Check out Android Developers on YouTube</div> </li> <li class="devsite-footer-promo"> <a href="//www.linkedin.com/showcase/androiddev" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer LinkedIn Promo" > <picture> <source class="devsite-dark-theme" srcset="https://developer.android.com/_static/android/images/logo-linkedin_dt.svg" media="(prefers-color-scheme: dark)" loading="lazy" alt="LinkedIn"> <img class="devsite-footer-promo-icon" src="/_static/android/images/logo-linkedin.svg" loading="lazy" alt="LinkedIn"> </picture> <span class="devsite-footer-promo-label"> LinkedIn </span> </a> <div class="devsite-footer-promo-description">Connect with the Android Developers community on LinkedIn</div> </li> </ul> </nav> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">More Android</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//www.android.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Android </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.android.com/enterprise/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Android for Enterprise </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.android.com/security-center/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Security </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//source.android.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Source </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/news" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > News </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//android-developers.googleblog.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/podcasts" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > Podcasts </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Discover</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/games" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Gaming </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/ml" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Machine Learning </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/health-and-fitness" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Health & Fitness </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/media" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Camera & Media </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/privacy" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Privacy </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/training/connectivity/5g" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > 5G </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Android Devices</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/large-screens" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Large screens </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/wear" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Wear OS </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/chrome-os" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > ChromeOS devices </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/cars" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Android for cars </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/tv" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Android TV </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Releases</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/15" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Android 15 </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/14" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Android 14 </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/13" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Android 13 </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/12" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Android 12 </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/11" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Android 11 </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/10" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Android 10 </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/about/versions/pie" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > Pie </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Documentation and Downloads</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/studio/intro" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Android Studio guide </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/guide" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Developers guides </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/reference" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > API reference </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/studio" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Download Studio </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/ndk" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Android NDK </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//issuetracker.google.com/issues/new?component=190923&amp;template=841312" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Report platform bug </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//issuetracker.google.com/issues/new?component=192697" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Report documentation bug </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//support.google.com/googleplay/android-developer" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Google Play support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://g.co/userresearch/androiddeveloperfooter" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Join research studies </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup-google-for-developers-dark-theme.svg" media="(prefers-color-scheme: none)" class="devsite-dark-theme" loading="lazy" alt="Google Developers"> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//developers.google.com/products/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/license" data-category="Site-Wide Custom Events" data-label="Footer License link" > License </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/distribute/marketing-tools/brand-guidelines" data-category="Site-Wide Custom Events" data-label="Footer Brand guidelines link" > Brand guidelines </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Get news and tips by email</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/updates" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [{&#34;id&#34;: &#34;G-QFRN08RN6E&#34;, &#34;purpose&#34;: 0}], &#34;ga4p&#34;: [{&#34;id&#34;: &#34;G-QFRN08RN6E&#34;, &#34;purpose&#34;: 0}], &#34;gtm&#34;: [{&#34;id&#34;: &#34;GTM-KMSWPCJ&#34;, &#34;purpose&#34;: 0}], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;Jetpack&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;android&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <android-fully-clickable target=" .android-case-study .devsite-landing-row-item, .android-grouped-resources .devsite-landing-row-item, .android-grouped-resources-contained--primary .devsite-landing-row-item, .android-grouped-resources-contained--secondary .devsite-landing-row-item, .android-grouped-resources-contained--tertiary .devsite-landing-row-item, .android-grouped-resources-uncontained--primary .devsite-landing-row-item, .android-grouped-resources-uncontained--secondary .devsite-landing-row-item, .android-grouped-resources-uncontained--tertiary .devsite-landing-row-item, .android-guide-cards .devsite-landing-row-item, .android-illustrated-resources-index .devsite-landing-row-item, .android-illustrated-resources-primary .devsite-landing-row-item, .android-illustrated-resources-secondary .devsite-landing-row-item, .android-illustrated-resources-secondary-small .devsite-landing-row-item, .android-illustrated-resources-tertiary .devsite-landing-row-item, .android-illustrated-resources-tertiary-small .devsite-landing-row-item, .android-promo .devsite-landing-row-item, .android-quick-link, .android-samples .devsite-card-wrapper, .fully-clickable" watch=".android-samples, devsite-content"></android-fully-clickable> <script nonce="eGXRNHDVu9kSTypSG+ueGGeLaGA7D9"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/js/app_loader.js', '[3,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android","https://android-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/android/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/favicon.svg","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/android/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500,600,700|Google+Sans+Text:400,400italic,500,500italic,600,600italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developer.android.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Profiles__enable_stripe_subscription_management","CloudShell__cloud_code_overflow_menu","MiscFeatureFlags__emergency_css","MiscFeatureFlags__enable_project_variables","Search__enable_page_map","Profiles__enable_complete_playlist_endpoint","Analytics__enable_clearcut_logging","Search__enable_ai_search_summaries","Profiles__enable_page_saving","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_dlp_service","CloudShell__cloud_shell_button","Profiles__enable_awarding_url","Profiles__enable_completecodelab_endpoint","Profiles__enable_developer_profiles_callout","MiscFeatureFlags__enable_dark_theme","Profiles__enable_join_program_group_endpoint","TpcFeatures__enable_mirror_tenant_redirects","Concierge__enable_pushui","Profiles__require_profile_eligibility_for_signin","Profiles__enable_dashboard_curated_recommendations","Cloud__enable_cloud_facet_chat","EngEduTelemetry__enable_engedu_telemetry","MiscFeatureFlags__enable_explain_this_code","Cloud__enable_cloud_shell_fte_user_flow","Cloud__enable_free_trial_server_call","Cloud__enable_cloud_shell","Profiles__enable_public_developer_profiles","TpcFeatures__enable_unmirrored_page_left_nav","Cloud__enable_cloudx_ping","MiscFeatureFlags__developers_footer_image","Profiles__enable_recognition_badges","Significatio__enable_by_tenant","Profiles__enable_completequiz_endpoint","MiscFeatureFlags__enable_view_transitions","Cloud__enable_cloudx_experiment_ids","Cloud__enable_legacy_calculator_redirect","Search__enable_dynamic_content_confidential_banner","Profiles__enable_release_notes_notifications","MiscFeatureFlags__enable_variable_operator","Experiments__reqs_query_experiments","Search__enable_suggestions_from_borg","BookNav__enable_tenant_cache_key","Profiles__enable_profile_collections","MiscFeatureFlags__enable_firebase_utm","Cloud__enable_llm_concierge_chat","Search__enable_ai_eligibility_checks","DevPro__enable_developer_subscriptions","MiscFeatureFlags__developers_footer_dark_image"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.googleapis.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[3,"android","Android Developers","developer.android.com",null,"android-dot-devsite-v2-prod.appspot.com",null,null,[null,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations"],null,null,null,[1,null,1],[1,1,null,1,1]],null,[18,null,null,null,null,null,"/images/lockup.svg","/images/touchicon-180.png",null,null,null,null,null,null,null,null,null,null,null,null,null,2,null,null,null,"/images/lockup-dark-theme.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,28,29,37,43],null,[[null,null,1],[1,1]],[[null,null,null,null,null,null,null,[["G-QFRN08RN6E"],null,null,[["G-QFRN08RN6E",1]]],null,null,null,null,1],null,[[2,2],[1,1]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"android.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m",1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10