Anda dapat membuat tujuan dari fragmen atau aktivitas yang ada. Anda juga dapat menggunakan Navigation Editor untuk membuat tujuan baru atau membuat placeholder agar nantinya diganti dengan fragmen atau aktivitas.
Membuat tujuan dari fragmen atau aktivitas yang ada
Di Navigation Editor, jika Anda memiliki jenis tujuan yang ada yang ingin Anda tambahkan ke grafik navigasi, klik New Destination , lalu klik tujuan yang sesuai dalam menu drop-down yang muncul.
Sekarang Anda dapat melihat pratinjau dari tujuan dalam tampilan Design bersama dengan XML yang sesuai dalam tampilan Text pada grafik navigasi.
Membuat tujuan fragmen baru
Untuk menambahkan jenis tujuan baru menggunakan Navigation Editor, lakukan hal berikut:
- Di Navigation Editor, klik ikon New Destination
, lalu klik Create new destination.
- Dalam dialog New Android Component yang muncul, buat fragmen Anda. Untuk informasi selengkapnya tentang fragmen, lihat dokumentasi fragmen.
Kembali ke Navigation Editor, perhatikan bahwa Android Studio telah menambahkan tujuan ini ke grafik.
Gambar 1 menunjukkan contoh tujuan dan tujuan placeholder.

Membuat tujuan dari DialogFragment
Jika sudah memiliki DialogFragment
,
Anda dapat menggunakan elemen <dialog>
untuk menambahkan dialog ke grafik navigasi,
seperti yang ditunjukkan pada contoh berikut:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_graph"> ... <dialog android:id="@+id/my_dialog_fragment" android:name="androidx.navigation.myapp.MyDialogFragment"> <argument android:name="myarg" android:defaultValue="@null" /> <action android:id="@+id/myaction" app:destination="@+id/another_destination"/> </dialog> ... </navigation>
Membuat tujuan aktivitas baru
Membuat tujuan Activity
mirip dengan membuat tujuan
Fragment
. Namun,
sifat tujuan Activity
sangat berbeda.
Secara default, library Navigasi melampirkan
NavController
ke tata letak Activity
, dan grafik navigasi aktif tercakup ke Activity
yang aktif. Jika pengguna membuka Activity
yang berbeda,
grafik navigasi saat ini tidak lagi berada dalam cakupan. Ini berarti tujuan
Activity
harus dianggap sebagai endpoint dalam
grafik navigasi.
Untuk menambahkan tujuan Activity
, tentukan Activity
tujuan dengan nama
class-nya yang sepenuhnya memenuhi syarat:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/sampleActivityDestination" android:name="com.example.android.navigation.activity.DestinationActivity" android:label="@string/sampleActivityTitle" /> </navigation>
XML ini setara dengan panggilan berikut ke startActivity()
:
Kotlin
startActivity(Intent(context, DestinationActivity::class.java))
Java
startActivity(new Intent(context, DestinationActivity.class));
Anda mungkin memiliki kasus saat pendekatan ini tidak sesuai. Misalnya, Anda
mungkin tidak memiliki dependensi waktu kompilasi pada class aktivitas,
atau mungkin lebih memilih level pengalihan melalui intent implisit.
intent-filter
dalam
entri manifes untuk Activity
tujuan menentukan cara Anda perlu menyusun
tujuan Activity
.
Misalnya, pertimbangkan file manifes berikut:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.navigation.activity">
<application>
<activity android:name=".DestinationActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="example.com"
android:scheme="https" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Tujuan Activity
yang sesuai harus dikonfigurasi dengan atribut
action
dan
data
yang cocok dengan yang ada dalam entri manifes:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:data="https://example.com" app:targetPackage="${applicationId}" /> </navigation>
Menentukan
targetPackage
ke
applicationId
saat ini akan membatasi cakupan ke
aplikasi saat ini, yang mencakup aplikasi utama.
Mekanisme yang sama dapat digunakan untuk kasus saat Anda ingin aplikasi
tertentu menjadi tujuannya. Contoh berikut menentukan tujuan untuk menjadi aplikasi
dengan applicationId
com.example.android.another.app
.
<?xml version="1.0" encoding="utf-8"?>` <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:data="https://example.com" app:targetPackage="com.example.android.another.app" /> </navigation>
Argumen dinamis
Contoh sebelumnya menggunakan URL tetap untuk menavigasi ke tujuan. Anda
mungkin juga perlu mendukung URL dinamis tempat info tambahan dikirimkan
sebagai bagian dari URL. Misalnya, Anda dapat mengirim ID Pengguna dalam URL dengan format
yang mirip dengan https://example.com?userId=<actual user ID>
.
Dalam hal ini, gunakan
dataPattern
,
bukan atribut
data
.
Selanjutnya, Anda dapat menyediakan argumen untuk diganti dengan placeholder yang disebutkan dalam
nilai dataPattern
:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:dataPattern="https://example.com?userId={userId}" app:targetPackage="com.example.android.another.app"> <argument android:name="userId" app:argType="string" /> </activity> </navigation>
Dalam contoh ini, Anda dapat menentukan nilai userId
menggunakan
Safe Args atau dengan
Bundle
:
Kotlin
navController.navigate( R.id.localDestinationActivity, bundleOf("userId" to "someUser") )
Java
Bundle args = new Bundle(); args.putString("userId", "someUser"); navController.navigate(R.id.localDestinationActivity, args);
Contoh ini menggantikan someUser
dengan {userId}
dan membuat nilai URI
https://example.com?userId=someUser
.
Tujuan placeholder
Anda dapat menggunakan placeholder untuk merepresentasikan tujuan yang tidak diterapkan. Placeholder berfungsi sebagai representasi visual dari suatu tujuan. Dalam Navigation Editor, Anda dapat menggunakan placeholder seperti yang Anda lakukan pada tujuan lainnya.