قد يتضمّن تطبيقك مهامًا متعدّدة الخطوات للمستخدمين. على سبيل المثال، قد يحتاج تطبيقك إلى توجيه المستخدمين خلال عملية شراء محتوى إضافي أو إعدادات ضبط معقّدة أو تأكيد قرار. تتطلّب كل هذه المهام توجيه المستخدمين خلال خطوة واحدة أو أكثر من الخطوات أو القرارات المنظَّمة.
توفّر مكتبة androidx.leanback المتوقّفة نهائيًا صفوفًا لتنفيذ مهام المستخدمين المتعدّدة الخطوات. تتناول هذه الصفحة كيفية استخدام الفئة GuidedStepSupportFragment
لتوجيه المستخدم خلال سلسلة من القرارات لإنجاز مهمة باستخدام GuidedStepSupportFragment
.
تقديم تفاصيل عن خطوة
يمثّل النوع GuidedStepSupportFragment
خطوة واحدة في سلسلة من الخطوات. من الناحية المرئية، يوفّر عرضًا إرشاديًا يتضمّن قائمة بالإجراءات أو القرارات المحتملة للخطوة.

الشكل 1. مثال على خطوة إرشادية
بالنسبة إلى كل خطوة في مهمتك المتعدّدة الخطوات، وسِّع نطاق GuidedStepSupportFragment
وقدِّم معلومات سياقية حول الخطوة والإجراءات التي يمكن للمستخدم اتّخاذها. يمكنك تجاهل
onCreateGuidance()
وعرض GuidanceStylist.Guidance
جديد
يتضمّن معلومات السياق،
مثل عنوان الخطوة ووصفها ورمزها، كما هو موضّح في المثال التالي:
Kotlin
override fun onCreateGuidance(savedInstanceState: Bundle?): GuidanceStylist.Guidance { return GuidanceStylist.Guidance( getString(R.string.guidedstep_first_title), getString(R.string.guidedstep_first_description), getString(R.string.guidedstep_first_breadcrumb), activity.getDrawable(R.drawable.guidedstep_main_icon_1) ) }
Java
@Override public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) { String title = getString(R.string.guidedstep_first_title); String breadcrumb = getString(R.string.guidedstep_first_breadcrumb); String description = getString(R.string.guidedstep_first_description); Drawable icon = getActivity().getDrawable(R.drawable.guidedstep_main_icon_1); return new GuidanceStylist.Guidance(title, description, breadcrumb, icon); }
أضِف فئة GuidedStepSupportFragment
الفرعية إلى النشاط الذي تريده من خلال استدعاء GuidedStepSupportFragment.add()
في طريقة onCreate()
الخاصة بالنشاط.
إذا كان النشاط يحتوي على GuidedStepSupportFragment
عناصر فقط، استخدِم GuidedStepSupportFragment.addAsRoot()
بدلاً من add()
لإضافة GuidedStepSupportFragment
الأول. يساعد استخدام
addAsRoot()
في ضمان أنّه إذا ضغط المستخدم على زر الرجوع في جهاز التحكّم عن بُعد الخاص بالتلفزيون أثناء مشاهدة
GuidedStepSupportFragment
الأول، سيتم إغلاق كل من
GuidedStepSupportFragment
والنشاط الرئيسي.
ملاحظة: أضِف عناصر GuidedStepSupportFragment
برمجيًا، وليس في ملفات XML الخاصة بالتصميم.
إنشاء إجراءات المستخدمين والتعامل معها
أضِف إجراءات المستخدم من خلال إلغاء
onCreateActions()
.
في عملية الإلغاء، أضِف GuidedAction
جديدًا لكل عنصر من عناصر الإجراء وقدِّم سلسلة الإجراء والوصف والمعرّف. استخدِم
GuidedAction.Builder
لإضافة إجراءات جديدة.
Kotlin
override fun onCreateActions(actions: MutableList<GuidedAction>, savedInstanceState: Bundle?) { super.onCreateActions(actions, savedInstanceState) // Add "Continue" user action for this step actions.add(GuidedAction.Builder() .id(CONTINUE) .title(getString(R.string.guidedstep_continue)) .description(getString(R.string.guidedstep_letsdoit)) .hasNext(true) .build()) ...
Java
@Override public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { // Add "Continue" user action for this step actions.add(new GuidedAction.Builder() .id(CONTINUE) .title(getString(R.string.guidedstep_continue)) .description(getString(R.string.guidedstep_letsdoit)) .hasNext(true) .build()); ...
لا تقتصر الإجراءات على عمليات التحديد بسطر واحد. في ما يلي أنواع إضافية من الإجراءات التي يمكنك إنشاؤها:
-
أضِف إجراء تصنيف المعلومات لتقديم معلومات إضافية عن خيارات المستخدمين من خلال ضبط
infoOnly(true)
. عندما تكون قيمةinfoOnly
صحيحة، لا يمكن للمستخدمين اختيار الإجراء. -
أضِف إجراء نص قابل للتعديل من خلال ضبط
editable(true)
. عندما تكون قيمةeditable
هي "صحيح"، يمكن للمستخدم إدخال نص في إجراء محدّد باستخدام جهاز التحكّم عن بُعد أو لوحة مفاتيح متصلة. يمكنك إلغاءonGuidedActionEditedAndProceed()
للحصول على النص المعدَّل الذي أدخله المستخدم. يمكنك أيضًا إلغاءonGuidedActionEditCanceled()
لمعرفة متى يلغي المستخدم الإدخال. -
أضِف مجموعة من الإجراءات التي تتصرف مثل أزرار الاختيار القابلة للتحديد باستخدام
checkSetId()
مع قيمة معرّف مشتركة لتجميع الإجراءات في مجموعة. تُعتبر جميع الإجراءات في القائمة نفسها والتي تحمل معرّف مجموعة التحقّق نفسه مرتبطة. عندما يختار المستخدم أحد الإجراءات ضمن هذه المجموعة، يتم وضع علامة في مربّع الاختيار الخاص بهذا الإجراء وإزالة العلامة من مربّعات الاختيار الخاصة بجميع الإجراءات الأخرى. -
أضِف إجراء اختيار التاريخ باستخدام
GuidedDatePickerAction.Builder
بدلاً منGuidedAction.Builder
فيonCreateActions()
. استبدِلonGuidedActionEditedAndProceed()
للحصول على قيمة التاريخ المعدَّل التي أدخلها المستخدم. - أضِف إجراءً يستخدم إجراءات فرعية للسماح للمستخدم بالاختيار من قائمة موسّعة من الخيارات. يتم وصف الإجراءات الفرعية في قسم إضافة إجراءات فرعية.
- أضِف إجراء زرّ يظهر على يسار قائمة الإجراءات ويمكن الوصول إليه بسهولة. يتم وصف إجراءات الأزرار في قسم إضافة إجراءات للأزرار.
يمكنك أيضًا إضافة مؤشر مرئي يشير إلى أنّ اختيار إجراء معيّن يؤدي إلى خطوة جديدة من خلال ضبط
hasNext(true)
.
للاطّلاع على جميع السمات المختلفة التي يمكنك ضبطها، راجِع GuidedAction
.
للردّ على الإجراءات، عليك إلغاء
onGuidedActionClicked()
ومعالجة
GuidedAction
. تحديد الإجراء الذي تم اختياره من خلال فحص GuidedAction.getId()
إضافة إجراءات فرعية
قد تتطلّب بعض الإجراءات أن تمنح المستخدم مجموعة إضافية من الخيارات. يمكن أن تحدّد GuidedAction
قائمة بالإجراءات الفرعية التي تظهر كقائمة بالإجراءات الثانوية.

الشكل 2. الإجراءات الفرعية للخطوات الإرشادية
يمكن أن تحتوي قائمة الإجراءات الفرعية على إجراءات عادية أو إجراءات أزرار خيار، ولكن ليس على إجراءات منتقي التاريخ أو إجراءات نص قابل للتعديل. بالإضافة إلى ذلك، لا يمكن أن تتضمّن إجراءات فرعية مجموعة خاصة من الإجراءات الفرعية، لأنّ النظام لا يتيح أكثر من مستوى واحد من الإجراءات الفرعية.
لإضافة إجراءات فرعية، عليك أولاً إنشاء قائمة بعناصر GuidedAction
التي تعمل كإجراءات فرعية وتعبئتها، كما هو موضّح في المثال التالي:
Kotlin
subActions.add(GuidedAction.Builder() .id(SUBACTION1) .title(getString(R.string.guidedstep_subaction1_title)) .description(getString(R.string.guidedstep_subaction1_desc)) .build()) ...
Java
List<GuidedAction> subActions = new ArrayList<GuidedAction>(); subActions.add(new GuidedAction.Builder() .id(SUBACTION1) .title(getString(R.string.guidedstep_subaction1_title)) .description(getString(R.string.guidedstep_subaction1_desc)) .build()); ...
في onCreateActions()
، أنشئ GuidedAction
من المستوى الأعلى يعرض قائمة الإجراءات الفرعية عند تحديده:
Kotlin
... actions.add(GuidedAction.Builder() .id(SUBACTIONS) .title(getString(R.string.guidedstep_subactions_title)) .description(getString(R.string.guidedstep_subactions_desc)) .subActions(subActions) .build()) ...
Java
@Override public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { ... actions.add(new GuidedAction.Builder() .id(SUBACTIONS) .title(getString(R.string.guidedstep_subactions_title)) .description(getString(R.string.guidedstep_subactions_desc)) .subActions(subActions) .build()); ... }
أخيرًا، استجِب لعمليات اختيار الإجراءات الفرعية من خلال إلغاء
onSubGuidedActionClicked()
:
Kotlin
override fun onSubGuidedActionClicked(action: GuidedAction): Boolean { // Check for which action was clicked and handle as needed when(action.id) { SUBACTION1 -> { // Subaction 1 selected } } // Return true to collapse the subactions menu or // false to keep the menu expanded return true }
Java
@Override public boolean onSubGuidedActionClicked(GuidedAction action) { // Check for which action was clicked and handle as needed if (action.getId() == SUBACTION1) { // Subaction 1 selected } // Return true to collapse the subactions menu or // false to keep the menu expanded return true; }
إضافة إجراءات الأزرار
إذا كانت الخطوة الإرشادية تتضمّن قائمة كبيرة بالإجراءات، قد يضطر المستخدمون إلى التنقّل في القائمة للوصول إلى الإجراءات الأكثر استخدامًا. استخدِم إجراءات الأزرار لفصل الإجراءات الشائعة الاستخدام عن قائمة الإجراءات. تظهر إجراءات الأزرار بجانب قائمة الإجراءات، ويمكن التنقّل إليها بسهولة.

الشكل 3. إجراءات أزرار الخطوات الإرشادية
يتم إنشاء إجراءات الأزرار والتعامل معها تمامًا مثل الإجراءات العادية، ولكن يتم إنشاء إجراءات الأزرار في onCreateButtonActions()
بدلاً من onCreateActions()
. الردّ على إجراءات الأزرار باللغة
onGuidedActionClicked()
استخدِم إجراءات الأزرار لتنفيذ إجراءات بسيطة، مثل إجراءات التنقّل بين الخطوات. لا تستخدِم إجراء اختيار التاريخ أو إجراءات أخرى قابلة للتعديل كإجراءات للأزرار. بالإضافة إلى ذلك، لا يمكن أن تتضمّن إجراءات الأزرار إجراءات فرعية.
تجميع الخطوات الإرشادية في تسلسل إرشادي
تمثّل GuidedStepSupportFragment
خطوة واحدة. لإنشاء تسلسل مرتّب من الخطوات، عليك تجميع عدة عناصر GuidedStepSupportFragment
معًا باستخدام GuidedStepSupportFragment.add()
لإضافة الخطوة التالية في التسلسل إلى حزمة الأجزاء.
Kotlin
override fun onGuidedActionClicked(action: GuidedAction) { val fm = fragmentManager when(action.id) { CONTINUE -> GuidedStepSupportFragment.add(fm, SecondStepFragment()) } }
Java
@Override public void onGuidedActionClicked(GuidedAction action) { FragmentManager fm = getFragmentManager(); if (action.getId() == CONTINUE) { GuidedStepSupportFragment.add(fm, new SecondStepFragment()); } ...
إذا ضغط المستخدم على زر الرجوع في جهاز التحكّم عن بُعد الخاص بالتلفزيون، سيعرض الجهاز GuidedStepSupportFragment
السابق في حزمة الأجزاء. إذا قدّمت GuidedAction
خاصًا بك يعود إلى الخطوة السابقة، يمكنك تنفيذ السلوك "رجوع" من خلال استدعاء getFragmentManager().popBackStack()
.
إذا كنت بحاجة إلى إعادة المستخدم إلى خطوة أسبق في التسلسل، استخدِم
popBackStackToGuidedStepSupportFragment()
للعودة إلى GuidedStepSupportFragment
معيّن في حزمة الأجزاء.
عندما يكمل المستخدم الخطوة الأخيرة في التسلسل، استخدِم
finishGuidedStepSupportFragments()
لإزالة جميع
GuidedStepSupportFragment
مثيلات
من الحزمة الحالية والعودة إلى النشاط الأصلي الرئيسي. إذا تمت إضافة GuidedStepSupportFragment
الأولى باستخدام addAsRoot()
، سيؤدي استدعاء finishGuidedStepSupportFragments()
أيضًا إلى إغلاق النشاط الرئيسي.
تخصيص طريقة عرض الخطوات
يمكن لفئة GuidedStepSupportFragment
استخدام نُسُق مخصّصة تتحكّم في جوانب العرض التقديمي، مثل تنسيق نص العنوان أو الرسوم المتحركة لانتقال الخطوات. يجب أن تستند السمات المخصّصة إلى Theme_Leanback_GuidedStep
، ويمكنها توفير قيم بديلة للسمات المحدّدة في GuidanceStylist
وGuidedActionsStylist
.
لتطبيق مظهر مخصّص على GuidedStepSupportFragment
،
اتّبِع أحد الإجراءَين التاليَين:
-
طبِّق المظهر على النشاط الرئيسي من خلال ضبط السمة
android:theme
على عنصر النشاط في ملف بيان Android. يؤدي ضبط هذه السمة إلى تطبيق المظهر على جميع طرق العرض الفرعية، وهي الطريقة الأسهل لتطبيق مظهر مخصّص إذا كان النشاط الرئيسي يحتوي على عناصرGuidedStepSupportFragment
فقط. -
إذا كان نشاطك يستخدم مظهرًا مخصّصًا وكنت لا تريد تطبيق أنماط
GuidedStepSupportFragment
على طرق العرض الأخرى في النشاط، أضِف السمةLeanbackGuidedStepTheme_guidedStepTheme
إلى مظهر النشاط المخصّص الحالي. تشير هذه السمة إلى المظهر المخصّص الذي تستخدمه عناصرGuidedStepSupportFragment
فقط في نشاطك. -
إذا كنت تستخدم عناصر
GuidedStepSupportFragment
في أنشطة مختلفة تشكّل جزءًا من مهمة شاملة متعدّدة الخطوات، وأردت استخدام مظهر مرئي متّسق في جميع الخطوات، يمكنك تجاهلGuidedStepSupportFragment.onProvideTheme()
وعرض المظهر المخصّص.
لمزيد من المعلومات حول كيفية إضافة الأنماط والمظاهر، راجِع الأنماط والمظاهر.
تستخدم الفئة GuidedStepSupportFragment
فئات مصمّمة خاصة للوصول إلى سمات المظهر وتطبيقها.
تستخدم الفئة GuidanceStylist
معلومات المظهر
للتحكّم في عرض طريقة العرض الإرشادية اليسرى، بينما تستخدم الفئة
GuidedActionsStylist
معلومات المظهر
للتحكّم في عرض طريقة عرض الإجراءات اليمنى.
لتخصيص النمط المرئي للخطوات بشكل يتجاوز ما يوفّره تخصيص المظهر، يمكنك إنشاء فئة فرعية من
GuidanceStylist
أو
GuidedActionsStylist
وعرض الفئة الفرعية في
GuidedStepSupportFragment.onCreateGuidanceStylist()
أو
GuidedStepSupportFragment.onCreateActionsStylist()
.
للحصول على تفاصيل حول ما يمكنك تخصيصه في هذه الفئات الفرعية، يُرجى الاطّلاع على المستندات حول GuidanceStylist
وGuidedActionsStylist
.