ناوبری

ناوبری به تعاملاتی اشاره دارد که به کاربران اجازه می‌دهد در میان بخش‌های مختلف محتوای برنامه شما حرکت کنند، به داخل آن بروند و از آن خارج شوند.

کامپوننت ناوبری اندروید جت‌پک شامل کتابخانه ناوبری ، افزونه Safe Args Gradle و ابزارهایی برای کمک به پیاده‌سازی ناوبری برنامه است. کامپوننت ناوبری موارد استفاده متنوعی از ناوبری را مدیریت می‌کند، از کلیک‌های ساده روی دکمه گرفته تا الگوهای پیچیده‌تر، مانند نوارهای برنامه و کشوی ناوبری.

مفاهیم کلیدی

جدول زیر مروری بر مفاهیم کلیدی در ناوبری و انواع اصلی که برای پیاده‌سازی آنها استفاده می‌کنید، ارائه می‌دهد.

مفهوم

هدف

نوع

میزبان

یک عنصر رابط کاربری که شامل مقصد ناوبری فعلی است. یعنی وقتی کاربر در یک برنامه پیمایش می‌کند، برنامه اساساً مقصدها را به میزبان ناوبری وارد و از آن خارج می‌کند.

نمودار

یک ساختار داده که تمام مقاصد ناوبری درون برنامه و نحوه اتصال آنها به یکدیگر را تعریف می‌کند.

NavGraph

کنترل کننده

هماهنگ‌کننده مرکزی برای مدیریت ناوبری بین مقاصد. این کنترلر متدهایی برای ناوبری بین مقاصد، مدیریت لینک‌های عمیق، مدیریت back stack و موارد دیگر ارائه می‌دهد.

NavController

مقصد

یک گره در گراف ناوبری. وقتی کاربر به این گره هدایت می‌شود، میزبان محتوای آن را نمایش می‌دهد.

NavDestination

معمولاً هنگام ساخت نمودار ناوبری ایجاد می‌شود.

مسیر

به طور منحصر به فرد یک مقصد و هرگونه داده مورد نیاز آن را مشخص می‌کند.

شما می‌توانید با استفاده از مسیرها مسیریابی کنید. مسیرها شما را به مقصدها می‌برند.

هر نوع داده قابل سریال‌سازی.

مزایا و ویژگی‌ها

کامپوننت ناوبری (Navigation) مزایا و ویژگی‌های دیگری از جمله موارد زیر را ارائه می‌دهد:

  • انیمیشن‌ها و انتقال‌ها: منابع استانداردی را برای انیمیشن‌ها و انتقال‌ها فراهم می‌کند.
  • پیوند عمیق: پیوندهای عمیقی را پیاده‌سازی و مدیریت می‌کند که کاربر را مستقیماً به یک مقصد هدایت می‌کنند.
  • الگوهای رابط کاربری: از الگوهایی مانند کشوهای ناوبری و ناوبری پایین با حداقل کار اضافی پشتیبانی می‌کند.
  • ایمنی نوع: شامل پشتیبانی از انتقال داده بین مقاصد با ایمنی نوع است .
  • پشتیبانی از ViewModel: امکان تعیین محدوده یک ViewModel به یک گراف ناوبری را فراهم می‌کند تا داده‌های مربوط به رابط کاربری بین مقاصد گراف به اشتراک گذاشته شود.
  • تراکنش‌های قطعه‌ای: تراکنش‌های قطعه‌ای را به طور کامل پشتیبانی و مدیریت می‌کند.
  • برگشت و بالا: به طور پیش‌فرض اقدامات برگشت و بالا را به درستی انجام می‌دهد.

گزینه‌های چارچوب

کامپوننت ناوبری (Navigation) بسته به معماری رابط کاربری برنامه شما، از دو فریم‌ورک اصلی برای پیاده‌سازی گراف ناوبری شما پشتیبانی می‌کند:

  • نوشتن (Compose) : اگر برنامه شما کاملاً با Jetpack Compose ساخته شده است، از Navigation Compose استفاده کنید. مقاصد در گراف شما، قابل ترکیب (composable) هستند.
  • قطعات : اگر برنامه شما از Views یا ترکیبی از Views و Compose استفاده می‌کند، از کامپوننت ناوبری مبتنی بر Fragment استفاده کنید. مقاصد در گراف شما قطعاتی هستند که می‌توانند میزبان Views استاندارد، محتوای Compose یا ترکیبی از هر دو باشند.

برای برنامه‌هایی که از Views به Compose مهاجرت می‌کنند، استراتژی پیشنهادی این است که در حین تبدیل صفحات نمایش به Compose، به استفاده از کامپوننت Navigation مبتنی بر Fragment ادامه دهید. پس از جایگزینی تمام Fragmentها با Composableها، می‌توانید نمودار ناوبری را به Navigation Compose منتقل کنید.

محیط خود را تنظیم کنید

برای اضافه کردن پشتیبانی ناوبری به پروژه خود، وابستگی‌های زیر را به فایل build.gradle برنامه خود اضافه کنید:

گرووی

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.9.8"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

کاتلین

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.9.8"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

برای اطلاعات بیشتر در مورد افزودن سایر اجزای معماری به پروژه خود، به بخش افزودن اجزا به پروژه خود مراجعه کنید.

مراحل بعدی

برای مستندات و منابع بیشتر مربوط به کامپوننت Navigation، به منابع زیر مراجعه کنید.

راهنماهای دقیق

برای اطلاعات بیشتر در مورد نحوه پیاده‌سازی میزبان ناوبری و NavController و همچنین جزئیات نحوه تعامل آنها با Compose و سایر چارچوب‌های رابط کاربری، به راهنماهای زیر مراجعه کنید:

کدلبز

ویدیوها

نمونه‌ها