لنفترض أنك تريد استخدام علامات تبويب شريط الإجراءات كنموذج أساسي للتنقّل على المستوى الأعلى في تطبيقك. لا تتوفّر واجهات برمجة التطبيقات ActionBar
إلا في الإصدار 3.0 من نظام التشغيل Android أو الإصدارات الأحدث (المستوى 11 والإصدارات الأحدث). وبالتالي، إذا أردت توزيع تطبيقك على الأجهزة التي تعمل بإصدارات سابقة من النظام الأساسي، عليك توفير طريقة تنفيذ تتوافق مع واجهة برمجة التطبيقات الأحدث مع توفير آلية احتياطية تستخدم واجهات برمجة تطبيقات قديمة.
وفي هذه الفئة، يمكنك إنشاء عنصر واجهة مستخدم ذات علامات تبويب يستخدم الفئات المجرّدة مع عمليات تنفيذ خاصة بإصدار معيّن لتوفير توافق مع الإصدارات القديمة. يشرح هذا الدرس كيفية إنشاء طبقة تجريدية لواجهات برمجة التطبيقات لعلامة التبويب الجديدة كخطوة أولى نحو إنشاء عنصر علامة التبويب.
الاستعداد للتجريد
يتضمّن التجريد في لغة برمجة Java إنشاء واجهة أو أكثر من الواجهات أو فئة مجردة لإخفاء تفاصيل التنفيذ. في ما يتعلّق بواجهات برمجة تطبيقات Android الأحدث، يمكنك استخدام التجريد لإنشاء مكوّنات تراعي الإصدارات وتستخدم واجهات برمجة التطبيقات الحالية على الأجهزة الأحدث، والرجوع إلى واجهات برمجة التطبيقات الأقدم والأكثر توافقًا على الأجهزة القديمة.
وعند استخدام هذا المنهج، عليك أولاً تحديد الفئات الجديدة التي تريد التمكّن من استخدامها بطريقة متوافقة مع الأنظمة القديمة، ثم إنشاء فئات مجردة تستند إلى الواجهات العامة للفئات الجديدة. عند تحديد واجهات التجريد، يجب أن تعكس واجهة برمجة التطبيقات الأحدث قدر الإمكان. ويؤدي ذلك إلى زيادة التوافق الأمامي، كما يسهل حذف طبقة التجريد في المستقبل عندما لا تكون ضرورية.
بعد إنشاء فئات مجردة لواجهات برمجة التطبيقات الجديدة هذه، يمكن إنشاء أي عدد من عمليات التنفيذ واختيارها في وقت التشغيل. لأغراض التوافق مع الأنظمة القديمة، يمكن أن تختلف عمليات التنفيذ هذه حسب مستوى واجهة برمجة التطبيقات المطلوب. وبالتالي، قد تستخدم إحدى عمليات التنفيذ واجهات برمجة التطبيقات التي تم إصدارها مؤخرًا، بينما يمكن للعمليات الأخرى استخدام واجهات برمجة تطبيقات قديمة.
إنشاء واجهة تجريدية لعلامة تبويب
لإنشاء إصدار متوافق مع الإصدارات القديمة من علامات التبويب، يجب أولاً تحديد الميزات وواجهات برمجة التطبيقات التي يتطلبها تطبيقك. في ما يتعلّق بعلامات تبويب الأقسام ذات المستوى الأعلى، لنفترض أنّ لديك المتطلبات الوظيفية التالية:
- يجب أن تعرض مؤشرات علامة التبويب نصًا ورمزًا.
- يمكن ربط علامات التبويب بمثيل للعنصر.
- يجب أن يكون النشاط قادرًا على الاستماع إلى تغييرات علامات التبويب.
من خلال إعداد هذه المتطلبات مسبقًا، يمكنك التحكّم في نطاق طبقة التجريد. وهذا يعني أنك ستقضي وقتًا أقل في إنشاء عمليات تنفيذ متعددة لطبقة التجريد، وأن تبدأ في استخدام التنفيذ الجديد المتوافق مع الأنظمة القديمة في وقت أقرب.
تتوفر واجهات برمجة التطبيقات الرئيسية لعلامات التبويب في ActionBar
وActionBar.Tab
. هذه هي واجهات برمجة التطبيقات التي يجب استخلاصها لجعل علامات التبويب متوافقة مع الإصدارات. تطلب متطلبات هذا المثال للمشروع عدم التوافق مرة أخرى مع Eclair (المستوى 5 من واجهة برمجة التطبيقات) مع الاستفادة من ميزات علامات التبويب الجديدة في Honeycomb (مستوى واجهة برمجة التطبيقات 11). في ما يلي مخطّط بياني لبنية الفئة لتتوافق مع هذين التنفيذَين والفئات الأساسية المجردة (أو الواجهات) الخاصة بهما.
ملخص تجريدي لـ ActionBar.Tab
يمكنك البدء في إنشاء طبقة تجريدية لعلامة التبويب من خلال إنشاء فئة تجريدية تمثّل علامة تبويب تعكس واجهة ActionBar.Tab
:
Kotlin
sealed class CompatTab(val tag: String) { ... abstract fun getText(): CharSequence abstract fun getIcon(): Drawable abstract fun getCallback(): CompatTabListener abstract fun getFragment(): Fragment abstract fun setText(text: String): CompatTab abstract fun setIcon(icon: Drawable): CompatTab abstract fun setCallback(callback: CompatTabListener): CompatTab abstract fun setFragment(fragment: Fragment): CompatTab ... }
Java
public abstract class CompatTab { ... public abstract CompatTab setText(int resId); public abstract CompatTab setIcon(int resId); public abstract CompatTab setTabListener( CompatTabListener callback); public abstract CompatTab setFragment(Fragment fragment); public abstract CharSequence getText(); public abstract Drawable getIcon(); public abstract CompatTabListener getCallback(); public abstract Fragment getFragment(); ... }
يمكنك استخدام فئة مجردة بدلاً من واجهة هنا لتبسيط تنفيذ الميزات الشائعة، مثل ربط عناصر علامات التبويب بالأنشطة (غير معروضة في مقتطف الرمز).
طرق علامات التبويب في ActionBar المجردة
بعد ذلك، حدِّد صفًا مجرّدًا يسمح لك بإنشاء علامات تبويب وإضافتها إلى نشاط، مثل ActionBar.newTab()
وActionBar.addTab()
:
Kotlin
sealed class TabHelper(protected val activity: FragmentActivity) { ... abstract fun setUp() fun newTab(tag: String): CompatTab { // This method is implemented in a later lesson. } abstract fun addTab(tab: CompatTab) ... }
Java
public abstract class TabHelper { ... public CompatTab newTab(String tag) { // This method is implemented in a later lesson. } public abstract void addTab(CompatTab tab); ... }
في الدروس التالية، ستُنشئ عمليات تنفيذ لكلٍّ من TabHelper
وCompatTab
تعمل على جميع إصدارات المنصة القديمة والجديدة.