Navigation Component — یہ کیا ہے، NavHost اور Navigation Graph

مصنف: IT Sectr اشاعت: 2026-02-22 مطالعے کا وقت: 7 منٹ

Navigation Component ایپ اسکرینوں کے درمیان نیویگیشن کو لاگو کرنے کے لیے Android Jetpack لائبریری ہے۔ یہ جزو فریگمنٹ اسٹیک، ڈیپ لنکس اور آرگیومنٹ پاسنگ کے انتظام کو مرکزی بناتا ہے۔ یہ 2018 سے Jetpack کا حصہ ہے اور Google اسے تمام نئے پروجیکٹس کے لیے تجویز کرتا ہے۔ مزید معلومات کے لیے Google کی سرکاری رہنما پڑھیں۔

اہم نکات

  • Navigation Component — Android اسکرینوں کے درمیان مرکزی نیویگیشن کے لیے Jetpack لائبریری
  • NavGraph — XML وسیلہ جو تمام اسکرینوں اور ان کے درمیان روابط کو بیان کرتا ہے
  • NavHostFragment — Activity لے آؤٹ میں کنٹینر جو موجودہ نیویگیشن اسکرین دکھاتا ہے
  • NavController — نیویگیشن کنٹرول آبجیکٹ: navigate، popBackStack، navigateUp
  • Safe Args — اسکرینوں کے درمیان ٹائپ-محفوظ آرگیومنٹ پاسنگ کے لیے Gradle پلگ ان

Navigation Component کیا ہے؟

Navigation Component ایک Android Jetpack لائبریری (androidx.navigation) ہے جو نیویگیشن کے لیے متحد API فراہم کرتی ہے۔ اس میں تین اہم عناصر شامل ہیں: Navigation Graph (نیویگیشن گراف)، NavHostFragment (اسکرین کنٹینر) اور NavController (ٹرانزیشن کنٹرولر)۔ یہ جزو خود بخود بیک اسٹیک کا انتظام کرتا ہے اور ڈیپ لنکس کو سپورٹ کرتا ہے۔

Navigation Component سے پہلے، ڈویلپر FragmentManager کے ذریعے دستی طور پر فریگمنٹس کا انتظام کرتے تھے۔ اس کے نتیجے میں بکھرا ہوا کوڈ پیدا ہوتا تھا: ہر اسکرین کے اپنے نیویگیشن قواعد تھے، بیک اسٹیک کی حالتیں مختلف تھیں اور ڈیپ لنکس کے لیے علیحدہ نفاذ درکار تھا۔ Navigation Component نے ان منظرناموں کو متحد کیا۔ Google (2026) کے مطابق، یہ لائبریری 90% نئے Android پروجیکٹس میں انسٹال ہے۔

Navigation Component دوسری Jetpack لائبریریوں کے ساتھ ضم ہوتا ہے: LiveData، ViewModel، Material Design۔ یہ XML فریگمنٹس اور Jetpack Compose دونوں کو navigation-compose ایکسٹینشن کے ذریعے سپورٹ کرتا ہے۔ مستحکم ریلیز — 2.8.x (2025)، کم از کم Android ورژن — API 14۔

NavGraph ایک XML وسیلہ (res/navigation/nav_graph.xml) ہے جو ایپ کی تمام اسکرینوں اور ان کے درمیان روابط کی وضاحت کرتا ہے۔ ہر اسکرین ایک منزل (destination) ہے، جو Fragment، Activity یا Composable ہو سکتی ہے۔ منزلوں کے درمیان روابط اعمال (actions) ہیں جو ٹرانزیشن کی سمت متعین کرتے ہیں۔

xml

<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="ہوم"
        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="تفصیلات"
        tools:layout="@layout/fragment_detail">
        <argument android:name="itemId"
            app:argType="integer"
            android:defaultValue="0" />
    </fragment>
</navigation>

startDestination وصف لانچ پر پہلی اسکرین متعین کرتا ہے۔ ایک عمل ہدف کی منزل اور اختیاری اینیمیشنز متعین کرتا ہے۔ آرگیومنٹس اسکرین کو بھیجے گئے پیرامیٹرز — قسم اور ڈیفالٹ ویلیو بیان کرتے ہیں۔

NavHostFragment ایک کنٹینر ہے جو Activity لے آؤٹ میں رکھا جاتا ہے اور موجودہ نیویگیشن اسکرین دکھاتا ہے۔ NavController.navigate() کال کرنے پر NavHostFragment خود بخود فریگمنٹس تبدیل کرتا ہے۔ NavController وہ آبجیکٹ ہے جو نیویگیشن کا انتظام کرتا ہے: ٹرانزیشنز، واپسی اور موجودہ راستے کی جانچ۔

kotlin
// 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 کو AppBar سے جوڑتا ہے
        setupActionBarWithNavController(navController)
    }

    // تفصیلات اسکرین پر جائیں
    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" ایک اہم وصف ہے: یہ سسٹم بیک بٹن کو روکتا ہے اور کنٹرول NavController کو منتقل کرتا ہے۔ NavigationUI NavController کو AppBar، BottomNavigationView، NavigationDrawer سے جوڑنے کی افادیت ہے۔ setupActionBarWithNavController نیسٹڈ اسکرینوں پر بیک ایرو کو فعال کرتا ہے۔

Navigation Component کسٹم ٹرانزیشن اینیمیشنز کو سپورٹ کرتا ہے، جو اعمال میں یا پروگرام کے ذریعے سیٹ کی جاتی ہیں۔ اینیمیشنز چار وصفوں سے متعین ہوتی ہیں: enterAnim (نئی اسکرین کا ظہور)، exitAnim (موجودہ کا غائب ہونا)، popEnterAnim (واپسی پر ظہور) اور popExitAnim (واپسی پر غائب ہونا)۔

xml

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

// اینیمیشن کے ساتھ پروگراماتی ٹرانزیشن
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)

اینیمیشنز FragmentTransaction کی سطح پر Fragment کے ساتھ کام کرتی ہیں۔ Jetpack Compose کے لیے، اینیمیشنز NavOptionsCompat کے ذریعے Compose Animation استعمال کرتے ہوئے سیٹ کی جاتی ہیں۔ Navigation Component اینیمیشن کی قسم پر پابندیاں عائد نہیں کرتا — translate، scale، alpha اور ان کے امتزاج سپورٹ ہیں۔

Safe Args: ٹائپ-محفوظ آرگیومنٹس

Safe Args اسکرینوں کے درمیان ٹائپ-محفوظ ڈیٹا منتقلی کے لیے Gradle پلگ ان ہے۔ پلگ ان NavGraph کا تجزیہ کرتا ہے، مخصوص فیلڈ اقسام کے ساتھ Directions اور Args کلاسیں تیار کرتا ہے۔ قسم کی مطابقت کمپائل ٹائم پر جانچی جاتی ہے — MissingArgumentException ایپ چلنے سے پہلے پکڑی جاتی ہے۔

kotlin
// build.gradle (module)
plugins {
    id 'androidx.navigation.safeargs.kotlin'
}

// Safe Args تیار کرتا ہے: DetailFragmentArgs, HomeFragmentDirections
// HomeFragment میں استعمال:
val action = HomeFragmentDirections
    .actionHomeToDetail(itemId = 42L)
findNavController().navigate(action)

// DetailFragment میں استعمال:
private val args: DetailFragmentArgs by navArgs()
// args.itemId Long قسم کا ہے، null پاس نہیں کیا جا سکتا

override fun onViewCreated(...) {
    super.onViewCreated(...)
    loadItem(args.itemId)
}

navArgs() Fragment یا Activity میں آرگیومنٹس حاصل کرنے کے لیے Kotlin ڈیلیگیٹ ہے۔ پلگ ان پریمیٹیو، سٹرنگز، Parcelable، Serializable، Enum اور اریوں کو سپورٹ کرتا ہے۔ پیچیدہ اشیاء کے لیے، ID پاس کریں اور ViewModel یا ڈیٹا بیس سے لوڈ کریں۔

Deep Link ایک بیرونی لنک ہے جو ایپ کی مخصوص اسکرین کھولتا ہے۔ Navigation Component NavGraph میں app:deepLink وصف کے ذریعے ڈیپ لنکس کو ہینڈل کرتا ہے۔ سسٹم ایک PendingIntent بناتا ہے جو نیویگیشن اسٹیک کو ہدف اسکرین تک بحال کرتا ہے، یا اگر ایپ نہیں چل رہی تو نیا اسٹیک بناتا ہے۔

xml

<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 کی پروگراماتی تخلیق
val pendingIntent = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.profileFragment)
    .setArguments(Bundle().apply {
        putString("userId", "user_123")
    })
    .createPendingIntent()

ڈیپ لنکس راستوں اور استفسار پیرامیٹرز کے ساتھ URI پیٹرن، intent action اور mime قسم کو سپورٹ کرتے ہیں۔ پلیس ہولڈرز ({userId}) خود بخود منزل آرگیومنٹس سے میپ ہوتے ہیں۔ Navigation Component AndroidManifest کے ذریعے مضمر ڈیپ لنکس بھی ہینڈل کرتا ہے — بس NavHostFragment والی Activity میں intent-filter شامل کریں۔

Navigation Compose (androidx.navigation:navigation-compose) Jetpack Compose کے لیے Navigation Component کی توسیع ہے۔ API NavController اور NavHost کے تصور کو محفوظ رکھتا ہے، لیکن اسکرینیں Fragment کی بجائے Composable فنکشنز ہیں۔ NavHost ہر راستے کے لیے ایک composable لیمبڈا قبول کرتا ہے۔

kotlin
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 ids کی بجائے سٹرنگ راستے استعمال کرتا ہے۔ پیرامیٹرز راستے کے ٹیمپلیٹ ("detail/{itemId}") کے ذریعے بھیجے جاتے ہیں اور backStackEntry سے نکالے جاتے ہیں۔ rememberNavController() دوبارہ ترتیب کے دوران NavController کو محفوظ رکھتا ہے۔ Compose میں قسم کی حفاظت کے لیے، navigation-compose-type-safety ماڈیول (تجرباتی) تجویز کیا جاتا ہے۔

اکثر پوچھے گئے سوالات

Navigation Component میں NavHost کیا ہے؟

NavHost نیویگیشن اسکرینوں کو دکھانے کے لیے ایک کنٹینر ہے۔ یہ XML لے آؤٹ میں NavHostFragment کے ذریعے لاگو ہوتا ہے۔ NavHost NavGraph میں موجودہ اسکرین کو ٹریک کرتا ہے اور ٹرانزیشنز کا انتظام کرتا ہے۔ ہر Activity میں ایک NavHostFragment ہوتا ہے۔

Safe Args Bundle سے بہتر کیسے ہے؟

Safe Args ایک Gradle پلگ ان ہے جو ٹائپ-محفوظ آرگیومنٹ کلاسیں تیار کرتا ہے۔ Bundle میں دستی طور پر کنجیوں اور اقسام کی وضاحت درکار ہوتی ہے، جو رن ٹائم خرابیوں کا باعث بنتی ہے۔ Safe Args کمپائل ٹائم پر اقسام کی جانچ کرتا ہے اور خود بخود ڈیٹا کو سیریلائز کرتا ہے۔

Navigation Component کے ذریعے پیچیدہ اشیاء کیسے پاس کریں؟

پیچیدہ اشیاء ViewModel (اسکرینوں کے درمیان مشترک) کے ذریعے یا ID پاس کرکے ڈیٹا بیس کے ذریعے بھیجی جاتی ہیں۔ Safe Args صرف پریمیٹیو، سٹرنگز اور Parcelable کو سپورٹ کرتا ہے۔ Google نیویگیشن آرگیومنٹس کے ذریعے بڑی اشیاء پاس کرنے سے گریز کرنے کی تجویز کرتا ہے۔

Navigation Component میں Deep Link کیسے کام کرتا ہے؟

Deep Link NavGraph میں app:deepLink وصف کے ذریعے ترتیب دیا جاتا ہے۔ Navigation Component خود بخود آنے والے لنکس کو ہینڈل کرتا ہے، NavDeepLinkBuilder کے ذریعے PendingIntent بناتا ہے اور نیویگیشن اسٹیک کو ہدف اسکرین تک بحال کرتا ہے۔ URI، intent action اور mime قسم کو سپورٹ کرتا ہے۔

کیا Navigation Component Jetpack Compose کے ساتھ استعمال کیا جا سکتا ہے؟

جی ہاں۔ Navigation Compose (androidx.navigation:navigation-compose) Compose کے لیے NavHost فراہم کرتا ہے۔ API XML ورژن سے ملتا جلتا ہے، لیکن اسکرینیں Composable فنکشنز ہیں۔ NavController دونوں ورژنز میں یکساں استعمال ہوتا ہے۔ Google نئے Compose پروجیکٹس کے لیے Navigation Compose تجویز کرتا ہے۔

خلاصہ

  • Navigation Component — NavController، NavHost اور NavGraph کے ساتھ مرکزی نیویگیشن کے لیے Android Jetpack لائبریری
  • NavGraph — XML گراف جو تمام اسکرینوں (منزلوں) اور ان کے درمیان روابط (اعمال) کو بیان کرتا ہے
  • NavHostFragment — Activity لے آؤٹ میں کنٹینر جو بیک بٹن کے لیے defaultNavHost وصف کو سپورٹ کرتا ہے
  • Safe Args — کمپائل ٹائم پر قسم کی جانچ کے ساتھ ٹائپ-محفوظ آرگیومنٹ پاسنگ کے لیے Gradle پلگ ان
  • ڈیپ لنکس URI، intent action اور mime قسم کو خودکار نیویگیشن اسٹیک بحالی کے ساتھ سپورٹ کرتے ہیں
  • Navigation Compose — سٹرنگ راستوں اور composable اسکرینوں کے ساتھ Jetpack Compose توسیع
  • Navigation Component نئے Android پروجیکٹس میں Google کی تجویز کردہ واحد نیویگیشن طریقہ ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں