Komponen Navigasi bekerja dengan sistem operasi Android untuk mempertahankan data sebelumnya saat pengguna membuka aplikasi Anda. Dalam beberapa kasus, mungkin ada baiknya untuk mengelola beberapa data sebelumnya secara bersamaan, dengan pengguna bergerak bolak-balik di antara data. Misalnya, jika aplikasi Anda menyertakan navigasi bawah atau panel navigasi, beberapa dukungan data sebelumnya memungkinkan pengguna Anda beralih antar-alur di aplikasi Anda dengan bebas tanpa harus kehilangan posisinya.
Komponen Navigasi menyediakan API yang mendukung beberapa data sebelumnya dengan
menyimpan dan memulihkan status tujuan di grafik
navigasi Anda. Class
NavigationUI
menyertakan
metode yang menangani hal ini secara otomatis, tetapi Anda juga dapat menggunakan API dasar
secara manual untuk implementasi yang lebih disesuaikan.
Menerapkan dukungan secara otomatis dengan NavigationUI
Class NavigationUI
menyertakan API yang otomatis menyimpan dan memulihkan status item menu saat
pengguna berpindah di antara item tersebut. API ini mengimplementasikan beberapa dukungan data sebelumnya secara
default dalam kasus berikut:
- Saat Anda menggunakan overload
setupWithNavController()
yang sesuai untuk mengaitkan instanceNavigationView
atauBottomNavigationView
dengan instanceNavController
, seperti yang dijelaskan dalam Menambahkan panel navigasi atau Navigasi bawah. - Saat Anda menggunakan
onNavDestinationSelected()
untuk membuat UI menu navigasi kustom yang diikat ke tujuan yang dihosting oleh instanceNavController
.
API ini tidak memerlukan perubahan kode lebih lanjut untuk mengimplementasikan beberapa dukungan data sebelumnya, dan merupakan cara yang direkomendasikan untuk mendukung beberapa data sebelumnya dalam aplikasi Anda.
Mengimplementasikan dukungan secara manual dengan API dasar
Jika elemen yang disediakan oleh NavigationUI
tidak memenuhi persyaratan, Anda
dapat menggunakan API dasar untuk menyimpan dan memulihkan data sebelumnya melalui salah satu
platform API lain yang disediakan oleh komponen Navigasi.
XML Navigasi
Dalam XML Navigasi, elemen <action>
dalam grafik navigasi Anda dapat menggunakan
atribut app:popUpToSaveState
untuk menyimpan status tujuan apa pun yang
dimunculkan tindakan menggunakan app:popUpTo
. Elemen juga dapat menggunakan atribut app:restoreState
untuk memulihkan status yang sebelumnya disimpan untuk tujuan yang ditentukan dalam
atribut app:destination
.
Anda dapat menggunakan atribut ini untuk mendukung beberapa data sebelumnya. Saat tindakan navigasi
perlu memindahkan pengguna dari satu data sebelumnya ke yang lain, tetapkan
app:popUpToSaveState
dan app:restoreState
ke true
di elemen <action>
yang sesuai. Dengan begitu, tindakan akan menyimpan status data sebelumnya
saat ini, sekaligus memulihkan status data sebelumnya
yang disimpan, jika ada.
Contoh berikut menunjukkan tindakan yang menggunakan kedua atribut tersebut:
<action
android:id=”@+id/swap_stack”
app:destination=”@id/second_stack”
app:restoreState=”true”
app:popUpTo=”@id/first_stack_start_destination”
app:popUpToSaveState=”true” />
NavOptions
Class NavOptions
memungkinkan Anda meneruskan opsi navigasi khusus untuk menyimpan dan memulihkan data sebelumnya
saat menavigasi menggunakan NavController
. Hal ini berlaku meskipun Anda membuat
instance NavOptions
menggunakan DSL
Kotlin atau menggunakan
NavOptions.Builder
:
Kotlin
// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
Java
NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
Untuk mempelajari cara meneruskan opsi navigasi lebih lanjut, lihat Menerapkan NavOptions secara terprogram.
Referensi tambahan
Untuk mempelajari lebih lanjut beberapa dukungan data sebelumnya dengan komponen Navigation, lihat referensi tambahan berikut:
Postingan blog
- MAD Skills: Menavigasi beberapa data sebelumnya di Medium
- Navigasi: Mempelajari lebih dalam Data Sebelumnya di Medium
Contoh
- Kini di aplikasi Android di GitHub
- Jetnews di GitHub
- Jetsnack di GitHub