List-detail یک الگوی رابط کاربری است که از یک طرح بندی دو صفحه ای تشکیل شده است که در آن یک صفحه فهرستی از آیتم ها را ارائه می دهد و صفحه دیگری جزئیات موارد انتخاب شده از لیست را نمایش می دهد.
این الگو به ویژه برای برنامههایی مفید است که اطلاعات عمیقی درباره عناصر مجموعههای بزرگ ارائه میدهند، به عنوان مثال، یک سرویس گیرنده ایمیل که فهرستی از ایمیلها و محتوای دقیق هر پیام ایمیل را دارد. فهرست جزئیات همچنین میتواند برای مسیرهای کمتر مهم مانند تقسیم اولویتهای برنامه به فهرستی از دستهها با اولویتهای هر دسته در قسمت جزئیات استفاده شود.


الگوی List-Detail را با NavigableListDetailPaneScaffold
پیاده سازی کنید
NavigableListDetailPaneScaffold
یک قابلیت ترکیب است که اجرای طرح بندی جزئیات لیست را در Jetpack Compose ساده می کند. ListDetailPaneScaffold
را میپیچد و ناوبری داخلی و انیمیشنهای پیشبینیکننده را اضافه میکند.
یک داربست با جزئیات لیست حداکثر از سه صفحه پشتیبانی می کند:
- صفحه فهرست : مجموعه ای از موارد را نمایش می دهد.
- صفحه جزئیات : جزئیات یک مورد انتخاب شده را نشان می دهد.
- صفحه اضافی ( اختیاری ) : در صورت نیاز زمینه اضافی را فراهم می کند.
داربست بر اساس اندازه پنجره سازگار می شود:
- در پنجره های بزرگ، لیست و پنجره های جزئیات در کنار هم ظاهر می شوند.
- در پنجرههای کوچک، تنها یک صفحه در هر زمان قابل مشاهده است، که با حرکت کاربران تغییر میکند.
وابستگی ها را اعلام کنید
NavigableListDetailPaneScaffold
بخشی از کتابخانه ناوبری تطبیقی Material 3 است.
سه وابستگی مرتبط زیر را به فایل build.gradle
برنامه یا ماژول خود اضافه کنید:
کاتلین
implementation("androidx.compose.material3.adaptive:adaptive") implementation("androidx.compose.material3.adaptive:adaptive-layout") implementation("androidx.compose.material3.adaptive:adaptive-navigation")
شیار
implementation 'androidx.compose.material3.adaptive:adaptive' implementation 'androidx.compose.material3.adaptive:adaptive-layout' implementation 'androidx.compose.material3.adaptive:adaptive-navigation'
- تطبیقی: بلوکهای ساختمانی سطح پایین مانند
HingeInfo
وPosture
- تطبیقبندی: طرحبندیهای تطبیقی مانند
ListDetailPaneScaffold
وSupportingPaneScaffold
- adaptive-navigation: قابلیت های Composable برای پیمایش درون و بین پنجره ها و همچنین طرح بندی های تطبیقی که به طور پیش فرض از ناوبری پشتیبانی می کنند مانند
NavigableListDetailPaneScaffold
وNavigableSupportingPaneScaffold
مطمئن شوید که پروژه شما شامل compose-material3-adaptive نسخه 1.1.0-beta1 یا بالاتر باشد.
ژست برگشتی پیشبینیکننده را انتخاب کنید
برای فعال کردن انیمیشنهای پیشبینیکننده پیشبینی در Android 15 یا پایینتر، باید برای پشتیبانی از حرکت پیشبینیکننده برگشت شرکت کنید. برای شرکت کردن، android:enableOnBackInvokedCallback="true"
را به تگ <application>
یا تگ های <activity>
فردی در فایل AndroidManifest.xml
خود اضافه کنید. برای اطلاعات بیشتر، شرکت در حرکت پیشگویانه برگشت را ببینید.
هنگامی که برنامه شما Android 16 (سطح API 36) یا بالاتر را هدف قرار داد، پیشبینی بازگشت به طور پیشفرض فعال میشود.
استفاده اساسی
NavigableListDetailPaneScaffold
به صورت زیر پیاده سازی کنید:
- از کلاسی استفاده کنید که محتوای انتخاب شده را نشان دهد. از یک کلاس
Parcelable
برای پشتیبانی از ذخیره و بازیابی آیتم لیست انتخاب شده استفاده کنید. از افزونه kotlin-parcelize برای تولید کد برای شما استفاده کنید. - با
rememberListDetailPaneScaffoldNavigator
یکThreePaneScaffoldNavigator
ایجاد کنید.
این ناوبر برای جابجایی بین لیست، جزئیات و پنجره های اضافی استفاده می شود. با اعلام یک نوع عمومی، ناوبر وضعیت داربست (یعنی MyItem
در حال نمایش) را نیز ردیابی می کند. از آنجایی که این نوع قابل تقسیم است، وضعیت می تواند توسط ناوبر ذخیره و بازیابی شود تا به طور خودکار تغییرات پیکربندی را مدیریت کند.
ناوبر را به
NavigableListDetailPaneScaffold
قابل ترکیب منتقل کنید.پیاده سازی پنجره لیست خود را به
NavigableListDetailPaneScaffold
عرضه کنید. ازAnimatedPane
برای اعمال انیمیشن های صفحه پیش فرض در حین پیمایش استفاده کنید. سپس ازThreePaneScaffoldNavigator
برای رفتن به قسمت جزئیات،ListDetailPaneScaffoldRole.Detail
و نمایش آیتم ارسال شده استفاده کنید.پیاده سازی پنجره جزئیات خود را در
NavigableListDetailPaneScaffold
قرار دهید.
هنگامی که پیمایش کامل شد، currentDestination
شامل قسمتی است که برنامه شما به آن پیمایش کرده است، از جمله محتوای نمایش داده شده در کادر. ویژگی contentKey
همان نوع مشخص شده در تماس اصلی است، بنابراین شما می توانید به هر داده ای که برای نمایش نیاز دارید دسترسی داشته باشید.
- به صورت اختیاری،
defaultBackBehavior
درNavigableListDetailPaneScaffold
تغییر دهید. به طور پیشفرض،NavigableListDetailPaneScaffold
ازPopUntilScaffoldValueChange
برایdefaultBackBehavior
استفاده میکند.
اگر برنامه شما به الگوی پیمایش برگشتی متفاوتی نیاز دارد، میتوانید با مشخص کردن گزینه BackNavigationBehavior
دیگری، این رفتار را لغو کنید.
گزینه های BackNavigationBehavior
بخش زیر از مثال یک برنامه ایمیل با لیستی از ایمیل ها در یک بخش و نمای دقیق در قسمت دیگر استفاده می کند.
PopUntilScaffoldValueChange
(پیشفرض و در بیشتر موارد توصیه میشود)
این رفتار بر تغییرات ساختار طرح کلی تمرکز دارد. در تنظیمات چند صفحه ای، تغییر محتوای ایمیل در قسمت جزئیات، ساختار طرح بندی زیرین را تغییر نمی دهد. بنابراین، دکمه بازگشت ممکن است از برنامه یا نمودار ناوبری فعلی خارج شود زیرا هیچ تغییری در طرح بندی برای بازگشت به آن در زمینه فعلی وجود ندارد. در طرحبندی تکپنجرهای، با فشار دادن به عقب، از تغییرات محتوا در نمای جزئیات عبور میکنید و به نمای فهرست بازمیگردید، زیرا این نشاندهنده تغییر طرحبندی واضح است.
به مثال های زیر توجه کنید:
- Multi-Pane: شما در حال مشاهده یک ایمیل (مورد 1) در قسمت جزئیات هستید. با کلیک بر روی ایمیل دیگر (مورد 2) صفحه جزئیات به روز می شود، اما لیست و پنجره های جزئیات قابل مشاهده هستند. فشار دادن به عقب ممکن است از برنامه یا جریان ناوبری فعلی خارج شود.
- Single-Pane: شما آیتم 1 و سپس آیتم 2 را مشاهده می کنید، با فشار دادن به عقب مستقیماً به صفحه لیست ایمیل باز می گردید.
هنگامی که می خواهید کاربران با هر عمل برگشتی، تغییرات طرح بندی متمایز را درک کنند، از این استفاده کنید.

PopUntilContentChange
این رفتار محتوای نمایش داده شده را در اولویت قرار می دهد. اگر آیتم 1 و سپس آیتم 2 را مشاهده کنید، بدون در نظر گرفتن طرح بندی، با فشردن بازگشت به آیتم 1 باز می گردد.
به مثال های زیر توجه کنید:
- Multi-Pane: مورد 1 را در قسمت جزئیات مشاهده می کنید، سپس روی مورد 2 در لیست کلیک کنید. صفحه جزئیات به روز می شود. با فشار دادن به عقب، صفحه جزئیات به آیتم 1 باز می گردد.
- Single-Pane: همان بازگشت محتوا رخ می دهد.
زمانی که کاربر انتظار دارد با اکشن برگشتی به محتوایی که قبلاً مشاهده کرده است، از این استفاده کنید.

PopUntilCurrentDestinationChange
این رفتار پشته پشتی را باز می کند تا زمانی که مقصد ناوبری فعلی تغییر کند. این به طور یکسان برای طرحبندیهای تک و چند صفحهای صدق میکند.
به مثال های زیر توجه کنید:
صرف نظر از اینکه در یک طرح بندی تک یا چند صفحه ای هستید، با فشار دادن به عقب، فوکوس همیشه از عنصر پیمایش برجسته شده به مقصد قبلی منتقل می شود. در برنامه ایمیل ما، این بدان معنی است که نشانه بصری صفحه انتخاب شده تغییر خواهد کرد.
هنگامی که حفظ یک نشانه بصری واضح از ناوبری فعلی برای تجربه کاربر بسیار مهم است، از این استفاده کنید.

PopLatest
این گزینه فقط آخرین مقصد را از پشت پشتی حذف می کند. از این گزینه برای پیمایش به عقب بدون پرش از حالت های میانی استفاده کنید.
پس از اجرای این مراحل، کد شما باید شبیه به شکل زیر باشد:
val scaffoldNavigator = rememberListDetailPaneScaffoldNavigator<MyItem>() val scope = rememberCoroutineScope() NavigableListDetailPaneScaffold( navigator = scaffoldNavigator, listPane = { AnimatedPane { MyList( onItemClick = { item -> // Navigate to the detail pane with the passed item scope.launch { scaffoldNavigator.navigateTo( ListDetailPaneScaffoldRole.Detail, item ) } }, ) } }, detailPane = { AnimatedPane { // Show the detail pane content if selected item is available scaffoldNavigator.currentDestination?.contentKey?.let { MyDetails(it) } } }, )
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-04-04 بهوقت ساعت هماهنگ جهانی.