Navigation

Navigation adalah framework untuk menelusuri 'tujuan' dalam aplikasi Android yang menyediakan API konsisten, baik tujuan tersebut diimplementasikan sebagai Fragmen, Aktivitas, maupun komponen lainnya.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
27 Oktober 2021 2.3.5 - 2.4.0-beta01 -

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Navigation, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Groovy

dependencies {
  def nav_version = "2.3.5"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:"
}

Kotlin

dependencies {
  val nav_version = "2.3.5"

  // Java language implementation
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

  // Feature module Support
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // Jetpack Compose Integration
  implementation("androidx.navigation:navigation-compose:")
}

Safe Args

Untuk menambahkan Safe Args ke project Anda, sertakan classpath berikut dalam file build.gradle level teratas:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.3.5"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.3.5"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

Anda juga harus menerapkan salah satu dari dua plugin yang tersedia.

Untuk menghasilkan kode bahasa Java yang sesuai bagi modul Java atau modul campuran Java dan Kotlin, tambahkan baris berikut ke file build.gradle aplikasi atau modul Anda:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

Atau, untuk menghasilkan kode Kotlin yang sesuai bagi modul khusus Kotlin, tambahkan:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

Anda harus memiliki android.useAndroidX=true dalam file gradle.properties seperti yang dijelaskan dalam Bermigrasi ke AndroidX.

Untuk informasi tentang cara menggunakan ekstensi Kotlin, lihat dokumentasi ktx.

Untuk informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 2.4.0

Versi 2.4.0-beta01

27 Oktober 2021

androidx.navigation:navigation-*:2.4.0-beta01 dirilis. Versi 2.4.0-beta01 berisi commit berikut ini.

Fitur Baru

  • Kini Anda dapat menggunakan by navGraphViewModel dengan rute sebagai alternatif menggunakan ID sehingga akan memberikan dukungan yang lebih baik menggunakan DSL Kotlin Navigasi dengan Fragment. (I901e3, b/201446416)

Perubahan API

  • visibleEntries API kini bersifat eksperimental. (I93f6f)

Perbaikan Bug

  • ViewModels tidak akan dihancurkan lagi saat transisi terganggu dengan menavigasi bolak-balik di antara layar yang sama (Id52d8, b/200817333)
  • Argumen NavDeepLink nullable tidak lagi memerlukan nilai default saat menambahkan deep link ke NavDestination. (I5aad4, b/201320030)
  • NavBackStackEntries sekarang dengan Siklus Proses yang berbeda tidak lagi dianggap sama. Ini berarti NavHost akan merekomposisi semua tujuan dengan benar saat melakukan navigasi dengan singleTop dan ketika memilih ulang item menu bawah. (I1b351, b/196997433)
  • Memperbaiki masalah terkait AbstractListDetailFragment yang menyebabkan atribut layout_width dan layout_weight pada panel daftar yang ditampilkan oleh onCreateListPaneView() menjadi salah ditangani atau diabaikan. (f5fbf3)
  • Status visual tujuan dialog sekarang tetap sinkron dengan status DialogFragmentNavigator. Ini berarti memanggil dismiss() API asinkron untuk DialogFragment secara manual kini menghapus semua tujuan dialog di atas dialog yang kini ditutup. Hal ini tidak memengaruhi kasus ketika Anda menggunakan popUpTo atau popBackStack() untuk menutup dialog. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener sekarang memiliki pesan error yang lebih jelas untuk onDestinationChanged(). (Ie742d)

Versi 2.4.0-alpha10

29 September 2021

androidx.navigation:navigation-*:2.4.0-alpha10 dirilis. Versi 2.4.0-alpha10 berisi commit berikut.

Fitur Baru

  • NavController sekarang menawarkan kemampuan untuk mengambil daftar semua instance NavBackStackEntry yang terlihat melalui visibleEntries StateFlow (Ia964e)
  • rememberNavController() sekarang menggunakan kumpulan Navigator instance opsional yang akan ditambahkan ke NavController yang dikembalikan untuk mendukung Navigator opsional lebih baik seperti dari Accompanist Navigation Material. (I4619e)

Perbaikan Bug

  • Navigasi Dinamis tidak akan lagi mengalami error saat Aktivitas dibuat ulang. (Ifa6a3, b/197942869)
  • Memperbaiki masalah dengan tombol kembali di sistem yang terjadi hanya setelah muncul kembali ke tujuan composable yang berisi NavHost. (3ed148, b/195668143)
  • SafeArgs sekarang membuat argumen untuk fromBundle() dan fromSavedStateHandle() dalam urutan parameter yang benar. (I824a8, b/200059831)

Versi 2.4.0-alpha09

15 September 2021

androidx.navigation:navigation-*:2.4.0-alpha09 dirilis. Versi 2.4.0-alpha09 berisi commit berikut ini.

Fitur Baru

  • Kini Anda dapat menggunakan metode clearBackStack() untuk menghapus status yang sebelumnya disimpan dengan popBackStack() atau popUpToSaveState. (I80a0f)
  • Kini Anda dapat meneruskan daftar argumen dan/atau deep link ke builder grafik navigasi bertingkat dan akan otomatis ditambahkan ke grafik yang dihasilkan. (I8a470, b/182545357)

Perubahan API

  • Fungsi DSL Kotlin navArgument kini menjadi bagian dari navigation-common, bukan navigation-compose. Anda perlu mengupdate impor untuk terus menggunakan fungsi ini. (I1d095)

Perubahan Perilaku

  • Saat membuat argumen, Safe Args kini menetapkan parameter tanpa nilai default lebih dahulu sebelum menetapkan parameter dengan nilai default. (I89709, b/198493585)

Perbaikan Bug

  • Saat menggunakan Navigation Compose, NavGraphs hanya akan menjadi DESTROYED setelah semua turunannya DESTROYED (dihancurkan). (I86552, b/198741720)
  • Argumen NavDeepLink nullable tidak lagi memerlukan nilai default. (Ia14ef, b/198689811)
  • Memanggil setGraph() dengan grafik baru kini juga akan menghapus data sebelumnya yang tersimpan selain perilaku sebelumnya yang memunculkan data sebelumnya. (I97f96)
  • Memperbaiki masalah saat instance OnDestinationChangedListener dan currentBackStackEntryFlow tidak diberi tahu saat menggunakan launchSingleTop. (Iaaebc)

Update Dependensi

Versi 2.4.0-alpha08

1 September 2021

androidx.navigation:navigation-*:2.4.0-alpha08 dirilis. Versi 2.4.0-alpha08 berisi commit berikut ini.

Fitur Baru

  • Sekarang Anda dapat memperluas class NavType untuk membuat NavTypes kustom. Jenis kustom hanya didukung saat membuat grafik navigasi secara terprogram, misalnya melalui Navigation Graph Kotlin DSL. (I78440, b/196871885)

Perubahan Perilaku

  • Saat membuat tindakan, kode Kotlin yang dihasilkan dari Safe Args kini menempatkan argumen tanpa nilai default sebelum argumen dengan nilai default sebagai parameter. (Idb697, b/188855904)
  • Deep link sekarang memverifikasi bahwa semua argumen yang diperlukan (yang tanpa nilai default) ada di Uri. (#204, b/185527157)

Perbaikan Bug

  • Penggunaan getBackStackEntry dan previousBackStackEntry di dalam composable(), bersama dengan remember(), tidak akan lagi menyebabkan pengecualian jika tidak ada tujuan di data sebelumnya. (I75138, b/194313238)
  • Navigation Compose kini merekomposisi dengan benar saat mengubah argumen data sebelumnya dan menggunakan launchSingleTop=true. (Iebd69, b/186392337)
  • Tidak akan ada ArrayIndexOutOfBoundsException lagi saat memanggil setGraph dengan grafik berisi 13 atau 29 tujuan. (I1a9f1, b/195171984)
  • Generator java SafeArgs seharusnya tidak lagi menyebabkan peringatan lint saat menghasilkan class Args. (I1a666, b/185843837)

Kontribusi Eksternal

  • Terima kasih ospixd karena telah memastikan bahwa deep link memverifikasi bahwa semua argumen yang diperlukan (yang tanpa nilai default) ada di Uri. (#204, b/185527157)

Versi 2.4.0-alpha07

18 Agustus 2021

androidx.navigation:navigation-*:2.4.0-alpha07 dirilis. Versi 2.4.0-alpha07 berisi commit berikut ini.

Perbaikan Bug

  • Navigation Compose kini menyimpan status dengan benar setelah konfigurasi berubah dan saat mengubah grafik ketika menggunakan beberapa fitur data sebelumnya. (If5a3d, b/195141957)
  • Memilih kembali tab yang sama saat menggunakan navigasi Compose dengan beberapa data sebelumnya tidak akan lagi menghasilkan layar kosong. (I860dc, b/194925622)
  • NavHost kini mengamati perubahan dalam Lifecycle.State NavBackStackEntry yang berarti penggunaan NavHost dalam fragmen kini akan direkomposisi dengan benar, bukan menghasilkan layar kosong, karena siklus proses berubah. (I4eb85, b/195864489)
  • Memperbaiki masalah saat menutup DialogFragment tidak akan memperbarui status NavController dengan benar setelah membuat ulang aktivitas (yaitu setelah perubahan konfigurasi). (Icd72b)
  • Memperbaiki masalah saat memunculkan tujuan dialog tidak akan memperbarui penanganan tombol kembali sistem NavController, yang berpotensi menyebabkan NavController mengintersep tombol kembali meskipun tidak memiliki data sebelumnya untuk dimunculkan. (If3b34)
  • Safe-Args sekarang otomatis menghasilkan metode toSavedStateHandle untuk argumen yang dapat digunakan untuk menguji kode ViewModel Anda. (If1e2d, b/193353880)

Versi 2.4.0-alpha06

4 Agustus 2021

androidx.navigation:navigation-*:2.4.0-alpha06 dirilis. Versi 2.4.0-alpha06 berisi commit berikut ini.

Perubahan API

  • Metode requireSlidingPaneLayout() dan requireDetailPaneNavHostFragment() di AbstractListDetailFragment masing-masing telah diubah namanya menjadi getSlidingPaneLayout() dan getDetailPaneNavHostFragment(). (I34a08)

Perubahan Perilaku

  • Saat menavigasi dengan animasi (seperti Crossfade), Lifecycle tujuan baru sekarang hanya akan menjangkau RESUMED ketika animasi selesai. (If0543, b/172112072, b/194301889)
  • NavHost Navigation Compose sekarang menyetel grafik sebagai bagian dari komposisi pertama. (Ieb7be)

Perbaikan Bug

  • Memunculkan tujuan terakhir dalam grafik navigasi tidak lagi melemparkan ClassCastException. (If0543, b/172112072, b/194301889)
  • Memperbaiki NullPointerException yang akan terjadi saat menambahkan deep link tanpa Uri dan menavigasi melalui rute atau deep link. (938a0c, b/193805425)
  • Memperbaiki masalah di Navigation Compose saat NavBackStackEntry yang memiliki deep link tidak akan menjangkau status RESUMED. (I192c5)
  • Memperbaiki masalah saat memunculkan tujuan dialog tidak akan memperbarui penanganan tombol kembali sistem NavController, yang berpotensi menyebabkan NavController mengintersep tombol kembali meskipun tidak memiliki data sebelumnya untuk dimunculkan. (aosp/1782668)

Versi 2.4.0-alpha05

21 Juli 2021

androidx.navigation:navigation-*:2.4.0-alpha05 dirilis. Versi 2.4.0-alpha05 berisi commit berikut ini.

Perubahan Perilaku

  • NavHost Navigation Compose sekarang selalu menggunakan Crossfade saat menavigasi tujuan. (I07049, b/172112072)
  • Anda sekarang dapat membuat perubahan pada grafik NavHost. Grafik dengan startDestination dan tujuan yang sama pada grafik akan dianggap setara dan tidak akan menghapus data NavController sebelumnya. (I0b8db, b/175392262)

Perbaikan Bug

  • Memperbaiki NoSuchElementException saat memanggil popBackStack() dari dalam LifecycleObserver yang dilampirkan ke NavBackStackEntry yang disebabkan oleh update reentrant ke status NavController. (I64621)
  • AbstractListDetailFragment kini memungkinkan SlidingPaneLayout untuk dihilangkan sepenuhnya dari APK Anda saat AbstractListDetailFragment tidak digunakan. (I611ad)
  • NavGraph dan NavDestination kini mengganti metode yang setara, sehingga dua objek dengan nilai yang sama akan dianggap setara. (I166eb, b/175392262)

Versi 2.4.0-alpha04

1 Juli 2021

androidx.navigation:navigation-*:2.4.0-alpha04 dirilis. Versi 2.4.0-alpha04 berisi commit berikut ini.

Fitur Baru

  • Artefak navigation-fragment sekarang berisi implementasi bawaan dari tata letak dua panel melalui AbstractListDetailFragment baru. Fragmen ini menggunakan SlidingPaneLayout untuk mengelola panel daftar (yang disediakan oleh subclass Anda) dan panel detail, yang menggunakan NavHostFragment sebagai implementasinya, seperti yang dapat dilihat di contoh implementasi kami. (Iac4be, b/191276636)
  • NavHost dari artefak navigation-compose sekarang mendukung tujuan dialog, selain tujuan composable. Setiap tujuan dialog ini akan ditampilkan dalam Composable Dialog, yang mengambang di atas tujuan composable saat ini. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

Perubahan API

  • Fungsi add di NavigatorState telah diganti namanya menjadi push. Semua panggilan ke add() saat ini harus diubah ke push(). (Ie89fc, b/172112072)
  • Instance Navigator kustom kini dapat menggunakan pushWithTransaction API dan popWithTransition API di NavigatorState untuk mendorong atau memunculkan tujuan secara asinkron. Perhatikan bahwa API ini belum digunakan oleh navigator yang disertakan. (Ic4d7c, b/172112072)

Perubahan Perilaku

  • NavDeepLinkBuilder kini menambahkan PendingIntent.FLAG_IMMUTABLE ke PendingIntent yang ditampilkan oleh createPendingIntent(), memastikan bahwa API ini berfungsi seperti yang diharapkan saat menargetkan Android 12. (If8c52)

Perbaikan Bug

  • Memperbaiki masalah <include-dynamic> saat argumen yang diteruskan ke grafik tidak akan diteruskan dengan benar ke grafik yang disertakan secara dinamis. (I3e115)
  • Memperbaiki NullPointerException saat menavigasi ke tujuan menggunakan argumen string[] dengan nilai default @null. (I1fbe8)
  • Menambahkan aturan ProGuard untuk @Navigator.Name, yang memperbaiki masalah saat menggunakan mode lengkap R8 3.1. (I2add9, b/191654433)
  • SafeArgs tidak akan gagal lagi saat membuat aplikasi dengan versi Kotlin sebelum 1.5.0. (Icd1ff, b/190739257)

Versi 2.4.0-alpha03

16 Juni 2021

androidx.navigation:navigation-*:2.4.0-alpha03 dirilis. Versi 2.4.0-alpha03 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki masalah saat dua panggilan navigate() diperlukan untuk menavigasi ke grafik dinamis yang disertakan. (I7785c, b/188859835)
  • Memperbaiki regresi yang diperkenalkan di Navigation 2.4.0-alpha01 saat setupActionBarWithNavController() tidak akan menghapus ikon Atas dengan benar saat Anda berada di tujuan level atas. (I5d443, b/189868637)
  • Memperbaiki IllegalStateException saat memanggil popBackStack() setelah sebelumnya menampilkan grafik root NavController. (I2a330, b/190265699)
  • Aturan ProGuard untuk by navArgs() kini diterapkan dengan benar saat menggunakan navigation-common atau artefak apa pun yang bergantung padanya. (I68800, b/190082521)
  • OnDestinationChangedListener yang memanggil navigate() saat pertama kali menerima callback kini mendapatkan callback kedua dengan benar untuk tujuan yang dinavigasikan. (Ie5f9e, b/190228815)
  • Safe Arg tidak lagi mengalami error saat digunakan dengan modul fitur dinamis dan AGP 7.0+. (I69518, b/189966576)

Masalah Umum

  • Safe Arg akan gagal dengan error Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ saat menggunakan Gradle 6.7.0 karena dependensi pada Kotlin versi lama. Hal ini dapat diatasi dengan memperbarui untuk menggunakan Gradle 7.0. (b/190739257)

Versi 2.4.0-alpha02

2 Juni 2021

androidx.navigation:navigation-*:2.4.0-alpha02 dirilis. Versi 2.4.0-alpha02 berisi commit berikut.

Fitur Baru

  • Rute sekarang didukung untuk tujuan Activity, Fragment, dan Dialog, serta di seluruh DSL Kotlin DynamicNavigation. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI telah menambahkan API eksperimental untuk sementara guna memungkinkan tidak ikut menyimpan status Anda. Meskipun selalu menyimpan status merupakan perilaku yang benar, masih ada penggunaan library yang tidak digunakan lagi (yaitu fragmen yang dipertahankan) yang tidak dapat didukung saat menyimpan status, sehingga hal ini memberikan peluang bagi aplikasi untuk dikonversi secara perlahan dari API yang tidak didukung. (Idf93c)
  • Navigation kini menyediakan API findDestination() dan getHierarchy() yang dapat digunakan untuk membantu menerapkan NavigationUI kustom. findDestination() adalah fungsi ekstensi pada NavGraph yang akan menemukan tujuan dalam grafik. getHierarchy() adalah fungsi pada NavDestination yang dapat digunakan untuk memverifikasi apakah tujuan tertentu berada dalam hierarki tujuan lain. (I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Metode NavigationUI yang menggunakan BottomNavigationView telah diperbarui agar menggunakan superclass yang diperkenalkan di Material 1.4.0, NavigationBarView. Hal ini memungkinkan metode ini untuk digunakan dengan NavigationRailView. (Ib0b36, b/182938895)

  • Saat meng-inflate elemen <action> melalui XML, atribut animasi dapat menggunakan atribut yang diambil dari tema menggunakan sintaksis app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

Perubahan API

Perbaikan Bug

  • DialogFragmentNavigator sekarang menggunakan NavigatorState.pop() API untuk memberi tahu NavController saat dialog ditutup dengan menekan tombol kembali sistem atau mengklik di luarnya, sehingga memastikan bahwa status NavController selalu sinkron dengan status Navigator. (I2ead9)
  • Navigasi tidak lagi memberikan ConcurrentModificationException saat menggunakan manipulasi daftar OnDestinationChangedListeners dari dengan callback onDestinationChanged. (Ib1707, b/188860458)

  • Safe Args tidak lagi mengalami error saat mencoba membuat properti arah di Kotlin. (Id2416, b/188564435)

  • Metode setId di NavDestination sekarang dianotasi dengan benar menggunakan @IdRes, sehingga hanya menerima ID resource. (I69b80)

  • Parameter int findNode sekarang adalah resId, bukan resid. (I7711d)

Pembaruan Dependensi

  • Safe-Args sekarang bergantung pada Android Gradle Plugin 4.2.0. Ini berarti Anda tidak lagi mendapatkan peringatan penggunaan applicationIdTextResource. (I6d67b, b/172824579)

Versi 2.4.0-alpha01

18 Mei 2021

androidx.navigation:navigation-*:2.4.0-alpha01 dirilis. Versi 2.4.0-alpha01 berisi commit berikut.

Fitur Baru

  • Metode currentBackStackEntryAsFlow() pada NavController menyediakan Flow yang akan muncul setiap kali NavBackStackEntry saat ini berubah. Alur ini dapat digunakan sebagai alternatif untuk mengelola OnDestinationChangedListener secara manual. (I19c4a, #89, b/163947280)

Beberapa data sebelumnya

NavController bertanggung jawab untuk mengelola data sebelumnya dari tujuan, menambahkan tujuan ke data sebelumnya bila Anda navigate(), dan menghapusnya saat memanggil popBackStack() atau memicu tombol kembali sistem. Class NavOptions yang sudah ada dan integrasi ke dalam entri <action> dalam XML grafik navigasi telah diperluas untuk mendukung penyimpanan dan pemulihan data sebelumnya. (b/80029773)

Sebagai bagian dari perubahan ini, metode NavigationUI dari onNavDestinationSelected(), BottomNavigationView.setupWithNavController(), dan NavigationView.setupWithNavController() sekarang otomatis menyimpan dan memulihkan status tujuan yang muncul, sehingga memungkinkan dukungan untuk beberapa data sebelumnya tanpa perubahan kode apa pun. Saat menggunakan Navigasi dengan Fragmen, ini adalah cara yang disarankan untuk diintegrasikan dengan beberapa data sebelumnya. (Ie07ca)

API yang mendasari untuk menyimpan dan memulihkan status ditampilkan melalui sejumlah platform:

  • Dalam XML Navigasi, elemen <action> sekarang dapat menggunakan atribut boolean app:popUpToSaveState dan app:restoreState untuk menyimpan status tujuan apa pun yang muncul melalui app:popUpTo dan memulihkan status yang terkait dengan tujuan yang diteruskan sebagai app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Dalam DSL Kotlin navOptions, Anda dapat menambahkan properti boolean restoreState dan properti boolean saveState di builder popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Dalam membuat objek NavOptions secara manual melalui NavOptions.Builder, Anda dapat menggunakan setRestoreState() dan overload baru ke setPopUpTo() yang memerlukan parameter saveState tambahan.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Panggilan terprogram ke popBackStack() kini dapat menyertakan parameter saveState tambahan.

Dalam semua kasus, NavController akan menyimpan dan memulihkan status setiap NavBackStackEntry, termasuk instance ViewModel dengan cakupan tujuan navigasi apa pun. Navigator API telah diupdate untuk memungkinkan setiap Navigator mendukung penyimpanan dan pemulihan statusnya sendiri.

ComposeNavigator yang digunakan untuk tujuan composable di Navigation Compose, serta FragmentNavigator dan DynamicFragmentNavigator yang digunakan untuk tujuan <fragment> di Navigasi dengan Fragmen telah diupdate untuk menggunakan Navigator API baru dan mendukung penyimpanan dan pemulihan status.

Rute Navigasi

Rute adalah String yang secara unik mengidentifikasi tujuan. Meskipun sebelumnya hanya digunakan di Navigation Compose, konsep ini kini telah ditingkatkan menjadi bagian dari Navigation API inti. Hal ini memberikan alternatif untuk menggunakan ID bilangan bulat saat menyusun grafik melalui Navigation Kotlin DSL. (b/172823546)

Semua API yang sebelumnya hanya menggunakan ID sekarang memiliki overload yang mengambil rute String. Ini termasuk navigate(), popBackStack(), popUpTo(), dan getBackStackEntry().

Hal ini memiliki beberapa implikasi API:

  • Properti kotlin popUpTo pada DSL Kotlin tidak digunakan lagi dan digantikan dengan popUpToId. (I59c73, b/172823546)
  • getStartDestination() API tidak digunakan lagi dan digantikan dengan getStartDestinationId(). (I0887f, b/172823546)

Untuk developer yang mengupgrade Navigation Compose versi sebelumnya ke Navigation Compose 2.4.0-alpha01, ini berarti impor berikut pada metode ekstensi tidak lagi diperlukan dan harus dihapus:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

Argumen KEY_ROUTE telah diganti dengan properti route di NavDestination, sehingga Anda dapat memanggil navBackStackEntry.destination.route secara langsung.

Perubahan API

  • Semua artefak Navigasi telah ditulis ulang dalam Kotlin. Hal ini meningkatkan nullability class menggunakan generik (seperti subclass NavType). Semua fungsi ekstensi Kotlin yang dulunya merupakan bagian dari artefak -ktx telah dipindahkan ke artefak utama masing-masing. Artefak -ktx akan terus dipublikasikan, tetapi sepenuhnya kosong. (b/184292145)
  • NavDeepLinkBuilder sekarang mendukung penambahan beberapa tujuan yang berbeda ke data sebelumnya yang dihasilkan. (I3ee0d, b/147913689)
  • Menambahkan fungsi factory untuk DynamicNavHostFragment (Icd515, b/175222619)
  • ID unik NavBackStackEntry kini ditampilkan sebagai bagian dari API publiknya. (Ie033a)
  • Kolom name dan argument serta fungsi destrukturisasi NamedNavArgument sekarang menjadi publik. (#174, b/181320559)
  • Memperkenalkan ekstensi NavBackStackEntry#provideToCompositionLocals baru yang menyediakan NavBackStackEntry untuk lokal komposisi yang relevan. (#175, b/187229439)

Safe Args

  • Safe Args sekarang menghasilkan metode fromSavedStateHandle() untuk setiap class NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • Mengupdate Safe Args untuk bergantung pada KotlinPoet 1.8.0. (#172, b/183990444)

Perubahan Perilaku

  • Navigasi kini bergantung pada Lifecycle 2.3.1 dan menandai setGraph(), popBackStack(), navigateUp(), dan navigate(), yakni metode yang mengupdate NavBackStackEntry Lifecycle, sebagai @MainThread, dengan menyelaraskan Navigasi terhadap penerapan thread utama yang diperkenalkan dalam Lifecycle 2.3.0. (b/171125856)
  • Mengurai argumen Enum dari deep link kini tidak peka huruf besar/kecil, sehingga deep link seperti http://www.example.com/red dapat mencocokkan deep link www.example.com/{color} meskipun saat enum memiliki nilai RED. (#152, b/135857840)

Kompatibilitas Compose

  • androidx.navigation:navigation-compose:2.4.0-alpha01 hanya kompatibel dengan Compose versi 1.0.0-beta07 dan yang lebih baru.

Perbaikan Bug

  • Memperbaiki masalah saat placeholder argumen akhir lebih diprioritaskan daripada deep link yang memiliki akhiran yang sama persis. (#153, b/184072811)
  • NavHostFragment sekarang mendukung Navigator khusus yang menggunakan @Navigator.Name("dialog") sama seperti DialogFragmentNavigator default. (Ib1c2c, b/175979140)
  • Meningkatkan perilaku NavigatorProvider#addNavigator untuk memastikan bahwa memanggilnya berulang kali dengan instance yang sama tidak menimbulkan masalah. (#176, b/187443146)

Kontribusi Eksternal

  • Terima kasih simonschiller karena telah membuat dukungan untuk Safe Args yang menghasilkan metode fromSavedStateHandle() untuk setiap class NavArgs. (#122, b/136967621)
  • Terima kasih Bradleycorn karena telah membuat penguraian argumen Enum dari deep link yang tidak peka huruf besar/kecil. (#152, b/135857840)
  • Terima kasih osipxd karena telah memperbaiki masalah saat placeholder argumen akhir lebih diprioritaskan daripada deep link yang memiliki akhiran yang sama persis. (#153, b/184072811)
  • Terima kasih tatocaster karena telah mengupdate Safe Args bergantung pada KotlinPoet 1.8.0. (#172, b/183990444)
  • Terima kasih jossiwolf karena telah membuat kolom name dan argument, serta mendestrukturisasi fungsi NamedNavArgument menjadi publik. (#174, b/181320559)
  • Terima kasih jossiwolf karena telah memperkenalkan ekstensi NavBackStackEntry#provideToCompositionLocals baru yang menyediakan NavBackStackEntry untuk lokal komposisi yang relevan. (#175, b/187229439)
  • Terima kasih jossiwolf karena telah meningkatkan perilaku NavigatorProvider#addNavigator untuk memastikan bahwa memanggilnya berulang kali dengan instance yang sama tidak menimbulkan masalah. (#176, b/187443146)

Versi 1.0.0-alpha10

7 April 2021

androidx.navigation:navigation-compose:1.0.0-alpha10 dirilis. Versi 1.0.0-alpha10 berisi commit berikut ini.

Perubahan API

  • NavHost kini menerima Modifier, yang akan diteruskan ke fungsi penampung yang dapat dikomposisi, yang menggabungkan fungsi tujuan yang dapat dikomposisi. (I85aca, b/175125483)

Perbaikan Bug

  • NavHost kini berfungsi meskipun OnBackPressedDispatcherOwner tidak ditemukan, seperti halnya saat melihat pratinjau NavHost. (I7d8b4)
  • Navigation Compose kini bergantung pada Navigation 2.3.5, memperbaiki masalah saat menggunakan BackHandler di dalam tujuan NavHost. (I7e63b, b/182284739)

Versi 1.0.0-alpha09

10 Maret 2021

androidx.navigation:navigation-compose:1.0.0-alpha09 dirilis. Versi 1.0.0-alpha09 berisi commit berikut ini.

Perubahan API

  • LocalViewModelStoreOwner.current kini menampilkan ViewModelStoreOwner nullable untuk menentukan lebih baik apakah ViewModelStoreOwner tersedia di komposisi saat ini. API yang memerlukan ViewModelStoreOwner, seperti viewModel() dan NavHost, masih menampilkan pengecualian jika ViewModelStoreOwner tidak ditetapkan. (Idf39a)

Perbaikan Bug

  • Navigation Compose kini bergantung pada Navigation 2.3.4 yang mencakup perbaikan untuk mencoba menetapkan objek ViewModelStore yang sama setelah grafik ditetapkan. (I65c24, b/177825470)

Versi 1.0.0-alpha08

24 Februari 2021

androidx.navigation:navigation-compose:1.0.0-alpha08 dirilis. Versi 1.0.0-alpha08 berisi commit berikut ini.

Fitur Baru

  • NavHost kini mengisi CompositionLocal LocalSavedStateRegistryOwner dengan NavBackStackEntry tujuan tersebut, memastikan bahwa setiap status yang disimpan langsung ke SavedStateRegistry akan disimpan dan dipulihkan bersama tujuan. (I435d7, b/179469431)

Versi 1.0.0-alpha07

10 Februari 2021

androidx.navigation:navigation-compose:1.0.0-alpha07 dirilis. Versi 1.0.0-alpha07 berisi commit berikut.

Update Dependensi

Versi 1.0.0-alpha06

28 Januari 2021

androidx.navigation:navigation-compose:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit berikut.

Perubahan API

  • Menambahkan metode ekstensi getBackStackEntry(route: String) di NavController yang menampilkan NavBackStackEntry terkait. (If8931)

Versi 1.0.0-alpha05

13 Januari 2021

androidx.navigation:navigation-compose:1.0.0-alpha05 dirilis. Versi 1.0.0-alpha05 berisi commit berikut ini.

Diperbarui agar bergantung pada Compose 1.0.0-alpha10.

Versi 1.0.0-alpha04

16 Desember 2020

androidx.navigation:navigation-compose:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit berikut ini.

  • Diperbarui agar kompatibel dengan Compose 1.0.0-alpha09.

Versi 1.0.0-alpha03

2 Desember 2020

androidx.navigation:navigation-compose:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki masalah saat popBackStack() dan navigateUp() tidak akan berfungsi setelah perubahan konfigurasi atau penghentian dan pembuatan ulang proses. (Icea47, b/173281473)
  • Melakukan navigasi ke grafik bertingkat dalam NavHost kini berfungsi dengan baik. (I0948d, b/173647694)

Versi 1.0.0-alpha02

11 November 2020

androidx.navigation:navigation-compose:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit berikut ini.

Perubahan API

  • Navigation compose kini mendukung NavOptions untuk menggunakan operasi popUpTo dan launchSingleTop (If96c3, b/171468994)
  • Menambahkan fungsi navigasi yang mengambil rute, bukan ID, yang memungkinkan Anda membuat grafik bersarang di Navigation Compose DSL. (I1661d)
  • startDestination kini muncul sebelum rute dalam daftar parameter untuk NavHost (Ie620e)
  • Kini Anda dapat membuat grafik menggunakan rute sebagai tujuan awal di luar komponen NavHost. (Iceb75)

Versi 1.0.0-alpha01

28 Oktober 2020

android.navigation:navigation-compose:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit berikut ini.

Fitur Baru

Artefak navigation-compose menyediakan integrasi antara Komponen Navigasi dan Jetpack Compose. Artefak ini menggunakan fungsi @Composable sebagai tujuan dalam aplikasi Anda.

Rilis awal ini menyediakan:

  • NavHost yang dapat dikomposisi memungkinkan Anda membuat grafik navigasi melalui Kotlin DSL.
  • Cakupan siklus proses, ViewModel, dan status yang diingat di tingkat tujuan.
  • Integrasi otomatis dengan tombol kembali sistem.
  • Dukungan untuk meneruskan argumen, melampirkan deep link ke tujuan, dan mengembalikan hasil ke tujuan sebelumnya.
  • Helper tertentu Compose di rememberNavController() dan currentBackStackEntryAsState() untuk memungkinkan status penarikan dan menghubungkan NavController ke komponen di luar NavHost (seperti menu navigasi bawah).

Lihat panduan Navigation Compose untuk mengetahui informasi selengkapnya.

Versi 2.3.5

Versi 2.3.5

7 April 2021

androidx.navigation:navigation-*:2.3.5 dirilis. Versi 2.3.5 berisi commit berikut ini.

Fitur Baru

  • Saat bernavigasi menggunakan NavDeepLinkRequest atau Uri, kini Anda dapat mengakses Uri, tindakan, dan jenis mime di tujuan yang dihasilkan dengan mendapatkan intent dari argumen melalui KEY_DEEP_LINK_INTENT, mencerminkan fungsi yang sudah tersedia untuk deep linking eksternal. (I975c3, b/181521877)

Perbaikan Bug

  • OnBackPressedCallbacks ditambahkan ke petugas operator dengan NavBackStackEntry karena LifecycleOwner kini melakukan intersepsi kembali dengan benar setelah Siklus Proses Aktivitas adalah STOPPED, lalu STARTED (Iff94f, b/182284739)
  • Penguraian domain deep link kini tidak peka huruf besar/kecil, sehingga memastikan www.example.com cocok dengan www.example.com dan www.Example.com. Perlu diketahui bahwa nama parameter kueri masih peka huruf besar/kecil. (#144, b/153829033)
  • Memperbaiki NullPointerException yang dapat terjadi saat tujuan memiliki beberapa argumen default yang non-nullable dan Anda menavigasi ke tujuan itu dengan hanya mengganti subkumpulan argumen tersebut. (aosp/1644827)

Update Dependensi

Kontribusi Eksternal

  • Terima kasih bentrengrove atas permintaan pull yang membuat penguraian domain deep link tidak peka huruf besar/kecil. (#144, b/153829033)

Versi 2.3.4

Versi 2.3.4

10 Maret 2021

androidx.navigation:navigation-*:2.3.4 dirilis. Versi 2.3.4 berisi commit berikut.

Fitur Baru

  • Argumen ReferenceType kini dapat diuraikan dengan benar saat dikirim sebagai bagian dari URI deeplink. Ini mendukung nilai bilangan bulat mentah serta nilai heksa yang diawali dengan 0x. (#127, b/179166693)
  • android:defaultValue untuk argumen dengan app:argType="float" kini mendukung nilai default bilangan bulat, memungkinkan Anda menggunakan android:defaultValue="0", bukan menggunakan 0.0. (#117, b/173766247)

Perbaikan Bug

  • Memperbaiki progres penginstalan saat menggunakan dukungan Navigation untuk fitur dinamis. (Ib27a7, b/169636207)
  • Memanggil setViewModelStore atau setLifecycleOwner dengan objek sama yang kini telah ditetapkan tanpa pengoperasian (Idf491, b/177825470)
  • Safe-Arg kini menambahkan anotasi sembunyi pada metode yang tepat saat menggunakan java. (I8fbc5, b/179463137)

Kontribusi Eksternal

  • Terima kasih JvmName atas permintaan pull-nya untuk memastikan bahwa argumen ReferenceType kini dapat diuraikan dengan benar saat dikirim sebagai bagian dari URI deeplink. (#127, b/179166693)
  • Terima kasih tatocaster atas permintaan pull-nya untuk mengizinkan defaultValue untuk argumen dengan app:argType=”float” kini mendukung nilai default bilangan bulat. (#117, b/173766247)

Versi 2.3.3

Versi 2.3.3

27 Januari 2021

androidx.navigation:navigation-*:2.3.3 dirilis. Versi 2.3.3 berisi commit berikut.

Perbaikan Bug

  • Tidak ada lagi error saat memunculkan NavBackStackEntry sebelum Lifecycle dipindahkan ke CREATED. (Ie3ba3)
  • Memperbaiki regresi yang disebabkan oleh b/171364502 ketika memilih aktivitas dengan nilai resource animasi 0 yang menyebabkan ResourceNotFoundException. (I7aedb, b/176819931)

Versi 2.3.2

Versi 2.3.2

2 Desember 2020

androidx.navigation:navigation-*:2.3.2 dirilis. Versi 2.3.2 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki regresi dalam NavigationUI, saat penggunaan tujuan <activity> dengan onNavDestinationSelected akan gagal membuka Activity. (I22e34, b/171364502)
  • Memperbaiki masalah saat navigation-dynamic-features-fragment akan mengakibatkan navigasi ke tujuan yang baru diinstal beberapa kali. (aosp/1486056, b/169636207)
  • Memperbaiki masalah saat argumen default tidak akan dikirim ke instance OnDestinationChangedListener ketika menggunakan launchSingleTop. (I2c5cb)
  • Memperbaiki masalah saat navigasi ke grafik navigasi bertingkat tidak akan membuat instance grafik baru di data sebelumnya. (Ifc831)
  • Memperbaiki masalah saat penggunaan navigate() dengan popUpTo yang menghapus tujuan terakhir di grafik navigasi tidak akan langsung menghancurkan dan menghapus grafik navigasi itu sendiri dari data sebelumnya. (I910a3)
  • Navigation SafeArgs kini menggunakan KotlinPoet versi 1.7.2 yang menambahkan dukungan untuk mode API eksplisit Kotlin. (I918b5)
  • NavHostFragment.findNavController(Fragment) kini juga memeriksa tampilan dekorasi root DialogFragment selain pemeriksaan hierarki Fragment dan hierarki tampilan Fragment yang sudah ada. Hal ini memungkinkan Anda menguji fragmen dialog yang menggunakan Navigation dengan FragmentScenario dan Navigation.setViewNavController(). (I69e0d)

Versi 2.3.1

Versi 2.3.1

14 Oktober 2020

androidx.navigation:navigation-*:2.3.1 dirilis. Versi 2.3.1 berisi commit berikut.

Fitur Baru

  • Resource Animator default telah ditambahkan ke UI Navigation dan direkomendasikan pada resource animasi default. (b/167430145)
  • NavOptions kini mengganti metode hashcode dan equals (b/161586466)
  • Navigation kini menyertakan tujuan saat ini dalam IllegalArgumentException "No destination with ID" (Tidak ada tujuan dengan ID), yang akan menyempurnakan pengalaman proses debug developer. (b/168311416)

Perbaikan Bug

  • Safe Args tidak akan lagi menggabungkan baris yang ditampilkan, meskipun nama class argumen yang dihasilkan lebih dari 100 karakter. (b/168584987)

Perubahan Dependensi

  • navigation-ui kini bergantung pada DrawerLayout 1.1.1, memastikan bahwa NavigationUI dapat membuka panel samping meskipun menggunakan LOCK_MODE_LOCKED_CLOSED atau LOCK_MODE_LOCKED_OPEN. (b/162253907)
  • Safe Args kini bergantung pada KotlinPoet 1.6.0 (aosp/1435911)
  • Safe Args kini bergantung pada AGP 4.0.1 (aosp/1442337)

Versi 2.3.0

Versi 2.3.0

24 Juni 2020

androidx.navigation:navigation-*:2.3.0 dirilis. Versi 2.3.0 berisi commit berikut.

Perubahan utama sejak versi 2.2.0

  • Integrasi Modul Fitur: Artefak navigation-dynamic-features-runtime dan navigation-dynamic-features-fragment memungkinkan Anda membuka halaman tujuan yang ditentukan dalam modul fitur, yang secara otomatis menangani penginstalan modul fitur sesuai kebutuhan. Lihat Menuju ke tujuan dengan modul fitur untuk informasi selengkapnya.
  • Pengujian Navigation: Artefak navigation-testing menyediakan TestNavHostController yang memungkinkan Anda menetapkan tujuan saat ini dan memverifikasi data sebelumnya setelah operasi navigasi. Lihat Uji Navigation untuk informasi selengkapnya.
  • Mengembalikan Hasil: NavBackStackEntry yang terkait dengan setiap tujuan di data Navigation sebelumnya kini memungkinkan Anda mengakses SavedStateHandle yang cocok untuk menyimpan status tersimpan dalam jumlah kecil yang harus dihubungkan dengan entri data tertentu sebelumnya. Lihat Mengembalikan hasil ke Tujuan sebelumnya untuk informasi selengkapnya.
  • Dukungan NavigationUI untuk Openable: Semua penggunaan DrawerLayout di NavigationUI telah diganti dengan antarmuka Openable yang lebih umum yang ditambahkan di CustomView 1.1.0 dan diterapkan oleh DrawerLayout di DrawerLayout 1.1.0.
  • Dukungan Tindakan dan Jenis MIME di deep link: Deep linking telah diperluas untuk mendukung app:action dan app:mimeType selain app:uri yang sebelumnya tersedia. NavController kini mendukung pemilihan dengan kombinasi apa pun dari kolom ini melalui class NavDeepLinkRequest baru. Lihat Menavigasi menggunakan NavDEPLinkRequest untuk informasi selengkapnya.

Masalah Umum

  • Dukungan untuk tindakan deep link dan jenis MIME belum tersedia di Penggabungan Manifes. Hingga hal tersebut tersedia, setiap elemen <intent-filter> yang dihasilkan dari elemen <nav-graph> dalam manifes tidak akan menyertakan jenis MIME dalam elemen <data> atau <action> kustom. Anda harus menambahkan <intent-filter> yang sesuai ke manifes secara manual.

Versi 2.3.0-rc01

10 Juni 2020

androidx.navigation:navigation-*:2.3.0-rc01 dirilis. Versi 2.3.0-rc01 berisi commit berikut.

Perbaikan Bug

  • Memperbaiki NullPointerException saat mengganti instance tujuan tanpa argumen dengan instance lain yang disertai argumen menggunakan singleTop. (b/158006669)
  • Semua pengecualian destination is unknown yang ditampilkan oleh NavController kini memiliki informasi proses debug tambahan untuk membantu menentukan status NavController. (b/157764916)

Versi 2.3.0-beta01

20 Mei 2020

androidx.navigation:navigation-*:2.3.0-beta01 dirilis. Versi 2.3.0-beta01 berisi commit berikut.

Perbaikan Bug

  • Memperbaiki masalah ketika Lifecycle dari NavBackStackEntry tidak diupdate dengan benar setelah dihentikannya proses. (b/155218371)
  • Instance OnDestinationChangedListener yang terdaftar sebelum memanggil setGraph() sekarang dikirim dengan benar ke tujuan yang dipulihkan setelah dihentikannya proses. (b/155218371)
  • Saat menggunakan singleTop, argumen NavBackStackEntry kini telah diupdate dengan benar lalu dikirimkan ke semua instance OnDestinationChangeListener. (b/156545508)

Update Dependensi

Versi 2.3.0-alpha06

29 April 2020

androidx.navigation:navigation-*:2.3.0-alpha06 dirilis. (Versi 2.3.0-alpha06 berisi commit berikut ini.)

Fitur Baru

  • Deep link telah diperluas untuk mendukung app:action dan app:mimeType selain app:uri yang sebelumnya tersedia. NavController kini mendukung pemilihan dengan kombinasi apa pun dari kolom ini melalui class NavDeepLinkRequest yang baru. (b/136573074, b/135334841)

Perubahan API

  • Memperluas dukungan DSL Kotlin untuk tujuan Dynamic Navigation. (b/148969800)

Perbaikan Bug

  • Memperbaiki masalah yang menyebabkan Intent deep link diabaikan saat menggunakan tujuan awal bertingkat. (b/154532067)

Versi 2.3.0-alpha05

15 April 2020

androidx.navigation:navigation-*:2.3.0-alpha05 dirilis. Versi 2.3.0-alpha05 berisi commit berikut.

Fitur Baru

  • Untuk penyertaan grafik dinamis yang menggunakan <include-dynamic>, Anda tidak perlu lagi menentukan app:graphPackage dan defaultnya akan digunakan dengan menambahkan akhiran moduleName ke applicationId setelah tanda titik. Jika Anda perlu menyesuaikan graphPackage, placeholder ${applicationId} kini telah didukung. (b/152696768)
  • Navigation Graph Kotlin DSL kini menampilkan defaultArguments Map untuk tindakan, yang menduplikasi kemampuan untuk menetapkan nilai default pada elemen <action> dalam file XML Navigation. (b/150345605)

Perbaikan Bug

  • Dari Navigation 2.2.2: Memperbaiki IllegalStateException saat melakukan deep linking ke tujuan awal grafik saat Anda memiliki beberapa instance NavHostFragment dalam Activity Anda. (b/147378752)

Update dependensi

Versi 2.3.0-alpha04

18 Maret 2020

androidx.navigation:navigation-*:2.3.0-alpha04 dirilis. Versi 2.3.0-alpha04 berisi commit berikut.

Fitur Baru

  • Menambahkan dukungan untuk tujuan aktivitas dan fragmen modul fitur di Navigation Kotlin DSL. (b/148969800)

Perubahan API

  • Class DynamicExtras tidak lagi menggunakan pola builder dan kini dapat dibuat secara langsung. (aosp/1253671)
  • DynamicActivityNavigator kini menggunakan Context dalam konstruktornya, bukan Activity. (aosp/1250252)

Perbaikan Bug

  • NavigationUI tidak lagi mengabaikan label kosong (misalnya, tujuan dengan android:label=””) dan kini menetapkan judul menjadi string kosong dengan benar. (b/148679860)

Update Dependensi

  • Artefak Navigation Dynamic Features kini bergantung pada Play Core 1.6.5. (b/149556401)

Versi 2.3.0-alpha03

4 Maret 2020

androidx.navigation:navigation-*:2.3.0-alpha03 dirilis. Versi 2.3.0-alpha03 berisi commit berikut.

Perubahan API

  • AppBarConfiguration sekarang tidak lagi mengandalkan class DrawerLayout konkret, tetapi menggunakan antarmuka Openable yang diperkenalkan dalam CustomView 1.1.0-alpha02 (yang diimplementasikan oleh DrawerLayout mulai dari DrawerLayout 1.1.0-alpha04) sehingga Anda dapat menggunakan implementasi kustom Openable dengan NavigationUI. (b/129030452)

Perbaikan Bug

  • Aturan navigation-common-ktx ProGuard kini hanya menyimpan class NavArgs yang digunakan dengan benar, bukan semua instance NavArgs. (b/150213558)

Perubahan dependensi

  • Navigation telah mengembalikan dependensinya di Core 1.2.0 dan kini bergantung pada Core 1.1.0 untuk mencegah developer beralih ke dependensi yang lebih baru secara paksa saat Navigation tidak bergantung pada API baru di Core 1.2.0.

Versi 2.3.0-alpha02

19 Februari 2020

androidx.navigation:navigation-*:2.3.0-alpha02 dirilis. Versi 2.3.0-alpha02 berisi commit berikut.

Fitur Baru

  • NavBackStackEntry kini memungkinkan Anda mengakses SavedStateHandle yang cocok untuk menyimpan status tersimpan dalam jumlah kecil yang harus dihubungkan dengan entri data tertentu sebelumnya. Lihat Mengembalikan hasil untuk kasus penggunaan contoh. (b/79672220)

Perubahan API

  • Metode praktis getCurrentBackStackEntry() dan getPreviousBackStackEntry() telah ditambahkan agar lebih mudah untuk mengambil NavBackStackEntry untuk tujuan saat ini dan sebelumnya. (b/79672220)

Perbaikan Bug

  • navigateUp() kini meneruskan argumen tujuan saat ini dan KEY_DEEP_LINK_INTENT ke tujuan sebelumnya saat meluncurkan aplikasi di stack tugas Anda. (b/147456890)

Perubahan dependensi

Versi 2.3.0-alpha01

5 Februari 2020

androidx.navigation:navigation-*:2.3.0-alpha01 dirilis. Versi 2.3.0-alpha01 berisi commit berikut.

Fitur baru

  • Artefak navigation-testing baru menyediakan class TestNavHostController. Class ini menyediakan alternatif untuk menggunakan NavController fiktif saat menguji Navigation yang memungkinkan Anda menetapkan tujuan saat ini dan memverifikasi data sebelumnya setelah operasi navigasi. (b/140884273)
  • navigation-dynamic-features-fragment baru (dan dependensi transitifnya, navigation-dynamic-features-runtime) memungkinkan Anda menyertakan tujuan atau seluruh grafik navigasi (melalui <include-dynamic>) dari modul fitur, yang menyediakan penginstalan modul fitur on-demand lancar saat menuju ke tujuan tersebut. Lihat Menuju ke tujuan dengan modul fitur untuk informasi selengkapnya. (b/132170186)

Perbaikan bug

  • Dari Navigation 2.2.1: Deep link tanpa parameter kueri kini mengabaikan semua parameter kueri dengan benar, bukan menambahkannya ke elemen {argument} akhir atau yang tidak cocok dengan deep link. (b/147447512)
  • Dari Navigation2.2.1: Aturan navigation-ui ProGuard untuk DrawerArrowDrawable telah diperbarui guna memastikan bahwa android.enableJetifier=true tidak diperlukan. (b/147610424)
  • Dari Navigation 2.2.1: Modul navigation-common-ktx kini memiliki nama paket manifes yang unik, bukan berbagi nama paket manifes yang sama dengan navigation-runtime-ktx. (aosp/1141947)

Update dependensi

Versi 2.2.2

Versi 2.2.2

15 April 2020

androidx.navigation:navigation-*:2.2.2 dirilis. Versi 2.2.2 berisi commit berikut.

Perbaikan Bug

  • Memperbaiki IllegalStateException saat melakukan deep link ke tujuan awal grafik saat memiliki beberapa instance NavHostFragment di Activity Anda. (b/147378752)
  • NavigationUI tidak lagi mengabaikan label kosong (misalnya, tujuan dengan android:label=””) dan kini menetapkan judul menjadi string kosong dengan benar. Ini sebelumnya dirilis di Navigation 2.3.0-alpha04. (b/148679860)
  • Aturan navigation-common-ktx ProGuard kini hanya menyimpan class NavArgs yang digunakan dengan benar, bukan semua instance NavArgs. Ini sebelumnya dirilis di Navigation 2.3.0-alpha03. (b/150213558

Update dependensi

Versi 2.2.1

Versi 2.2.1

5 Februari 2020

androidx.navigation:navigation-*:2.2.1 dirilis. Versi 2.2.1 berisi commit berikut.

Perbaikan bug

  • Deep link tanpa parameter kueri kini mengabaikan parameter kueri dengan benar, bukan menambahkannya ke elemen {argument} akhir atau yang tidak cocok dengan deep link. (b/147447512)
  • Aturan navigation-ui ProGuard untuk DrawerArrowDrawable telah diperbarui guna memastikan bahwa android.enableJetifier=true tidak diperlukan. (b/147610424)
  • Modul navigation-common-ktx kini memiliki nama paket manifes yang unik, bukan berbagi nama paket manifes yang sama dengan navigation-runtime-ktx. (aosp/1141947)

Update dependensi

Versi 2.2.0

Versi 2.2.0

22 Januari 2020

androidx.navigation:navigation-*:2.2.0 dirilis. Versi 2.2.0 berisi commit berikut.

Perubahan penting sejak versi 2.1.0

  • NavBackStackEntry: Anda kini dapat memanggil NavController.getBackStackEntry(), meneruskan ID tujuan atau grafik navigasi pada data sebelumnya. NavBackStackEntry yang ditampilkan menyediakan LifecycleOwner, ViewModelStoreOwner (sama dengan yang ditampilkan oleh NavController.getViewModelStoreOwner()), dan SavedStateRegistryOwner berbasis Navigation, selain memberikan argumen yang digunakan untuk memulai tujuan tersebut.
  • Integrasi Lifecycle ViewModel SavedState: SavedStateViewModelFactory sekarang menjadi setelan pabrik default saat menggunakan by navGraphViewModels() atau konstruktor ViewModelProvider dengan ViewModelStoreOwner yang ditampilkan oleh NavController.getBackStackEntry() atau NavController.getViewModelStoreOwner().
  • Dukungan Parameter Kueri untuk Deep Link: Deep link dengan parameter kueri sekarang mendukung parameter kueri yang diurutkan ulang; argumen yang memiliki nilai default atau nullable sekarang bersifat opsional saat mencocokkan deep link.
  • Peningkatan Dukungan Animasi: NavHostFragment sekarang menggunakan FragmentContainerView dari Fragment 1.2.0, yang memperbaiki masalah pengurutan z animasi dan inset jendela yang dikirim ke Fragment.

Versi 2.2.0-rc04

18 Desember 2019

androidx.navigation:navigation-*:2.2.0-rc04 dirilis. Versi 2.2.0-rc04 berisi commit berikut.

Perbaikan bug

  • Menyesuaikan animasi pudar default yang digunakan oleh navigation-ui agar cocok dengan animasi pudar yang disesuaikan di Fragment 1.2.0-rc04. (b/145769814)

Versi 2.2.0-rc03

4 Desember 2019

androidx.navigation:navigation-*:2.2.0-rc03 dirilis. Versi 2.2.0-rc03 berisi commit berikut.

Perbaikan bug

  • Memperbaiki masalah penguraian deep link saat menggunakan parameter kueri dan argumen sebagai bagian terakhir jalur yang mencegah penguraian lebih dari satu karakter argumen jalur akhir. (b/144554689)
  • Memperbaiki masalah penguraian deep link yang menyebabkan parameter opsional menerima "@null", bukan null. (b/141613546)
  • NavHostFragment sekarang akan mengembalikan grafik dengan benar setelah perubahan konfigurasi saat digunakan dengan FragmentContainerView. (b/143752103)

Perubahan dependensi

  • Navigation sekarang bergantung pada Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03, dan Fragment 1.2.0-rc03 jika sesuai.

Versi 2.2.0-rc02

7 November 2019

androidx.navigation:navigation-*:2.2.0-rc02 dirilis. Versi 2.2.0-rc02 berisi commit berikut ini.

Perubahan dependensi

  • Navigation sekarang bergantung pada androidx.lifecycle 2.2.0-rc02.

Versi 2.2.0-rc01

23 Oktober 2019

androidx.navigation:navigation-*:2.2.0-rc01 dirilis tanpa perubahan sejak 2.2.0-beta01. Versi 2.2.0-rc01 berisi commit berikut ini.

Versi 2.2.0-beta01

9 Oktober 2019

androidx.navigation:navigation-*:2.2.0-beta01 dirilis. Versi 2.2.0-beta01 berisi commit berikut ini.

Fitur baru

  • NavDestination dan subclass-nya sekarang menggantikan toString() untuk memberikan lebih banyak informasi bermanfaat selama proses debug. (b/141264986)

Perubahan perilaku

  • Parameter kueri ekstra sekarang diabaikan saat mencocokkan deep link, daripada menyebabkan kegagalan pencocokan. (b/141482822)

Perbaikan bug

  • Memperbaiki masalah saat argumen di jalur deep link diabaikan jika parameter kueri juga ditentukan. (b/141505755)
  • Ekstensi Kotlin navArgs() di Activity sekarang memiliki pesan error yang lebih baik apabila tidak ada tambahan. (b/141408999)
  • Class Java Directions yang dihasilkan Safe Args sekarang berisi nilai default. (b/141099045)
  • Class Java Args yang dihasilkan Safe Args sekarang berisi nilai default. (b/140123727)
  • Saat menggunakan Toolbar, NavigationUI tidak lagi menganimasikan perubahan teks saat berpindah di antara dua tujuan level teratas. (b/140848160)

Versi 2.2.0-alpha03

18 September 2019

androidx.navigation:navigation-*:2.2.0-alpha03 dirilis. Versi 2.2.0-alpha03 berisi commit berikut ini.

Perubahan perilaku

  • Memanggil setViewModelStore() setelah memanggil setGraph sekarang menghasilkan IllegalStateException. Panggilan ini harus selalu disetel oleh NavHost sebagai bagian dari penyiapan awal untuk memastikan bahwa semua instance NavBackStackEntry memiliki penyimpanan yang konsisten untuk instance ViewModel. (aosp/1111821)

Perbaikan bug

  • Memperbaiki ConcurrentModificationException saat menggunakan instance ViewModel yang dikaitkan ke berbagai instance ViewModelStore dengan cakupan grafik navigasi yang berbeda. (aosp/1112257)

Versi 2.2.0-alpha02

5 September 2019

androidx.navigation:navigation-*:2.2.0-alpha02 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Deep link dengan parameter kueri sekarang mendukung parameter kueri yang diurutkan ulang; argumen yang memiliki nilai default atau nullable sekarang bersifat opsional saat mencocokkan deep link. (b/133273839)
  • Sekarang Anda dapat memanggil NavController.getBackStackEntry(), dengan meneruskan ID tujuan atau grafik navigasi di data sebelumnya. NavBackStackEntry yang ditampilkan menyediakan LifecycleOwner, ViewModelStoreOwner (sama dengan yang ditampilkan oleh NavController.getViewModelStoreOwner()), dan SavedStateRegistryOwner berbasis Navigation, selain memberikan argumen yang digunakan untuk memulai tujuan tersebut. (aosp/1101691, aosp/1101710)

Perbaikan bug

  • Memperbaiki masalah saat penambahan NavHostFragment ke ViewPager2 gagal dengan IllegalArgumentException. (b/133640271)
  • NavInflater sekarang menghindari pemanggilan getResourceName() secara tidak perlu, sehingga mempercepat inflation time hingga 40%. (b/139213740)

Versi 2.2.0-alpha01

7 Agustus 2019

androidx.navigation:navigation-*:2.2.0-alpha01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • SavedStateViewModelFactory sekarang merupakan setelan default factory yang digunakan saat menggunakan by navGraphViewModels() atau konstruktor ViewModelProvider dengan ViewModelStoreOwner yang ditampilkan oleh NavController.getViewModelStoreOwner(). (b/135716331)

Perubahan API

  • Dari Navigation 2.1.0-rc01: API getViewModelStore() yang tidak digunakan lagi di NavController yang diperkenalkan dalam versi 2.1.0-alpha02 telah dihapus. (aosp/1091021)

Perbaikan bug

  • NavHostFragment sekarang menggunakan FragmentContainerView, yang memperbaiki masalah pengurutan-z animasi dan inset jendela yang dikirim ke Fragment. (b/137310379)

Versi 2.1.0

Versi 2.1.0

5 September 2019

androidx.navigation:navigation-*:2.1.0 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan penting sejak 2.0.0

  • Membatasi ViewModels ke grafik navigasi: Sekarang Anda dapat membuat ViewModels yang dibatasi di level grafik navigasi menggunakan delegasi properti by navGraphViewModels() bagi pengguna Kotlin yang menggunakan library -ktx, atau dengan menggunakan getViewModelStoreOwner() API yang ditambahkan ke NavController. Lihat Membagikan data terkait UI antar-tujuan untuk mengetahui informasi selengkapnya.
  • Tujuan dialog: Sekarang Anda dapat membuat tujuan <dialog> yang akan menampilkan DialogFragment saat Anda navigate ke sana. NavHostFragment secara default mendukung tujuan dialog. Lihat Membuat tujuan dari DialogFragment untuk informasi selengkapnya.
  • Menavigasi dengan Uri: Sekarang Anda dapat navigate menggunakan Uri, yang menggunakan <deepLink> yang ditambahkan ke tujuan untuk menavigasi ke sana. Lihat Menavigasi menggunakan Uri untuk informasi selengkapnya.
  • NavHostController: API yang digunakan khusus untuk membuat NavHost kustom telah dipindahkan ke NavHostController, yang memungkinkan implementasi untuk menghubungkan NavController miliknya ke LifecycleOwner, OnBackPressedDispatcher, dan ViewModelStore yang menjadi host.

Versi 2.1.0-rc01

7 Agustus 2019

androidx.navigation:navigation-*:2.1.0-rc01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan API

  • getViewModelStore() API yang tidak digunakan lagi di NavController yang diperkenalkan dalam versi 2.1.0-alpha02 telah dihapus. (aosp/1091021)

Versi 2.1.0-beta02

19 Juli 2019

androidx.navigation:*:2.1.0-beta02 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • Menghapus dependensi jacoco tidak disengaja yang diperkenalkan dalam 2.1.0-beta01. (b/137782950)

Versi 2.1.0-beta01

17 Juli 2019

androidx.navigation:*:2.1.0-beta01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • NavigationUI sekarang menganimasikan penghapusan tombol Naik saat setupWithNavController() digunakan dengan Toolbar atau CollapsingToolbarLayout. (b/131403621)

Perbaikan bug

  • Memperbaiki masalah pengaturan waktu saat beberapa NavHostFragment digunakan dengan penampung yang sama dengan findNavController(). (b/136021571)

Versi 2.1.0-alpha06

2 Juli 2019

androidx.navigation:*:2.1.0-alpha06 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Atribut app:navGraph yang digunakan oleh NavHostFragment kini telah dipindahkan ke artefak navigation-runtime. Navigator kustom yang dapat ditambahkan melalui XML harus menggunakan atribut ini untuk mendapatkan integrasi dengan panel Host di Navigation Editor. (b/133880955)

Perubahan API

  • getViewModelStore() API di NavController tidak digunakan lagi dan digantikan dengan metode getViewModelStoreOwner() baru yang menampilkan ViewModelStoreOwner. (aosp/987010)
  • Implementasi tujuan jendela floating, seperti tujuan <dialog>, telah digeneralisasi menjadi antarmuka penanda, FloatingWindow, yang sekarang diimplementasikan oleh semua tujuan <dialog>. Metode NavigationUI untuk berinteraksi dengan panel aplikasi atas sekarang mengabaikan tujuan FloatingWindow. (b/133600763)

Perubahan perilaku

  • Navigation kini mempertahankan statusnya tetap sinkron dengan konten yang ada di layar saat tujuan <dialog> digunakan. Hasilnya, sekarang Navigation otomatis menampilkan tujuan <dialog> ketika Anda menavigasi ke tujuan selain dialog dan tujuan selain aktivitas, seperti tujuan <fragment>. (b/134089818)

Perbaikan bug

  • Navigation kini menyembunyikan animasi yang terjadi ketika membuat ulang aktivitas saat menangani deep link, memperbaiki flash visual. (b/130362979)
  • Memperbaiki bug saat data sebelumnya dari Navigation tidak sinkron ketika Fragment ditampilkan saat fragmen awal sedang ditambahkan. (b/133832218)

Versi 2.1.0-alpha05

5 Juni 2019

androidx.navigation:*:2.1.0-alpha05 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan API

  • API terkait host di NavController diubah namanya dan dipindahkan ke subclass baru NavController, NavHostController. (aosp/966091)
  • Metode setHostOnBackPressedDispatcherOwner() NavController telah diganti dengan metode setOnBackPressedDispatcher() NavHostController dan sekarang mengharuskan Anda memanggil setLifecycleOwner() sebelum memanggilnya. (aosp/965409)
  • NavHostController sekarang memuat metode enableOnBackPressed(boolean) yang menggantikan class NavHostOnBackPressedManager yang sebelumnya ditampilkan oleh setHostOnBackPressedDispatcherOwner(). (aosp/966091)

Perbaikan bug

  • Memperbaiki masalah saat data sebelumnya salah setelah menavigasi menggunakan URI. (b/132509387)
  • Deep link yang otomatis ditangani oleh NavController kini hanya terpicu satu kali. (b/132754763)

Versi 2.1.0-alpha04

16 Mei 2019

androidx.navigation:*:2.1.0-alpha04 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • NavHostFragment sekarang mengikuti app:defaultNavHost dengan benar saat mengintersep peristiwa tombol Kembali sistem, sehingga memperbaiki regresi di Navigation 2.1.0-alpha03. b/132077777
  • DialogFragmentNavigator sekarang menangani operasi popBackStack() dan navigateUp() dengan benar. b/132576764
  • Memperbaiki masalah IllegalStateException: unknown destination during restore saat menavigasi di antara grafik bersarang secara berulang. b/131733658

Versi 2.1.0-alpha03

7 Mei 2019

androidx.navigation:*:2.1.0-alpha03 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Masalah Umum

  • NavHostFragment terus mengintersep tombol Kembali sistem meskipun app:defaultNavHost="false" digunakan b/132077777

Fitur baru

  • Sekarang Anda dapat membuat tujuan <dialog> yang akan menampilkan DialogFragment saat Anda navigate ke sana. NavHostFragment mendukung tujuan dialog secara default. b/80267254
  • Selain memanggil navigate dengan id resource atau instance NavDirections, sekarang Anda dapat menavigasi melalui Uri, yang menggunakan <deepLink> yang telah ditambahkan ke tujuan untuk menavigasi ke tujuan yang benar. b/110412864

Perubahan perilaku

  • Animasi default yang disediakan oleh NavigationUI telah dipercepat dari 400 ms menjadi 220 ms untuk menyesuaikan kecepatan animasi default aktivitas dan fragmen. b/130055522

Perubahan API

  • Metode createFragmentNavigator() dari NavHostFragment tidak digunakan lagi dan fungsinya dipindahkan ke metode onCreateNavController() baru untuk memperjelas bahwa ini adalah titik masuk yang benar untuk menambahkan Navigator kustom ketika menjadikan NavHostFragment sebagai subclass. b/122802849
  • Metode hasDeepLink() telah ditambahkan ke NavDestination untuk memungkinkan Anda memeriksa apakah Uri tertentu dapat ditangani oleh tujuan tersebut, atau dalam kasus NavGraph, oleh tujuan mana pun dalam grafik navigasi. b/117437718

Perbaikan bug

  • Argumen default sekarang diteruskan dengan benar ke instance OnDestinationChangedListener. b/130630686
  • NavHostFragment sekarang mengintersep peristiwa tombol Kembali sistem menggunakan OnBackPressedDispatcher, yang memperbaiki masalah saat melakukan navigasi bersyarat dalam metode siklus proses Fragment sekembalinya ke suatu Fragment. b/111598096
  • Untuk Safe Args, android:defaultValue=”@null” dengan app:argType yang tidak ditentukan sekarang diinferensikan dengan benar sebagai argumen string. b/129629192

Versi 2.1.0-alpha02

3 April 2019

androidx.navigation:*:2.1.0-alpha02 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Sekarang Anda dapat membuat ViewModel yang dibatasi di level grafik navigasi melalui delegasi properti by navGraphViewModels() bagi pengguna Kotlin, atau dengan menggunakan getViewModelStore() API yang ditambahkan ke NavController. b/111614463

Perubahan API

  • Sekarang Anda dapat menambahkan app:targetPackage ke tujuan <activity> untuk membatasi nama paket yang cocok. Perubahan ini mendukung app:targetPackage="${applicationId}" untuk membatasi paket ke ID aplikasi Anda sendiri. b/110975456

Perbaikan bug

  • android:name untuk tujuan <activity> tidak lagi diuraikan menjadi Class pada inflation time sehingga mencegah terjadinya ClassNotFoundExceptions saat menggunakan fitur dinamis. b/124538597

Versi 2.1.0-alpha01

19 Maret 2019

Ini adalah rilis alfa pertama Navigation 2.1.0.

Perubahan dependensi

  • Navigation sekarang menggunakan androidx.core:core:1.0.1 dan androidx.fragment:fragment:1.1.0-alpha05 sebagai dependensi. Rilis ini juga menghapuskan dependensi pada androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

Perubahan API

  • Metode Navigation.createNavigateOnClickListener(NavDirections) baru telah ditambahkan sebagai alternatif pembuatan pemroses klik dengan ID resource dan Paket. b/127631752
  • FragmentNavigator.instantiateFragment tidak digunakan lagi. Implementasi default sekarang menggunakan FragmentFactory untuk membuat instance Fragment. b/119054429

Perbaikan Bug

  • Navigation tidak lagi mengirimkan Bundle null ketika ada argumen yang dikaitkan ke tujuan, memperbaiki masalah saat android:defaultValue="@null" digunakan. b/128531879
  • Safe Args sekarang menggunakan KotlinPoet 1.1.0 sebagai dependensi, memperbaiki masalah dengan nama paket yang sangat panjang. b/123654948

Versi 2.0.0

Versi 2.0.0

14 Maret 2019

Navigation 2.0.0 dirilis tanpa perubahan dari versi 2.0.0-rc02.

Versi 2.0.0-rc02

6 Maret 2019

Navigation 2.0.0-rc02 menyediakan artefak baru dengan ID grup androidx.navigation dan mengubah dependensinya ke yang setara dengan AndroidX.

Perilaku 2.0.0-rc02 identik dengan perilaku Navigation 1.0.0-rc02 dan tidak ada perubahan yang harus dilakukan pada kode Anda untuk melakukan update dari 1.0.0-rc02 selain memperbarui dependensi agar sesuai dengan dependensi yang baru.

Project Anda harus sudah dimigrasikan ke AndroidX untuk menggunakan Navigation rilis 2.X. Rilis stabil Navigation 1.0 akan menjadi rilis terakhir yang menggunakan dependensi Support Library; semua pengembangan selanjutnya setelah rilis 1.0 akan didasarkan pada AndroidX dan dikembangkan dari rilis stabil 2.0.

Dependensi sebelum AndroidX

Untuk versi Navigation pra-AndroidX, sertakan dependensi berikut:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

Untuk Safe Args, tambahkan classpath berikut ini dalam file build.gradle tingkat teratas Anda.

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

Versi 1.0.0

Versi 1.0.0

14 Maret 2019

Navigation 1.0.0 dirilis tanpa perubahan dari versi 1.0.0-rc02.

Versi 1.0.0-rc02

26 Februari 2019

Ini adalah kandidat rilis kedua untuk rilis stabil Navigation 1.0.0. Rilis ini berisi sejumlah perbaikan bug.

Perbaikan Bug

  • Memperbaiki masalah yang menyebabkan popBackStack() diabaikan jika grafik root tidak memiliki ID b/126251695
  • navigateUp() sekarang mengembalikan navigasi dengan benar ke tugas aplikasi Anda ketika dipanggil setelah menangani deep link tanpa FLAG_ACTIVITY_NEW_TASK b/126082008
  • Memperbaiki masalah yang menyebabkan ActivityNavigator.applyPopAnimationsToPendingTransition tidak menerapkan animasi keluar pop yang tepat b/126237567
  • Kode Kotlin yang dihasilkan oleh Safe Args kini meng-escape kata kunci Kotlin dengan benar, seperti in dan fun dalam nama paket yang terkait dengan class R. b/126020455

Versi 1.0.0-rc01

21 Februari 2019

Ini adalah kandidat rilis untuk rilis stabil Navigation 1.0.0. Rilis ini berisi satu perbaikan bug.

Perbaikan Bug

  • Memperbaiki masalah penggunaan Fragmen dan operasi navigasi singleTop b/124294805

Versi 1.0.0-beta02

12 Februari 2019

Rilis ini menyertakan sejumlah penyempurnaan kecil dan perbaikan bug penting.

Fitur Baru

  • Anda sekarang dapat menggunakan 0 sebagai android:defaultValue untuk argumen reference. b/124248602

Perubahan perilaku

  • Deep link yang benar-benar cocok sekarang diprioritaskan daripada deep link dengan .* atau kecocokan argumen. b/123969518

Perbaikan Bug

  • popBackStack() dan navigateUp sekarang menampilkan false dengan benar saat memunculkan tujuan terakhir pada data sebelumnya, memperbaiki regresi yang diperkenalkan dalam 1.0.0-beta01. b/123933201
  • Navigation sekarang menetapkan ClassLoader dengan benar selama pemulihan status instance tersimpan, menghindari masalah saat menggunakan class kustom dalam status tersimpan Navigator atau dalam argumen yang dikirim ke NavDestination. b/123893858
  • Class NavArgs yang dihasilkan Safe Args tidak lagi error saat memulihkan argumen Parcelable[] dari status instance tersimpan. b/123963545
  • Safe Args kini dapat dengan benar menghapus class Kotlin yang tidak diperlukan. b/124120883

Versi 1.0.0-beta01

4 Februari 2019

Ini adalah rilis beta pertama Navigation; selanjutnya, Navigation API diharapkan akan tetap stabil hingga versi berikutnya kecuali ada masalah mendesak. Rilis ini berisi beberapa perbaikan bug dan perubahan perilaku.

Perubahan perilaku

  • Navigation kini memastikan bahwa nilai default argumen diperlakukan sama persis pada waktu proses dan di seluruh Safe Args. Hasilnya, hanya argumen dengan app:argType="reference" yang nilai default-nya dapat mengarah ke resource lain (misalnya @color/colorPrimary). Mencoba menggunakan nilai default referensi dengan app:argType lain akan menghasilkan pengecualian saat mengurai XML navigasi. b/123551990
  • Safe Args sekarang bergantung pada Plugin Android Gradle 3.3.0 aosp/888413
  • Safe Args sekarang menggunakan Kotlin 1.3.20 sebagai dependensi. aosp/888414

Perbaikan Bug

  • Safe Args kini dapat digunakan dalam library dan modul fitur pada semua versi Plugin Android Gradle. b/121304903
  • Memperbaiki regresi yang menyebabkan operasi popBackStack() tunggal memunculkan semua salinan tujuan di bagian atas data sebelumnya, bukan hanya satu tujuan pada satu waktu. b/123552990
  • Memperbaiki masalah saat status FragmentNavigator membatalkan sinkronisasi dengan status NavController, sehingga terjadi IllegalStateException saat mencoba memulihkan data sebelumnya. b/123803044
  • Memperbaiki masalah yang menyebabkan panah kembali yang ditangani NavigationUI tidak muncul saat menggunakan ProGuard dengan obfuscation. b/123449431
  • Kode yang dihasilkan Safe Args sekarang melakukan penanganan dengan benar menggunakan app:argType yang mengarah ke class internal statis dengan format .OuterClass$InnerClass. b/123736741
  • Kode Java yang dihasilkan Safe Args kini dapat dengan benar menangani tindakan global dan tujuan di tingkatan yang dalam. b/123347762

Versi 1.0.0-alpha11

23 Januari 2019

Ini adalah rilis hotfix 1.0.0-alpha10 yang memperbaiki masalah dengan Safe Args.

Perbaikan Bug

  • Memperbaiki masalah yang menyebabkan Safe Args gagal mengimpor class Directions yang terkait dengan tindakan global. b/123307342

Versi 1.0.0-alpha10

23 Januari 2019

Masalah Umum

  • Safe Args gagal mengimpor class Directions yang terkait dengan tindakan global. b/123307342

Rilis ini berisi perubahan API yang dapat menyebabkan gangguan; lihat bagian Perubahan yang Dapat Menyebabkan Gangguan di bawah ini.

Fitur Baru

  • Pengguna Kotlin kini dapat menggunakan delegasi properti by navArgs() untuk mendapatkan referensi dengan mudah ke class NavArgs yang dihasilkan Safe Args dalam Activity atau Fragment. b/122603367
  • Safe Args sekarang memungkinkan Anda menghasilkan kode Kotlin dengan menerapkan plugin androidx.navigation.safeargs.kotlin. Kode Kotlin dibuat khusus untuk modul Kotlin, menggunakan argumen default dan class yang tidak dapat diubah melalui pola builder yang masih tersedia melalui plugin androidx.navigation.safeargs sebelumnya. b/110263087

Perubahan Perilaku

  • Deep link yang cocok sekarang memprioritaskan deep link yang memiliki argumen paling cocok. b/118393029
  • Memanggil setGraph() di NavController sekarang akan mereset data sebelumnya. b/111450672
  • Deep link yang tidak diketahui kini tidak lagi menampilkan IllegalStateException, tetapi akan diabaikan sehingga memperbaiki masalah dengan NavHostFragment yang berjumlah lebih dari satu atau bertingkat. b/121340440

Perubahan yang Dapat Menyebabkan Gangguan

  • Metode NavOptions.applyPopAnimationsToPendingTransition() untuk menerapkan animasi pop ke Activity telah dipindahkan ke ActivityNavigator. b/122413117
  • Safe Args kini menghindari duplikasi class identik untuk tindakan tanpa argumen. Jenis nilai yang ditampilkan untuk metode tanpa argumen dalam class NavDirections yang dihasilkan sekarang menjadi NavDirections. b/123233147
  • Class Directions yang dihasilkan Safe Args kini tidak lagi memiliki konstruktor publik; Anda hanya boleh berinteraksi dengan metode statis yang dihasilkan. b/123031660
  • Class NavDirections yang dihasilkan Safe Args kini tidak lagi memiliki konstruktor publik; class tersebut hanya boleh dihasilkan melalui metode statis dalam class Directions yang dihasilkan. b/122963206
  • Bundle yang ditampilkan dari getArguments() milik NavDirections sekarang ditandai sebagai @NonNull, bukan @Nullable. b/123243957

Perbaikan Bug

  • NavDeepLinkBuilder sekarang dapat menangani beberapa PendingIntent simultan ke tujuan yang sama dengan benar menggunakan argumen yang diberikan untuk menentukan keunikannya. b/120042732
  • NavController sekarang dapat menangani operasi popBackStack() dengan benar ketika menggunakan NavHostFragment bertingkat atau Fragmen turunan lainnya dengan data sebelumnya. b/122770335
  • NavigationUI sekarang dapat menetapkan deskripsi konten tombol Up dengan benar. b/120395362
  • Class Directions yang dihasilkan Safe Args kini dengan benar menangani tindakan global yang memiliki ID yang sama dengan tindakan pada suatu tujuan. b/122962504
  • Class NavDirections yang dihasilkan Safe Args sekarang memiliki nilai hashCode() yang sama apabila equals() menampilkan benar. b/123043662
  • FragmentNavigator sekarang menampilkan pesan error yang lebih baik ketika Anda mencoba melakukan FragmentTransactions kustom di FragmentManager NavHostFragment. Anda harus selalu menggunakan getChildFragmentManager(). b/112927148

Versi 1.0.0-alpha09

18 Desember 2018

Rilis ini berisi perubahan API yang dapat menyebabkan gangguan; lihat bagian Perubahan yang Dapat Menyebabkan Gangguan di bawah ini.

Kami memilih untuk tidak melanjutkan pengembangan artefak android.arch.navigation:navigation-testing. Meskipun terbukti bermanfaat untuk pengujian internal NavController, kami sangat merekomendasikan strategi pengujian alternatif, seperti membuat tiruan instance NavController untuk memastikan bahwa panggilan navigate() yang benar sudah dilakukan. Pendekatan ini dibahas secara mendetail dalam topik Single Activity di AndroidDevSummit 2018 dan kami akan menyusun dokumentasi tambahan secara khusus mengenai pengujian dengan Navigation.

Fitur Baru

  • MenuItem dengan menuCategory="secondary" tidak akan lagi menampilkan data sebelumnya saat digunakan dengan metode NavigationUI. b/120104424
  • AppBarConfiguration kini memungkinkan Anda menetapkan instance OnNavigateUpListener penggantian yang akan dipanggil saat navController.navigateUp() menampilkan false. b/79993862 b/120690961

Perubahan yang Dapat Menyebabkan Gangguan

  • Saat menggunakan <argument> dengan argType="reference", Navigation tidak lagi mengurai referensi, tetapi akan memberikan ID resource mentahnya. b/111736515
  • onNavDestinationSelected() sekarang akan muncul kembali ke tujuan awal grafik navigasi Anda secara default, sehingga konsisten dengan metode setup. Tambahkan menuCategory="secondary" ke MenuItem untuk menghindari munculnya data sebelumnya. aosp/852869
  • Metode fromBundle() dari class Args yang dihasilkan kini menggunakan Bundle non-null, bukan Bundle nullable aosp/845616

Perbaikan Bug

  • Argumen kini diurai dengan benar dari deep link sebagai argType yang tepat, bukan selalu sebagai string b/110273284
  • Navigation sekarang mengekspor resource publiknya dengan benar b/121059552
  • Safe Args kini kompatibel dengan Plugin Android Gradle 3.4 Canary 4 dan yang lebih baru b/119662045

Versi 1.0.0-alpha08

6 Desember 2018

Rilis ini berisi perubahan API yang dapat menyebabkan gangguan; lihat bagian Perubahan yang Dapat Menyebabkan Gangguan di bawah ini.

Fitur Baru

  • Label tujuan, jika digunakan dengan metode NavigationUI, sekarang akan otomatis mengganti instance {argName} dalam android:label Anda dengan argumen yang benar b/80267266
  • Navigation sekarang bergantung pada Support Library 28.0.0 b/120293333

Perubahan yang Dapat Menyebabkan Gangguan

  • OnNavigatedListener telah diganti namanya menjadi OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener sekarang juga meneruskan Bundle argumen aosp/837142
  • Atribut app:clearTask dan app:launchDocument serta metode terkaitnya telah dihapus. Gunakan app:popUpTo dengan root grafik untuk menghapus semua tujuan dari data sebelumnya. b/119628354
  • ActivityNavigator.Extras sekarang menggunakan pola Builder dan menambahkan kemampuan untuk menetapkan tanda Intent.FLAG_ACTIVITY_ apa pun aosp/828140
  • NavController.onHandleDeepLink telah diubah namanya menjadi handleDeepLink aosp/836063
  • Sebagian class dan metode yang tidak dimaksudkan untuk pembuatan subclass, seperti NavOptions, NavInflater, NavDeepLinkBuilder, dan AppBarConfiguration, telah dijadikan final aosp/835681
  • Metode NavHostFragment.setGraph() yang tidak digunakan lagi telah dihapus aosp/835684
  • Metode NavigationUI.navigateUp(DrawerLayout, NavController) yang tidak digunakan lagi telah dihapus. aosp/835684
  • Pembuatan Fragment telah dipindahkan ke FragmentNavigator, memudahkan penetapan delegasi pembuatan Fragment ke FragmentFactory. b/119054429
  • Konstruktor untuk NavGraphNavigator tidak lagi menggunakan Context aosp/835340
  • NavigatorProvider sekarang merupakan class, bukan antarmuka. NavigatorProvider yang ditampilkan oleh getNavigatorProvider() tidak berubah fungsinya. aosp/830660
  • NavDestination.navigate() telah dihapus. Sekarang, Anda dapat memanggil navigate() di Navigator. aosp/830663
  • Pemfaktoran ulang Navigator secara signifikan, yang meniadakan kebutuhan akan OnNavigatorNavigatedListener dan meminta navigate menampilkan NavDestination yang menjadi tujuan navigasi.
  • Instance Navigator tidak dapat lagi mengirimkan peristiwa kemunculan ke NavController. Sebaiknya gunakan OnBackPressedCallback untuk mengintersep penekanan tombol kembali dan memanggil navController.popBackStack(). aosp/833716

Perbaikan Bug

  • popUpTo sekarang berfungsi secara konsisten saat tujuannya adalah elemen <navigation> b/116831650
  • Memperbaiki sejumlah bug yang mengakibatkan IllegalArgumentException saat menggunakan grafik bertingkat b/118713731 b/113611083 b/113346925 b/113305559
  • Atribut dataPattern tujuan <activity> sekarang akan mengisi argumen dari argumen non-String dengan memanggil toString() b/120161365

Safe Args

  • Safe Args mendukung Objek yang dapat diserialisasi, termasuk nilai Enum. Jenis Enum dapat menetapkan nilai default menggunakan literal enum tanpa nama class (misalnya app:defaultValue="READ") b/111316353
  • Safe Args mendukung array dari semua jenis yang didukung b/111487504
  • Safe Arg sekarang mengabaikan subfolder direktori resource b/117893516
  • Safe Args menambahkan anotasi @Override jika sesuai b/117145301

Versi 1.0.0-alpha07

29 Oktober 2018

Fitur Baru

Perubahan yang Dapat Menyebabkan Gangguan

  • Modul navigation-testing-ktx telah dikemas ke dalam navigation-testing artifact dan tidak akan dipublikasikan lagi.
  • Artefak navigation-testing kini memiliki dependensi pada library standar Kotlin. API telah diubah agar lebih konsisten dengan konvensi Kotlin, tetapi Anda dapat terus menggunakannya untuk pengujian aplikasi yang ditulis dalam Java.
  • Grafik navigasi terdaftar manifes metadata tidak lagi didukung. b/118355937
  • Tindakan tidak dapat lagi ditambahkan ke tujuan <activity>. aosp/785539

Perbaikan Bug

  • Deep link kini akan mengurai parameter kueri dengan benar. b/110057514
  • Tujuan Activity sekarang menerapkan semua animasi masuk dan keluar dengan benar. b/117145284
  • Memperbaiki masalah yang terjadi setelah perubahan konfigurasi saat menggunakan Navigator kustom. b/110763345

Safe Args

  • Safe Args sekarang memiliki dependensi tetap pada Plugin Android Gradle 3.2.1. b/113167627
  • Directions kini dapat dibuat untuk class internal. b/117407555
  • Memperbaiki masalah terkait pembuatan Directions ke grafik <include>. b/116542123

Versi 1.0.0-alpha06

20 September 2018

Fitur Baru

Perubahan API

  • Perubahan yang Dapat Menyebabkan Gangguan: Metode navigate() Navigator kini menggunakan parameter Navigator.Extras.
  • Metode getGraph() NavController sekarang adalah NonNull b/112243286

Perbaikan Bug

  • NavigationUI.setupWithNavController() tidak lagi membocorkan tampilan jika digunakan dengan tampilan dari tujuan individu b/111961977
  • onSaveState() navigator sekarang hanya dipanggil satu kali b/112627079

Safe Args

  • Class Directions tujuan Navigation kini memperluas class Directions induknya jika ada. b/79871405
  • Class Directions dan Args kini memiliki implementasi toString() yang berguna. b/111843389

Versi 1.0.0-alpha05

10 Agustus 2018

Perbaikan Bug

  • Memperbaiki bug yang menyebabkan perilaku backstack yang salah. b/111907708
  • Memperbaiki bug di equals() class Generated Args. b/111450897
  • Memperbaiki kegagalan pembuatan di Safe Args. b/109409713
  • Memperbaiki konversi dari pengenal resource ke nama java. b/111602491
  • Memperbaiki pesan error tentang nullability di plugin Safe Args.
  • Menambahkan anotasi nullability yang hilang.

Versi 1.0.0-alpha04

19 Juli 2018

Navigation 1.0.0-alpha04 dan plugin gradle Safe Args yang terkait berisi sejumlah perubahan API, perubahan perilaku, dan perbaikan bug.

Perubahan API/Perilaku

  • NavHostFragment akan selalu mengatur Fragmen saat ini sebagai fragmen navigasi utama, memastikan bahwa pengelola fragmen turunan muncul sebelum NavController luar muncul b/111345778

Safe Args

  • Perubahan yang Dapat Menyebabkan Gangguan: app:type telah diubah menjadi app:argType untuk menghindari konflik dengan library lain seperti ConstraintLayout 2.0.0-alpha1 b/111110548
  • Pesan error dari Safe Args kini dapat diklik b/111534438
  • Class Args kini menegaskan bahwa atribut NonNull sebenarnya bukan null. b/111451769
  • Anotasi NonNull tambahan telah ditambahkan ke NavDirections dan class yang dihasilkan Args b/111455455 b/111455456

Perbaikan Bug

  • Memperbaiki masalah dengan tombol kembali sistem setelah melakukan deep link ke tujuan fragmen. b/111515685

Versi 1.0.0-alpha03

12 Juli 2018

Navigation 1.0.0-alpha03 dan plugin gradle Safe Args yang terkait berisi sejumlah perubahan API, perubahan perilaku, dan perbaikan bug.

Perubahan API/Perilaku

  • Metode NavigationUI.setupWithNavController untuk Toolbar telah ditambahkan b/109868820
  • Metode NavigationUI.setupWithNavController untuk CollapsingToolbarLayout telah ditambahkan b/110887183
  • popBackStack () sekarang mengembalikan nilai salah ketika data sebelumnya kosong atau ketika ID tujuan yang diberikan tidak ada di data sebelumnya b/110893637
  • FragmentNavigator kini mengabaikan operasi navigasi setelah FragmentManager memiliki status tersimpan, yang menghindari pengecualian "Tidak dapat melakukan tindakan ini setelah onSaveInstanceState" b/110987825

Safe Args

  • Perubahan yang Dapat Menyebabkan Gangguan: Karakter non-alfanumerik dalam nama tindakan dan argumen akan diganti dengan CamelCase dalam nama metode NavDirections masing-masing
    • Misalnya DemoController.index akan menjadi setDemoControllerIndex b/79995048
    • Misalnya action_show_settings akan menjadi actionShowSettings b/79642240
  • Perubahan yang Dapat Menyebabkan Gangguan: Argumen kini dianggap non-null secara default. Untuk mengizinkan nilai null pada argumen string dan parcelable, tambahkan app:nullable="true"b/79642307
  • Sekarang Anda dapat menggunakan app:type="long" dengan defaultValues dalam format “123L” b/79563966
  • Argumen parcelable kini didukung, menggunakan nama class yang memenuhi syarat untuk app:type. Satu-satunya nilai default yang didukung adalah "@null"b/79563966
  • Class Args sekarang mengimplementasikan equals() dan hashCode() b/79642246
  • Plugin Safe Args kini dapat diterapkan ke project library. b/80036553
  • Plugin Safe Args kini dapat diterapkan ke project fitur. b/110011752

Perbaikan Bug

  • Memperbaiki masalah saat menavigasi selama metode siklus proses Fragmen b/109916080
  • Memperbaiki masalah saat menjelajahi grafik bertingkat beberapa kali b/110178671
  • Memperbaiki masalah saat menggunakan setPopUpTo dengan tujuan pertama dalam grafik b/109909461
  • Memperbaiki masalah saat semua nilai app:defaultValue diteruskan sebagai String b/110710788
  • aapt2 yang dipaketkan dengan Plugin Android Gradle 3.2 Beta 01 kini menambahkan aturan keep untuk setiap atribut android:name dalam file XML Navigation b/79874119
  • Memperbaiki kebocoran memori saat mengganti FragmentNavigator default b/110900142

Versi 1.0.0-alpha02

7 Juni 2018

Perubahan Perilaku

  • FragmentNavigator sekarang menggunakan setReorderingAllowed(true). b/109826220

  • Navigation sekarang meng-URLDecode argumen yang diurai dari URL deep link. b/79982454

Perbaikan Bug

  • Memperbaiki IllegalStateException saat memanggil navigasi dari metode siklus proses Fragmen. b/79632233

  • Navigation sekarang bergantung pada Support Library 27.1.1 untuk memperbaiki kedipan saat menggunakan animasi. b/80160903

  • Memperbaiki IllegalArgumentException saat menggunakan defaultNavHost="true" sebagai fragmen turunan. b/79656847

  • Memperbaiki StackOverflowError saat menggunakan NavDeepLinkBuilder. b/109653065

  • Memperbaiki IllegalArgumentException saat menavigasi kembali ke grafik bertingkat. b/80453447

  • Memperbaiki masalah Fragmen yang tumpang-tindih saat menggunakan launchSingleTop. b/79407969

  • Navigation sekarang membuat data sebelumnya yang benar dan bersifat sintetis untuk grafik bertingkat. b/79734195

  • NavigationUI kini akan menyorot item yang benar saat grafik bertingkat digunakan sebagai MenuItem. b/109675998

Perubahan API

  • Atribut clearTask untuk tindakan dan API terkaitnya di NavOptions tidak digunakan lagi. b/80338878

  • Atribut launchDocument untuk tindakan dan API yang diatribusikan di NavOptions tidak digunakan lagi. b/109806636

Versi 1.0.0-alpha01

8 Mei 2018

Navigation menyediakan framework untuk membuat navigasi dalam aplikasi. Rilis awalnya adalah 1.0.0-alpha01.