नए एपीआई के लिए प्रॉक्सी

इस लेसन में, CompatTab और TabHelper ऐब्स्ट्रैक्ट क्लास को सब-क्लास करने और नए एपीआई इस्तेमाल करने का तरीका बताया गया है. आपका ऐप्लिकेशन इस तरीके का इस्तेमाल, उन डिवाइसों पर कर सकता है जो इसके साथ काम करने वाले प्लैटफ़ॉर्म वर्शन पर काम करते हैं.

नए एपीआई का इस्तेमाल करके टैब लागू करना

नए एपीआई इस्तेमाल करने वाले CompatTab और TabHelper के लिए कंक्रीट क्लास, प्रॉक्सी को लागू करने के लिए इस्तेमाल की जाती हैं. पिछले लेसन में तय की गई ऐब्स्ट्रैक्ट क्लास, नए एपीआई (क्लास स्ट्रक्चर, मेथड सिग्नेचर वगैरह) की डुप्लीकेट कॉपी बनाती हैं. इसलिए, इन नए एपीआई का इस्तेमाल करने वाली कंक्रीट की क्लास, सिर्फ़ प्रॉक्सी तरीके से कॉल और उनके नतीजों का पता लगाती हैं.

लेज़ी क्लास लोडिंग की वजह से, इन कंक्रीट क्लास में सीधे नए एपीआई का इस्तेमाल किया जा सकता है. इससे पुराने डिवाइसों पर क्रैश नहीं होता. क्लास को पहली बार ऐक्सेस करने पर ही क्लास लोड हो जाती हैं और शुरू हो जाती हैं. इससे क्लास को तुरंत शुरू किया जाता है या उसके किसी स्टैटिक फ़ील्ड या तरीके को पहली बार ऐक्सेस किया जाता है. इसलिए, जब तक Honeycomb से पहले के डिवाइसों पर, Honeycomb के लिए खास तौर पर लागू किए गए तरीकों को इंस्टैंशिएट नहीं किया जाता, तब तक Dalvik VM कोई VerifyError अपवाद नहीं दिखाएगा.

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

टैब के लिए Honeycomb लागू करने के लिए क्लास डायग्राम.

पहला डायग्राम. टैब के लिए Honeycomb लागू करने के लिए क्लास डायग्राम.

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 ऐब्सट्रैक्ट क्लास को लागू करने का तरीका है, जो प्रॉक्सी तरीके से असल ActionBar को कॉल करता है, जो इसमें मौजूद Activity से मिलता है.

ActionBar एपीआई पर प्रॉक्सी करने के तरीके के कॉल TabHelperHoneycomb लागू करें:

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.
}

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