0Pricing
Android Academy · Pelajaran

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.xml

Tumpukan 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.xml visual — tujuan + tindakan
  • NavHostFragment dalam tata letak Activity
  • findNavController().navigate(actionId) untuk berpindah antar-layar
  • Safe Args — penerusan argumen dengan tipe aman (tanpa konversi tipe dan tanpa kesalahan ketik)
  • setupActionBarWithNavController() — tombol ke atas otomatis
  • setupWithNavController() — 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

  1. ViewModel & LiveData
  2. Basis Data Room
  3. Coroutine & Fungsi Suspend
  4. Pola Repository
  5. Komponen Navigasi
  6. Dependency Injection dengan Hilt
← Kembali ke Android Academy