इस सबक में, CompatTab और TabHelper ऐब्स्ट्रैक्ट क्लास को सबक्लास करने और नए एपीआई का इस्तेमाल करने का तरीका बताया गया है. आपका ऐप्लिकेशन, प्लैटफ़ॉर्म के ऐसे वर्शन वाले डिवाइसों पर इस तरीके से लागू किया जा सकता है जो इसे सपोर्ट करते हैं.
नए एपीआई का इस्तेमाल करके टैब लागू करना
CompatTab और TabHelper के लिए, नए एपीआई का इस्तेमाल करने वाली कॉन्क्रीट क्लास, प्रॉक्सी के तौर पर काम करती हैं. पिछली क्लास में बताई गई ऐब्स्ट्रैक्ट क्लास, नए एपीआई (क्लास स्ट्रक्चर, मेथड सिग्नेचर वगैरह) के मुताबिक होती हैं. इसलिए, इन नए एपीआई का इस्तेमाल करने वाली कॉन्क्रीट क्लास, मेथड कॉल और उनके नतीजों के लिए प्रॉक्सी के तौर पर काम करती हैं.
लेज़ी क्लास लोडिंग की वजह से, इन कॉन्क्रीट क्लास में नए एपीआई का सीधे इस्तेमाल किया जा सकता है. साथ ही, पुराने डिवाइसों पर क्रैश होने की समस्या नहीं आती. क्लास, पहली बार ऐक्सेस करने पर लोड और शुरू की जाती हैं. जैसे, क्लास को इंस्टैंशिएट करना या पहली बार उसके किसी स्टैटिक फ़ील्ड या मेथड को ऐक्सेस करना. इसलिए, जब तक Honeycomb से पहले के वर्शन वाले डिवाइसों पर, Honeycomb के लिए बने इंप्लीमेंटेशन को इंस्टैंशिएट नहीं किया जाता, तब तक Dalvik VM, VerifyError अपवाद नहीं देगा.
इस इंप्लीमेंटेशन के लिए, नामकरण का सही तरीका यह है कि कॉन्क्रीट क्लास के लिए ज़रूरी एपीआई के मुताबिक, एपीआई लेवल या प्लैटफ़ॉर्म वर्शन कोड नेम जोड़ें. उदाहरण के लिए, नेटिव टैब इंप्लीमेंटेशन, CompatTabHoneycomb और TabHelperHoneycomb क्लास से उपलब्ध कराया जा सकता है. ऐसा इसलिए, क्योंकि ये Android 3.0 (एपीआई लेवल 11) या उसके बाद के वर्शन में उपलब्ध एपीआई पर निर्भर करते हैं.
CompatTabHoneycomb लागू करना
CompatTabHoneycomb CompatTab ऐब्स्ट्रैक्ट क्लास का इंप्लीमेंटेशन है. इसका इस्तेमाल, TabHelperHoneycomb अलग-अलग टैब को रेफ़र करने के लिए करता है. CompatTabHoneycomb, अपने ActionBar.Tab ऑब्जेक्ट को सभी मेथड कॉल के लिए प्रॉक्सी के तौर पर इस्तेमाल करता है.
ActionBar.Tab के नए एपीआई का इस्तेमाल करके, CompatTabHoneycomb लागू करना शुरू करें:
Kotlin
class CompatTabHoneycomb internal constructor(val activity: Activity, tag: String) : CompatTab(tag) { ... // The native tab object that this CompatTab acts as a proxy for. private var mTab: ActionBar.Tab = // Proxy to new ActionBar.newTab API activity.actionBar.newTab() override fun setText(@StringRes textId: Int): CompatTab { // Proxy to new ActionBar.Tab.setText API mTab.setText(textId) return this } ... // Do the same for other properties (icon, callback, etc.) }
Java
public class CompatTabHoneycomb extends CompatTab { // The native tab object that this CompatTab acts as a proxy for. ActionBar.Tab mTab; ... protected CompatTabHoneycomb(FragmentActivity activity, String tag) { ... // Proxy to new ActionBar.newTab API mTab = activity.getActionBar().newTab(); } public CompatTab setText(int resId) { // Proxy to new ActionBar.Tab.setText API mTab.setText(resId); return this; } ... // Do the same for other properties (icon, callback, etc.) }
TabHelperHoneycomb लागू करना
TabHelperHoneycomb TabHelper ऐब्स्ट्रैक्ट क्लास का इंप्लीमेंटेशन है. यह अपने Activity से मिले, असली ActionBar को मेथड कॉल के लिए प्रॉक्सी के तौर पर इस्तेमाल करता है.
TabHelperHoneycomb लागू करें. साथ ही, ActionBar एपीआई को मेथड कॉल के लिए प्रॉक्सी के तौर पर इस्तेमाल करें:
Kotlin
class TabHelperHoneycomb internal constructor(activity: FragmentActivity) : TabHelper(activity) { private var mActionBar: ActionBar? = null override fun setUp() { mActionBar = mActionBar ?: mActivity.actionBar.apply { navigationMode = ActionBar.NAVIGATION_MODE_TABS } } override fun addTab(tab: CompatTab) { // Tab is a CompatTabHoneycomb instance, so its // native tab object is an ActionBar.Tab. mActionBar?.addTab(tab.getTab() as ActionBar.Tab) } }
Java
public class TabHelperHoneycomb extends TabHelper { ActionBar actionBar; ... protected void setUp() { if (actionBar == null) { actionBar = activity.getActionBar(); actionBar.setNavigationMode( ActionBar.NAVIGATION_MODE_TABS); } } public void addTab(CompatTab tab) { ... // Tab is a CompatTabHoneycomb instance, so its // native tab object is an ActionBar.Tab. actionBar.addTab((ActionBar.Tab) tab.getTab()); } // The other important method, newTab() is part of // the base implementation. }