ملخّص واجهات برمجة التطبيقات الجديدة

لنفترض أنك تريد استخدام علامات تبويب شريط الإجراءات كنموذج أساسي للتنقّل على المستوى الأعلى في تطبيقك. لا تتوفّر واجهات برمجة التطبيقات ActionBar إلا في الإصدار 3.0 من نظام التشغيل Android أو الإصدارات الأحدث (المستوى 11 والإصدارات الأحدث). وبالتالي، إذا أردت توزيع تطبيقك على الأجهزة التي تعمل بإصدارات سابقة من النظام الأساسي، عليك توفير طريقة تنفيذ تتوافق مع واجهة برمجة التطبيقات الأحدث مع توفير آلية احتياطية تستخدم واجهات برمجة تطبيقات قديمة.

وفي هذه الفئة، يمكنك إنشاء عنصر واجهة مستخدم ذات علامات تبويب يستخدم الفئات المجرّدة مع عمليات تنفيذ خاصة بإصدار معيّن لتوفير توافق مع الإصدارات القديمة. يشرح هذا الدرس كيفية إنشاء طبقة تجريدية لواجهات برمجة التطبيقات لعلامة التبويب الجديدة كخطوة أولى نحو إنشاء عنصر علامة التبويب.

الاستعداد للتجريد

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

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

بعد إنشاء فئات مجردة لواجهات برمجة التطبيقات الجديدة هذه، يمكن إنشاء أي عدد من عمليات التنفيذ واختيارها في وقت التشغيل. لأغراض التوافق مع الأنظمة القديمة، يمكن أن تختلف عمليات التنفيذ هذه حسب مستوى واجهة برمجة التطبيقات المطلوب. وبالتالي، قد تستخدم إحدى عمليات التنفيذ واجهات برمجة التطبيقات التي تم إصدارها مؤخرًا، بينما يمكن للعمليات الأخرى استخدام واجهات برمجة تطبيقات قديمة.

إنشاء واجهة تجريدية لعلامة تبويب

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

  1. يجب أن تعرض مؤشرات علامة التبويب نصًا ورمزًا.
  2. يمكن ربط علامات التبويب بمثيل للعنصر.
  3. يجب أن يكون النشاط قادرًا على الاستماع إلى تغييرات علامات التبويب.

من خلال إعداد هذه المتطلبات مسبقًا، يمكنك التحكّم في نطاق طبقة التجريد. وهذا يعني أنك ستقضي وقتًا أقل في إنشاء عمليات تنفيذ متعددة لطبقة التجريد، وأن تبدأ في استخدام التنفيذ الجديد المتوافق مع الأنظمة القديمة في وقت أقرب.

تتوفر واجهات برمجة التطبيقات الرئيسية لعلامات التبويب في ActionBar وActionBar.Tab. هذه هي واجهات برمجة التطبيقات التي يجب استخلاصها لجعل علامات التبويب متوافقة مع الإصدارات. تطلب متطلبات هذا المثال للمشروع عدم التوافق مرة أخرى مع Eclair (المستوى 5 من واجهة برمجة التطبيقات) مع الاستفادة من ميزات علامات التبويب الجديدة في Honeycomb (مستوى واجهة برمجة التطبيقات 11). في ما يلي مخطّط بياني لبنية الفئة لتتوافق مع هذين التنفيذَين والفئات الأساسية المجردة (أو الواجهات) الخاصة بهما.

يشير ذلك المصطلح إلى رسم بياني لفئة يحتوي على فئات أساسية تجريدية وعمليات تنفيذ خاصة بإصدار معيّن.

الشكل 1. يشير ذلك المصطلح إلى رسم بياني لفئة يحتوي على فئات أساسية تجريدية وعمليات تنفيذ خاصة بإصدار معيّن.

ملخص تجريدي لـ 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 تعمل على جميع إصدارات المنصة القديمة والجديدة.

ننصحك أيضًا بقراءة