0Pricing
Android Academy · Ders

Navigation Bileşeni

Görsel bir NavGraph, tür güvenli bağımsız değişkenler için Safe Args, NavController ve derin bağlantı desteğiyle çok ekranlı gezinmeyi yönetin.

Navigation Bileşeni, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 5. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.

Navigation Component Nedir?

Navigation Component, parça gezinmesini, geri yığınını, derin bağlantıları ve geçiş animasyonlarını tek bir görsel grafikte yöneten bir Android Jetpack kütüphanesidir.

Temel faydaları:

  • Android Studio'da görsel gezinme grafiği
  • Tür güvenli bağımsız değişken aktarımı (Safe Args)
  • Otomatik geri yığını yönetimi
  • Yerleşik derin bağlantı desteği

Kurulum: Bağımlılıklar

app/build.gradle dosyasına ekleyin:

// 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'
}

Gezinme Grafiği (nav_graph.xml)

res/navigation/nav_graph.xml dosyasını oluşturun. Bu dosya hedefleri (fragment'ları) ve eylemleri (gezinme yollarını) tanımlar:

<!-- 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>

Activity Düzeninde NavHostFragment

FrameLayout kapsayıcısını NavHostFragment ile değiştirin. Bu bileşen, tüm gezinme hedefleri için bir ana bilgisayar görevi görür:

<!-- 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 — Fragment'lar Arasında Gezinme

Bir NavController alın ve bir eylem kimliğiyle navigate() çağrısını yapın:

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 — Tür Güvenli Bağımsız Değişkenler

Safe Args, dönüştürme işlemi veya anahtar yazım hataları olmadan fragment'lar arasında bağımsız değişken aktarmak için sınıflar oluşturur:

// 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)
    }
}

Üst Düzeye Gezinme

Otomatik geri gezinme için Toolbar'ın üst düzey düğmesini NavController'a bağlayın:

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()
    }
}

NavController ile Alt Gezinme

Bir BottomNavigationView bileşenini NavController'a bağlayın — sekme seçimini ve geri yığınını otomatik olarak yönetir:

// 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

Geri Yığınını Açma

Program aracılığıyla geri gidin veya belirli bir hedefe gidin:

// 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()
)

Derin Bağlantılar

Uygulamanızın bir URL'den açılabilmesi için bir hedefe derin bağlantı ekleyin:

<!-- 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>

Fragment'lar Arasındaki Geçişler

Gezinme grafiğindeki eylemlere özel animasyonlar ekleyin:

<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" />

Kısa Kontrol

Otomatik sekme yönetimi için BottomNavigationView menü öğesi kimliği ile gezinme grafiğindeki ne eşleşmelidir?

Özet: Navigation Component

Navigation Component, birden fazla ekran içeren uygulamaları basitleştirir:

  • Görsel nav_graph.xml — hedefler + eylemler
  • Activity düzeninde NavHostFragment
  • Ekranlar arasında geçiş yapmak için findNavController().navigate(actionId)
  • Safe Args — tür güvenli bağımsız değişken aktarımı (dönüştürme ve yazım hatası yok)
  • setupActionBarWithNavController() — otomatik Üst düğmesi
  • setupWithNavController() — otomatik BottomNavigationView

Sırada: temiz mimari için Hilt ile Bağımlılık Enjeksiyonu ekleme.

Sıkça Sorulan Sorular

“Navigation Bileşeni” dersi ücretsiz mi?

Evet — “Navigation Bileşeni” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.

“Navigation Bileşeni” dersinde ne öğreneceğim?

Görsel bir NavGraph, tür güvenli bağımsız değişkenler için Safe Args, NavController ve derin bağlantı desteğiyle çok ekranlı gezinmeyi yönetin. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 5. dersidir.

“Navigation Bileşeni” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ViewModel ve LiveData
  2. Room Veritabanı
  3. Coroutines ve Suspend Fonksiyonları
  4. Repository Deseni
  5. Navigation Bileşeni
  6. Hilt ile Bağımlılık Enjeksiyonu
← Android Academy Sayfasına Dön