नए एपीआई को ऐब्स्ट्रैक्ट करें

मान लें कि आपको अपने ऐप्लिकेशन में टॉप लेवल नेविगेशन के लिए, ऐक्शन बार टैब का इस्तेमाल, मुख्य तरीके के तौर पर करना है. माफ़ करें, ActionBar के एपीआई सिर्फ़ Android 3.0 या इसके बाद वाले वर्शन (एपीआई लेवल 11 या इसके बाद के वर्शन) पर उपलब्ध हैं. इसलिए, अगर आपको अपने ऐप्लिकेशन को प्लैटफ़ॉर्म के पुराने वर्शन पर चलने वाले डिवाइसों में उपलब्ध कराना है, तो आपको एक ऐसा तरीका लागू करना होगा जो नए एपीआई के साथ काम करता हो. साथ ही, आपको पुराने एपीआई का इस्तेमाल करने वाला फ़ॉलबैक तरीका उपलब्ध कराना होगा.

इस क्लास में, टैब वाला यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट बनाया जाता है. यह पुराने वर्शन के साथ काम करने के लिए, अलग-अलग वर्शन को लागू करने वाली ऐब्सट्रैक्ट क्लास का इस्तेमाल करता है. इस लेसन में बताया गया है कि टैब कॉम्पोनेंट बनाने के पहले चरण के तौर पर, नए टैब एपीआई के लिए ऐब्स्ट्रक्शन लेयर कैसे बनाएं.

ऐब्स्ट्रैक्ट करने की तैयारी करें

Java प्रोग्रामिंग भाषा में ऐब्स्ट्रैक्शन का मतलब है, लागू करने की जानकारी को छिपाने के लिए एक या उससे ज़्यादा इंटरफ़ेस या ऐब्स्ट्रैक्ट क्लास बनाना. नए Android API के मामले में, ऐब्स्ट्रैक्ट को इस्तेमाल करके, वर्शन को समझने वाले कॉम्पोनेंट बनाने के लिए ऐब्स्ट्रैक्ट का इस्तेमाल किया जा सकता है. ये कॉम्पोनेंट, नए डिवाइसों पर मौजूदा एपीआई का इस्तेमाल करते हैं. साथ ही, पुराने डिवाइसों पर पुराने और ज़्यादा काम करने वाले एपीआई का इस्तेमाल कर सकते हैं.

इस तरीके का इस्तेमाल करते समय, आपको सबसे पहले यह तय करना होगा कि आपको किन नई क्लास को बैकवर्ड के साथ काम करने के लिए इस्तेमाल करना है. इसके बाद, नई क्लास के सार्वजनिक इंटरफ़ेस के आधार पर ऐब्स्ट्रैक्ट क्लास बनाएं. ऐब्स्ट्रैक्शन इंटरफ़ेस परिभाषित करने के लिए, आपको नए एपीआई को जितना हो सके उतना मिरर करना चाहिए. इससे आगे के साथ काम करने की क्षमता बढ़ती है. साथ ही, आने वाले समय में ज़रूरत न होने पर, ऐब्स्ट्रैक्ट लेयर को हटाना आसान हो जाता है.

इन नए एपीआई के लिए ऐब्सट्रैक्ट क्लास बनाने के बाद, रनटाइम के दौरान कितने भी इंप्लीमेंटेशन बनाए और चुने जा सकते हैं. पुराने सिस्टम के साथ काम करने के लिए, ज़रूरी एपीआई लेवल के हिसाब से अलग-अलग तरीके लागू किए जा सकते हैं. इसलिए, एक इंप्लिमेंटेशन हाल ही में रिलीज़ किए गए एपीआई का इस्तेमाल कर सकता है, जबकि दूसरा तरीका पुराने एपीआई का इस्तेमाल कर सकता है.

ऐब्स्ट्रैक्ट टैब इंटरफ़ेस बनाना

टैब का पुराने सिस्टम के साथ काम करने वाला वर्शन बनाने के लिए, आपको सबसे पहले यह तय करना होगा कि आपके ऐप्लिकेशन को किन सुविधाओं और खास एपीआई की ज़रूरत है. टॉप-लेवल सेक्शन टैब के मामले में, मान लें कि आपके पास ये फ़ंक्शनल ज़रूरी शर्तें हैं:

  1. टैब इंडिकेटर में टेक्स्ट और एक आइकॉन दिखना चाहिए.
  2. टैब को किसी फ़्रैगमेंट इंस्टेंस से जोड़ा जा सकता है.
  3. गतिविधि को टैब में होने वाले बदलावों को ध्यान में रखना चाहिए.

इन ज़रूरी शर्तों को पहले से तैयार करके, अपने एब्सट्रैक्ट लेयर के दायरे को कंट्रोल किया जा सकता है. इसका मतलब है कि आपको अपने ऐब्स्ट्रैक्ट लेयर के लिए, कई लागू करने को बनाने में कम समय देना होगा. साथ ही, पुराने सिस्टम के साथ काम करने की सुविधा को जल्द से जल्द इस्तेमाल करना शुरू किया जा सकेगा.

टैब के लिए मुख्य एपीआई ActionBar और ActionBar.Tab में उपलब्ध हैं. इन एपीआई को ऐब्स्ट्रैक्ट करने के लिए इस्तेमाल किया जाता है, ताकि आपके टैब को वर्शन के बारे में पता चल सके. इस प्रोजेक्ट के लिए ज़रूरी है कि Honeycomb में नए टैब की सुविधाओं (एपीआई लेवल 11) का फ़ायदा लेते समय, Eclair (एपीआई लेवल 5) के साथ काम करने की सुविधा फिर से ज़रूरी हो. इन दोनों तरह के तरीकों और इनके ऐब्सट्रैक्ट बेस क्लास (या इंटरफ़ेस) का एक डायग्राम नीचे दिखाया गया है.

ऐब्सट्रैक्ट बेस क्लास और वर्शन के हिसाब से लागू करने का डायग्राम.

पहला डायग्राम. ऐब्सट्रैक्ट बेस क्लास और वर्शन के हिसाब से लागू करने का डायग्राम.

ऐब्स्ट्रैक्ट 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 के लिए ऐसे तरीके बताए हैं जो पुराने और नए, दोनों वर्शन पर काम करते हैं.

आपको यह भी पढ़ना चाहिए