Halaman ini menjelaskan praktik terbaik untuk berinteraksi dengan peta Navigasi di aplikasi Anda.
Gunakan NavigationFragment, bukan NavigationView, jika memungkinkan
NavigationFragment menggabungkan NavigationView dan otomatis menangani callback siklus prosesnya, sehingga Anda tidak perlu mengelolanya sendiri. Pendekatan ini
tidak terlalu rentan terhadap error dan merupakan cara yang direkomendasikan untuk menggunakan navigasi di aplikasi Anda.
Saat menggunakan NavigationFragment, jangan panggil peristiwa siklus proses NavigationView
secara langsung.
Jika menggunakan NavigationView, gunakan pengurutan ketat saat memanggil metode siklus proses
NavigationView menghosting peta Navigasi dan mengikuti peristiwa siklus proses
dengan cermat sebagai aktivitas dan fragmen Android, dengan mengambil tindakan tertentu saat peristiwa
siklus proses ini dipanggil. NavigationView menjalankan beberapa inisialisasi
pada NavigationView#onCreate dan NavigationView#onStart, serta pembersihan pada
NavigationView#onStop dan NavigationView#onDestroy, serta saat peristiwa
siklus proses lainnya diproses.
Metode siklus proses NavigationView memiliki arti yang sama seperti untuk aktivitas atau fragmen Android. Misalnya, onCreate dari NavigationView secara kasar
diterjemahkan dan harus dipanggil oleh callback siklus proses dari aktivitas atau fragmen Android. Karena callback siklus proses NavigationView
didasarkan pada dan dipanggil dalam urutan yang sama dengan callback siklus proses Android,
pengurutan ketat metode NavigationView ini diperlukan. Jika tidak, Anda
mungkin mengalami kebocoran
memori, error
UI, lokasi tidak diperbarui, dan masalah lainnya.
Untuk informasi selengkapnya tentang siklus proses aktivitas Android, lihat bagian Konsep siklus proses aktivitas di dokumentasi developer Android.
Tabel berikut menunjukkan kapan metode siklus proses lainnya harus dipanggil, setelah metode siklus proses yang ditentukan:
| Metode siklus proses | Dipanggil di mana dalam siklus proses aktivitas | Dipanggil setelah metode siklus proses yang mana |
|---|---|---|
onConfigurationChanged()
|
Dipanggil saat UI berada di latar depan dan konfigurasi berubah. | Selalu setelah onStart()
|
onTrimMemory()
|
Dipanggil saat aktivitas berada di latar belakang. | Selalu setelah onPause()
|
onSaveInstance()
|
Dipanggil sebelum aktivitas dihancurkan. | Selalu setelah onStop()
|
Jangan panggil metode siklus proses ini beberapa kali tanpa memanggil
metode penutupan yang sesuai terlebih dahulu. Selain itu, perlu diingat bahwa jika beberapa
callback siklus proses Android ini dikelola oleh aplikasi itu sendiri, dan
NavigationView ditambahkan ke fragmen setelah pembuatan atau mulai, aplikasi
harus memanggil metode tertentu dalam urutan yang tepat untuk menginisialisasi
Navigation SDK dengan benar.
Untuk panduan tambahan tentang penggunaan metode ini, lihat aplikasi demo Navigation SDK.
Jika menggunakan NavigationView, panggil peristiwa siklus proses dari aktivitas atau fragmen, bukan keduanya
Untuk mempertahankan urutan ketat metode siklus proses, panggil peristiwa ini dari callback siklus proses aktivitas atau fragmen, yang menerima peristiwa ini secara berurutan. Pendekatan ini memastikan bahwa aplikasi tidak perlu berkoordinasi antara fragmen dan aktivitas serta menyebabkan panggilan duplikat.
Update dari SupportNavigationFragment ke NavigationFragment
Mulai Navigation SDK v8.0.0, NavigationFragment menggantikan
SupportNavigationFragment yang tidak digunakan lagi sebagai penampung fragmen standar untuk
navigasi belokan demi belokan dan tampilan peta.
NavigationFragment mempertahankan paritas API penuh dengan SupportNavigationFragment.
Untuk mengupdate aplikasi, ganti SupportNavigationFragment dengan
NavigationFragment dalam file tata letak XML dan impor kode sumber. Semua tanda tangan metode dan panggilan getSupportFragmentManager() tetap sama.
Memperbarui XML tata letak
Ganti SupportNavigationFragment dengan NavigationFragment di file XML tata letak Anda:
Sebelumnya (v7.x dan yang lebih lama):
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navigation_fragment"
android:name="com.google.android.libraries.navigation.SupportNavigationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Setelah (v8.0.0+):
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navigation_fragment"
android:name="com.google.android.libraries.navigation.NavigationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Jika aplikasi Anda menggunakan FragmentContainerView (direkomendasikan untuk menghosting fragmen),
perbarui atribut android:name:
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navigation_fragment"
android:name="com.google.android.libraries.navigation.NavigationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Mengupdate kode aplikasi
Ganti impor dan transmisi class dalam kode Java atau Kotlin Anda. Karena kedua
class memperluas androidx.fragment.app.Fragment, terus gunakan
getSupportFragmentManager() untuk mencari fragmen:
Sebelumnya (v7.x dan yang lebih lama):
Java
import com.google.android.libraries.navigation.SupportNavigationFragment; public class MainActivity extends AppCompatActivity { private SupportNavigationFragment mNavFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNavFragment = (SupportNavigationFragment) getSupportFragmentManager() .findFragmentById(R.id.navigation_fragment); } }
Kotlin
import com.google.android.libraries.navigation.SupportNavigationFragment class MainActivity : AppCompatActivity() { private lateinit var navFragment: SupportNavigationFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) navFragment = supportFragmentManager .findFragmentById(R.id.navigation_fragment) as SupportNavigationFragment } }
Setelah (v8.0.0+):
Java
import com.google.android.libraries.navigation.NavigationFragment; public class MainActivity extends AppCompatActivity { private NavigationFragment mNavFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNavFragment = (NavigationFragment) getSupportFragmentManager() .findFragmentById(R.id.navigation_fragment); } }
Kotlin
import com.google.android.libraries.navigation.NavigationFragment class MainActivity : AppCompatActivity() { private lateinit var navFragment: NavigationFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) navFragment = supportFragmentManager .findFragmentById(R.id.navigation_fragment) as NavigationFragment } }
Paritas API
Anda tidak perlu melakukan perubahan perilaku lain atau merestrukturisasi kode.
NavigationFragment mendukung semua metode publik, antarmuka pemroses, dan
kontrol UI kustom dari SupportNavigationFragment dengan tanda tangan metode
yang identik (termasuk getMapAsync(), getNavigator(), setEtaCardEnabled(),
dan setStylingOptions()).