Komponen Navigasi
Kelola navigasi multi-layar dengan NavGraph visual, Safe Args untuk argumen yang aman secara tipe, NavController, dan dukungan deep link.
Komponen Navigasi adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 5 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 6 pelajaran total.
Apa Itu Navigation Component?
Navigation Component adalah pustaka Android Jetpack yang mengelola navigasi fragment, tumpukan kembali, tautan langsung, dan animasi transisi dalam satu graf visual.
Manfaat utama:
- Graf navigasi visual di Android Studio
- Penerusan argumen dengan tipe aman (Safe Args)
- Pengelolaan tumpukan kembali secara otomatis
- Dukungan tautan langsung siap pakai
Penyiapan: Dependensi
Tambahkan ke app/build.gradle:
// app/build.gradle
dependencies {
implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7'
implementation 'androidx.navigation:navigation-ui-ktx:2.7.7'
}
// project/build.gradle (for Safe Args):
buildscript {
dependencies {
classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7'
}
}
// app/build.gradle — apply the plugin:
plugins {
id 'androidx.navigation.safeargs.kotlin'
}Graf Navigasi (nav_graph.xml)
Buat res/navigation/nav_graph.xml. Berkas ini mendefinisikan tujuan (fragment) dan tindakan (jalur navigasi):
<!-- res/navigation/nav_graph.xml -->
<navigation
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment">
<action
android:id="@+id/action_home_to_detail"
app:destination="@id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name="com.example.DetailFragment">
<argument
android:name="itemId"
app:argType="integer" />
</fragment>
</navigation>NavHostFragment dalam Tata Letak Activity
Ganti wadah FrameLayout dengan NavHostFragment. Komponen ini berfungsi sebagai host untuk semua tujuan navigasi:
<!-- activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true" />NavController — Menavigasi Antar-Fragment
Dapatkan NavController, lalu panggil navigate() dengan ID tindakan:
class HomeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btnOpenDetail.setOnClickListener {
// Navigate using action ID from nav_graph
findNavController().navigate(R.id.action_home_to_detail)
}
}
}Safe Args — Argumen dengan Tipe Aman
Safe Args menghasilkan kelas untuk meneruskan argumen antar-fragment tanpa konversi tipe atau kesalahan ketik pada kunci:
// In HomeFragment — pass itemId:
binding.btnOpenDetail.setOnClickListener {
val action = HomeFragmentDirections.actionHomeToDetail(itemId = 42)
findNavController().navigate(action)
}
// In DetailFragment — receive itemId:
class DetailFragment : Fragment() {
private val args: DetailFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val id = args.itemId // Int, type-safe
viewModel.loadItem(id)
}
}Navigasi ke Atas
Hubungkan tombol ke atas pada Toolbar ke NavController untuk navigasi kembali secara otomatis:
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.navHostFragment) as NavHostFragment
navController = navHostFragment.navController
// Wire toolbar Up button
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
}Navigasi Bawah dengan NavController
Hubungkan BottomNavigationView ke NavController—komponen ini otomatis menangani pemilihan tab dan tumpukan kembali:
// In Activity.onCreate():
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.navHostFragment) as NavHostFragment
val navController = navHostFragment.navController
// Wire BottomNavigationView
binding.bottomNav.setupWithNavController(navController)
// Each menu item ID must match a fragment destination ID in nav_graph.xmlTumpukan Kembali
Menavigasi kembali secara terprogram atau menuju tujuan tertentu:
// Go back one step
findNavController().popBackStack()
// Navigate back to a specific destination (popping everything on top)
findNavController().popBackStack(R.id.homeFragment, inclusive = false)
// Navigate and clear back stack (e.g., after login)
findNavController().navigate(
R.id.action_login_to_home,
null,
NavOptions.Builder()
.setPopUpTo(R.id.loginFragment, inclusive = true)
.build()
)Tautan Langsung
Tambahkan tautan langsung ke suatu tujuan agar aplikasi dapat dibuka dari URL:
<!-- In nav_graph.xml, inside the destination fragment: -->
<deepLink
android:id="@+id/deepLinkDetail"
app:uri="https://example.com/items/{itemId}" />
<!-- Also add intent-filter in AndroidManifest.xml for the Activity: -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="example.com" />
</intent-filter>Transisi Antar-Fragment
Tambahkan animasi khusus ke tindakan navigasi dalam graf navigasi:
<action
android:id="@+id/action_home_to_detail"
app:destination="@id/detailFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />Pemeriksaan Singkat
Apa yang harus sama antara ID item menu BottomNavigationView dan graf navigasi agar pengelolaan tab otomatis dapat dilakukan?
Ringkasan: Navigation Component
Navigation Component menyederhanakan aplikasi dengan banyak layar:
nav_graph.xmlvisual — tujuan + tindakanNavHostFragmentdalam tata letak ActivityfindNavController().navigate(actionId)untuk berpindah antar-layar- Safe Args — penerusan argumen dengan tipe aman (tanpa konversi tipe dan tanpa kesalahan ketik)
setupActionBarWithNavController()— tombol ke atas otomatissetupWithNavController()— BottomNavigationView otomatis
Berikutnya: tambahkan injeksi dependensi dengan Hilt untuk arsitektur yang rapi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Komponen Navigasi” gratis?
Ya — teks lengkap “Komponen Navigasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 6 pelajaran total.
Apa yang akan aku pelajari di “Komponen Navigasi”?
Kelola navigasi multi-layar dengan NavGraph visual, Safe Args untuk argumen yang aman secara tipe, NavController, dan dukungan deep link. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 5 dari 6.
Berapa lama pelajaran “Komponen Navigasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- ViewModel & LiveData
- Basis Data Room
- Coroutine & Fungsi Suspend
- Pola Repository
- Komponen Navigasi
- Dependency Injection dengan Hilt