Navigation Component — ilova ekranlari o'rtasida navigatsiyani amalga oshirish uchun Android Jetpack kutubxonasi. Komponent fragmentlar stekini, chuqur havolalarni va argumentlarni uzatishni boshqarishni markazlashtiradi. 2018-yildan beri Jetpack tarkibiga kiradi va Google tomonidan barcha yangi loyihalar uchun tavsiya etiladi. Batafsil ma'lumot uchun Google rasmiy qo'llanmasiga qarang.
Asosiy ma'lumotlar
Navigation Component — navigatsiya uchun yagona API ta'minlovchi Android Jetpack (androidx.navigation) kutubxonasi. Uchta asosiy elementni o'z ichiga oladi: Navigation Graph (navigatsiya grafi), NavHostFragment (ekranlar uchun konteyner) va NavController (o'tish kontrolleri). Komponent avtomatik ravishda back stack-ni boshqaradi va deep links-ni qo'llab-quvvatlaydi.
Navigation Component-dan oldin dasturchilar fragmentlarni FragmentManager orqali qo'lda boshqarardilar. Bu parchalangan kodga olib keldi: har bir ekran o'z navigatsiya qoidalariga ega edi, back stack holatlari farq qilardi, deep links alohida amalga oshirishni talab qilardi. Navigation Component bu stsenariylarni birlashtirdi. Google ma'lumotlariga ko'ra (2026), kutubxona yangi Android loyihalarining 90 foizida o'rnatilgan.
Navigation Component boshqa Jetpack kutubxonalari bilan integratsiyalanadi: LiveData, ViewModel, Material Design. XML fragmentlarni ham, navigation-compose kengaytmasi orqali Jetpack Compose-ni ham qo'llab-quvvatlaydi. Barqaror versiya — 2.8.x (2025), minimal Android versiyasi — API 14.
NavGraph — ilovaning barcha ekranlari va ular orasidagi bog'lanishlarni belgilaydigan XML resurs (res/navigation/nav_graph.xml). Har bir ekran Fragment, Activity yoki Composable bo'lishi mumkin bo'lgan tugun (destination) hisoblanadi. Tugunlar orasidagi bog'lanishlar action deb ataladi va o'tish yo'nalishini belgilaydi.
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@+id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name=".HomeFragment"
android:label="Bosh sahifa"
tools:layout="@layout/fragment_home">
<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" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name=".DetailFragment"
android:label="Tafsilotlar"
tools:layout="@layout/fragment_detail">
<argument android:name="itemId"
app:argType="integer"
android:defaultValue="0" />
</fragment>
</navigation>startDestination atributi ishga tushirilganda ko'rsatiladigan birinchi ekranni belgilaydi. Action maqsadli destination-ni va ixtiyoriy animatsiyalarni aniqlaydi. Argumentlar (argument) ekranga uzatiladigan parametrlarni — turi va standart qiymatini tavsiflaydi.
NavHostFragment — Activity layout-iga joylashtiriladigan va joriy navigatsiya ekranini ko'rsatadigan konteyner. NavHostFragment NavController.navigate() chaqirilganda avtomatik ravishda fragmentlarni almashtiradi. NavController — navigatsiyani boshqaradigan obyekt: o'tish, qaytish, joriy marshrutni tekshirish.
// Layout Activity: activity_main.xml
// <androidx.fragment.app.FragmentContainerView
// android:id="@+id/nav_host_fragment"
// android:name="androidx.navigation.fragment.NavHostFragment"
// app:navGraph="@navigation/nav_graph"
// app:defaultNavHost="true" />
class MainActivity : AppCompatActivity() {
private val navController by lazy {
(findViewById<NavHostFragment>(R.id.nav_host_fragment))
.navController
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// NavigationUI NavController-ni AppBar bilan bog'laydi
setupActionBarWithNavController(navController)
}
// Tafsilot ekraniga o'tish
fun openDetail(itemId: Long) {
val bundle = Bundle().apply {
putLong("itemId", itemId)
}
navController.navigate(R.id.action_home_to_detail, bundle)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}app:defaultNavHost="true" — muhim atribut: tizimning "Orqaga" tugmasini ushlab qoladi va boshqaruvni NavController-ga uzatadi. NavigationUI — NavController-ni AppBar, BottomNavigationView, NavigationDrawer bilan bog'lash vositasi. setupActionBarWithNavController ichki ekranlarda "Yuqoriga" strelkasini faollashtiradi.
Navigation Component action-da yoki dasturiy ravishda belgilanadigan maxsus o'tish animatsiyalarini qo'llab-quvvatlaydi. Animatsiyalar to'rtta atribut bilan aniqlanadi: enterAnim (yangi ekranning paydo bo'lishi), exitAnim (joriy ekranning yo'qolishi), popEnterAnim (qaytishda paydo bo'lish) va popExitAnim (qaytishda yo'qolish).
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%"
android:toXDelta="0%"
android:duration="300" />
</set>
// Animatsiya bilan dasturiy o'tish
val navOptions = NavOptions.Builder()
.setEnterAnim(R.anim.slide_in_right)
.setExitAnim(R.anim.slide_out_left)
.setPopEnterAnim(R.anim.slide_in_left)
.setPopExitAnim(R.anim.slide_out_right)
.build()
navController.navigate(R.id.detailFragment, args, navOptions)Animatsiyalar FragmentTransaction darajasida Fragment bilan ishlaydi. Jetpack Compose uchun animatsiyalar NavOptionsCompat orqali Compose Animation yordamida belgilanadi. Navigation Component animatsiya turiga cheklov qo'ymaydi — translate, scale, alpha va ularning kombinatsiyalari qo'llab-quvvatlanadi.
Safe Args — ekranlar o'rtasida tip-xavfsiz ma'lumot uzatish uchun Gradle plagini. Plagin NavGraph-ni tahlil qiladi, aniq tur maydonlariga ega Directions va Args sinflarini yaratadi. Kompilyatsiya bosqichida turlarning mosligi tekshiriladi — MissingArgumentException xatosi ilova ishga tushirilishidan oldin aniqlanadi.
// build.gradle (module)
plugins {
id 'androidx.navigation.safeargs.kotlin'
}
// Safe Args yaratadi: DetailFragmentArgs, HomeFragmentDirections
// HomeFragment-da ishlatish:
val action = HomeFragmentDirections
.actionHomeToDetail(itemId = 42L)
findNavController().navigate(action)
// DetailFragment-da ishlatish:
private val args: DetailFragmentArgs by navArgs()
// args.itemId Long turiga ega, null uzatilmaydi
override fun onViewCreated(...) {
super.onViewCreated(...)
loadItem(args.itemId)
}navArgs() — Fragment yoki Activity-da argumentlarni olish uchun Kotlin delegati. Plagin primitivlarni, satrlarni, Parcelable, Serializable, Enum va massivlarni qo'llab-quvvatlaydi. Murakkab obyektlar uchun ViewModel yoki ma'lumotlar bazasidan yuklash bilan ID uzatishdan foydalaning.
Deep Link — ilovaning muayyan ekranini ochadigan tashqi havola. Navigation Component deep link-larni NavGraph-dagi app:deepLink atributi orqali boshqaradi. Tizim maqsadli ekrangacha navigatsiya stekini tiklaydigan yoki ilova ishga tushirilmagan bo'lsa yangi stek yaratadigan PendingIntent yaratadi.
<fragment android:id="@+id/profileFragment"
android:name=".ProfileFragment">
<deepLink
app:uri="https://example.com/profile/{userId}" />
<argument
android:name="userId"
app:argType="string" />
</fragment>
// Deep Link-ni dasturiy yaratish
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.profileFragment)
.setArguments(Bundle().apply {
putString("userId", "user_123")
})
.createPendingIntent()Deep Links yo'llar va query parametrlari bilan URI shablonlarini, intent action va mime type-ni qo'llab-quvvatlaydi. Placeholder ({userId}) avtomatik ravishda destination argumenti bilan moslashtiriladi. Navigation Component shuningdek AndroidManifest orqali implicit deep link-larni ham boshqaradi — NavHostFragment bilan Activity-ga intent-filter qo'shish kifoya.
Navigation Compose (androidx.navigation:navigation-compose) — Jetpack Compose uchun Navigation Component kengaytmasi. API NavController va NavHost kontseptsiyasini saqlaydi, lekin ekranlar Fragment o'rniga Composable funksiyalardir. NavHost har bir marshrut uchun composable lambda qabul qiladi.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyAppTheme {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "home"
) {
composable("home") {
HomeScreen(
onItemClick = { id ->
navController.navigate("detail/$id")
}
)
}
composable(
route = "detail/{itemId}",
arguments = listOf(
navArgument("itemId") {
type = NavType.LongType
}
)
) { backStackEntry ->
val itemId = backStackEntry
.arguments?.getLong("itemId") ?: 0L
DetailScreen(itemId = itemId)
}
}
}
}
}
}Navigation Compose id o'rniga satr marshrutlaridan foydalanadi. Parametrlar route shabloni ("detail/{itemId}") orqali uzatiladi va backStackEntry-dan olinadi. rememberNavController() rekompozitsiya vaqtida NavController-ni saqlaydi. Compose-da Type Safety uchun navigation-compose-type-safety moduli tavsiya etiladi (eksperimental).
Tez-tez so'raladigan savollar
NavHost — navigatsiya ekranlarini ko'rsatish uchun konteyner. XML layout-da NavHostFragment orqali amalga oshiriladi. NavHost NavGraph-dagi joriy ekranni kuzatib boradi va o'tishlarni boshqaradi. Har bir Activity bitta NavHostFragment-ni o'z ichiga oladi.
Safe Args — tip-xavfsiz argument sinflarini yaratadigan Gradle plagini. Bundle kalitlar va turlarni qo'lda ko'rsatishni talab qiladi, bu esa ish vaqtida xatolarga olib keladi. Safe Args turlarni kompilyatsiya bosqichida tekshiradi va ma'lumotlarni avtomatik ravishda seriyalashtiradi.
Murakkab obyektlar ViewModel (ekranlar uchun umumiy) yoki ID uzatish bilan ma'lumotlar bazasi orqali uzatiladi. Safe Args faqat primitivlar, satrlar va Parcelable-ni qo'llab-quvvatlaydi. Google navigatsiya argumentlari orqali katta obyektlarni uzatishdan qochishni tavsiya qiladi.
Deep Link NavGraph-da app:deepLink atributi orqali sozlanadi. Navigation Component kiruvchi havolalarni avtomatik boshqaradi, NavDeepLinkBuilder orqali PendingIntent yaratadi va navigatsiya stekini maqsadli ekrangacha tiklaydi. URI, intent action va mime type-ni qo'llab-quvvatlaydi.
Ha. Navigation Compose (androidx.navigation:navigation-compose) Compose uchun NavHost-ni taqdim etadi. API XML versiyasiga o'xshaydi, lekin ekranlar Composable funksiyalardir. NavController ikkala versiyada ham bir xil ishlatiladi. Google Compose-da yangi loyihalar uchun Navigation Compose-ni tavsiya qiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.