मान लें कि आपको अपने ऐप्लिकेशन में टॉप-लेवल नेविगेशन के मुख्य फ़ॉर्म के तौर पर, ऐक्शन बार टैब का इस्तेमाल करना है. माफ़ करें, ActionBar
के एपीआई सिर्फ़ Android 3.0 या उसके बाद वाले वर्शन (एपीआई लेवल 11+) पर उपलब्ध हैं. इसलिए, अगर आपको अपने ऐप्लिकेशन को इस प्लैटफ़ॉर्म के पुराने वर्शन पर चलने वाले डिवाइसों में उपलब्ध कराना है, तो आपको ऐसा तरीका लागू करना होगा जो नए एपीआई के साथ काम करता हो. साथ ही, आपको पुराने एपीआई का इस्तेमाल करने वाली फ़ॉलबैक व्यवस्था मुहैया करानी होगी.
इस क्लास में, टैब वाला यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट बनाया जाता है. यह कॉम्पोनेंट, वर्शन के हिसाब से लागू किए गए ऐब्स्ट्रैक्ट क्लास का इस्तेमाल करता है, ताकि पुराने वर्शन के साथ काम करने की सुविधा मिल सके. इस लेसन में, टैब कॉम्पोनेंट बनाने के पहले चरण के तौर पर, नए टैब एपीआई के लिए एब्स्ट्रैक्शन लेयर बनाने का तरीका बताया गया है.
एब्स्ट्रैक्शन के लिए तैयार करना
Java प्रोग्रामिंग भाषा में एब्स्ट्रैक्शन का मतलब, लागू करने की जानकारी छिपाने के लिए एक या उससे ज़्यादा इंटरफ़ेस या एब्स्ट्रैक्ट क्लास बनाना है. नए Android एपीआई के मामले में, एब्स्ट्रैक्शन का इस्तेमाल करके, वर्शन के हिसाब से काम करने वाले ऐसे कॉम्पोनेंट बनाए जा सकते हैं जो नए डिवाइसों पर मौजूदा एपीआई का इस्तेमाल करते हैं. साथ ही, पुराने डिवाइसों पर, ज़्यादा काम करने वाले पुराने एपीआई का इस्तेमाल करते हैं.
इस तरीके का इस्तेमाल करते समय, पहले यह तय करें कि आपको पिछली रिलीज़ के साथ काम करने वाली कौनसी नई क्लास का इस्तेमाल करना है. इसके बाद, नई क्लास के सार्वजनिक इंटरफ़ेस के आधार पर, एब्स्ट्रैक्ट क्लास बनाएं. एब्स्ट्रैक्शन इंटरफ़ेस तय करते समय, आपको नए एपीआई को ज़्यादा से ज़्यादा मिरर करना चाहिए. इससे आगे के साथ काम करने की क्षमता बढ़ जाती है. साथ ही, आने वाले समय में ज़रूरत न होने पर अब एब्सट्रैक्ट लेयर को छोड़ना आसान हो जाता है.
इन नए एपीआई के लिए एब्स्ट्रैक्ट क्लास बनाने के बाद, रनटाइम के दौरान कोई भी संख्या लागू की जा सकती है और चुनी जा सकती है. पुराने वर्शन के साथ काम करने के लिए, ये लागू करने के तरीके, ज़रूरी एपीआई लेवल के हिसाब से अलग-अलग हो सकते हैं. इस तरह, एक इंप्लिमेंटेशन हाल ही में रिलीज़ किए गए एपीआई का इस्तेमाल कर सकता है, जबकि दूसरा तरीका पुराने एपीआई का इस्तेमाल कर सकता है.
एब्स्ट्रैक्ट टैब इंटरफ़ेस बनाना
टैब का पुराने सिस्टम के साथ काम करने वाला वर्शन बनाने के लिए, आपको सबसे पहले यह तय करना होगा कि आपके ऐप्लिकेशन को किन सुविधाओं और खास एपीआई की ज़रूरत है. टॉप-लेवल सेक्शन टैब के मामले में, मान लें कि आपके पास ये फ़ंक्शनल ज़रूरी शर्तें हैं:
- टैब इंडिकेटर में टेक्स्ट और एक आइकॉन दिखना चाहिए.
- टैब को किसी फ़्रैगमेंट इंस्टेंस से जोड़ा जा सकता है.
- गतिविधि को टैब में होने वाले बदलावों को ध्यान में रखना चाहिए.
इन ज़रूरी शर्तों को पहले से तैयार करने से, एब्स्ट्रैक्शन लेयर के दायरे को कंट्रोल किया जा सकता है. इसका मतलब है कि अब आपको एब्स्ट्रैक्शन लेयर के कई वर्शन बनाने में कम समय लगेगा. साथ ही, पुराने वर्शन के साथ काम करने वाले नए वर्शन का इस्तेमाल जल्दी शुरू किया जा सकेगा.
टैब के लिए मुख्य एपीआई ActionBar
और ActionBar.Tab
में उपलब्ध हैं. ये ऐसे एपीआई हैं जिन्हें अलग करना ज़रूरी है, ताकि आपके टैब, वर्शन के हिसाब से काम कर सकें. इस उदाहरण के प्रोजेक्ट की ज़रूरी शर्तों के मुताबिक, यह Eclair (एपीआई लेवल 5) के साथ काम करना चाहिए. साथ ही, Honeycomb (एपीआई लेवल 11) में टैब की नई सुविधाओं का फ़ायदा भी लेना चाहिए. इन दोनों तरह के तरीकों और इनके ऐब्सट्रैक्ट बेस क्लास (या इंटरफ़ेस) का एक डायग्राम नीचे दिखाया गया है.

पहली इमेज. ऐब्सट्रैक्ट बेस क्लास और वर्शन के हिसाब से लागू करने का डायग्राम.
ऐब्स्ट्रैक्ट ActionBar.Tab
ActionBar.Tab
इंटरफ़ेस को मिरर करने वाली ऐब्स्ट्रैक्ट क्लास बनाकर, टैब की ऐब्स्ट्रैक्ट लेयर बनाना शुरू करें:
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
...
}
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()
जैसी किसी गतिविधि में टैब बनाने और जोड़ने की अनुमति देती है:
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)
...
}
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
के लिए ऐसे तरीके बताए हैं जो पुराने और नए, दोनों वर्शन पर काम करते हैं.