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

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

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

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

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

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

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

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

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

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

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

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

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

Abstract 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();
    ...
}

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

طُرق علامات التبويب في Abstract 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 التي تعمل على كل من إصدارات النظام الأساسي القديمة والجديدة.

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