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.xmlGeri 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üğmesisetupWithNavController()— 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
- ViewModel ve LiveData
- Room Veritabanı
- Coroutines ve Suspend Fonksiyonları
- Repository Deseni
- Navigation Bileşeni
- Hilt ile Bağımlılık Enjeksiyonu