Navigation Component অ্যাপ স্ক্রিনের মধ্যে নেভিগেশন বাস্তবায়নের জন্য Android Jetpack লাইব্রেরি। উপাদানটি ফ্র্যাগমেন্ট স্ট্যাক, ডিপ লিংক এবং আর্গুমেন্ট পাসিং ব্যবস্থাপনা কেন্দ্রীভূত করে। এটি 2018 সাল থেকে Jetpack-এর অংশ এবং Google সমস্ত নতুন প্রকল্পের জন্য এটি সুপারিশ করে। আরও জানতে Google-এর অফিসিয়াল গাইড পড়ুন।
মূল বিষয়
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 হতে পারে। গন্তব্যগুলির মধ্যে সংযোগগুলি হলো অ্যাকশন যা ট্রানজিশনের দিক নির্ধারণ করে।
<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 হল অবজেক্ট যা নেভিগেশন পরিচালনা করে: ট্রানজিশন, ফিরে যাওয়া এবং বর্তমান রুট পরীক্ষা করা।
// 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 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 স্ক্রিনের মধ্যে টাইপ-নিরাপদ ডেটা স্থানান্তরের জন্য Gradle প্লাগইন। প্লাগইন NavGraph বিশ্লেষণ করে, নির্দিষ্ট ফিল্ড টাইপ সহ Directions এবং Args ক্লাস তৈরি করে। টাইপ ম্যাচিং কম্পাইল টাইমে পরীক্ষা করা হয় — অ্যাপ চালানোর আগেই MissingArgumentException ধরা পড়ে।
// 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 এবং অ্যারে সমর্থন করে। জটিল অবজেক্টের জন্য, আইডি পাস করুন এবং ViewModel বা ডেটাবেস থেকে লোড করুন।
Deep Link একটি বাহ্যিক লিংক যা অ্যাপের নির্দিষ্ট স্ক্রিন খোলে। Navigation Component NavGraph-এ app:deepLink অ্যাট্রিবিউটের মাধ্যমে ডিপ লিংক পরিচালনা করে। সিস্টেম একটি PendingIntent তৈরি করে যা নেভিগেশন স্ট্যাক লক্ষ্য স্ক্রিনে পুনরুদ্ধার করে, বা অ্যাপ না চললে নতুন স্ট্যাক তৈরি করে।
<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 type সমর্থন করে। প্লেসহোল্ডার ({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 ল্যাম্বডা গ্রহণ করে।
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 মডিউল (পরীক্ষামূলক) সুপারিশ করা হয়।
সচরাচর জিজ্ঞাসা
NavHost নেভিগেশন স্ক্রিন প্রদর্শনের জন্য কন্টেইনার। এটি XML লেআউটে NavHostFragment-এর মাধ্যমে বাস্তবায়িত হয়। NavHost NavGraph-এ বর্তমান স্ক্রিন ট্র্যাক করে এবং ট্রানজিশন পরিচালনা করে। প্রতিটি Activity-তে একটি NavHostFragment থাকে।
Safe Args একটি Gradle প্লাগইন যা টাইপ-নিরাপদ আর্গুমেন্ট ক্লাস তৈরি করে। Bundle-তে ম্যানুয়ালি কী এবং টাইপ নির্দিষ্ট করা প্রয়োজন, যা রানটাইম ত্রুটির দিকে নিয়ে যায়। Safe Args কম্পাইল টাইমে টাইপ পরীক্ষা করে এবং স্বয়ংক্রিয়ভাবে ডেটা সিরিয়ালাইজ করে।
জটিল অবজেক্ট ViewModel (স্ক্রিনের মধ্যে ভাগ করা) বা আইডি পাস করে ডেটাবেসের মাধ্যমে পাঠানো হয়। Safe Args শুধুমাত্র প্রিমিটিভ, স্ট্রিং এবং Parcelable সমর্থন করে। Google নেভিগেশন আর্গুমেন্টের মাধ্যমে বড় অবজেক্ট পাঠানো এড়াতে সুপারিশ করে।
Deep Link NavGraph-এ app:deepLink অ্যাট্রিবিউটের মাধ্যমে কনফিগার করা হয়। Navigation Component স্বয়ংক্রিয়ভাবে ইনকামিং লিংক পরিচালনা করে, NavDeepLinkBuilder-এর মাধ্যমে PendingIntent তৈরি করে এবং নেভিগেশন স্ট্যাক লক্ষ্য স্ক্রিনে পুনরুদ্ধার করে। URI, intent action এবং mime type সমর্থন করে।
হ্যাঁ। Navigation Compose (androidx.navigation:navigation-compose) Compose-এর জন্য NavHost প্রদান করে। API XML সংস্করণের মতো, কিন্তু স্ক্রিন Composable ফাংশন। NavController উভয় সংস্করণে একইভাবে ব্যবহৃত হয়। Google নতুন Compose প্রকল্পের জন্য Navigation Compose সুপারিশ করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন