Bu derste, CompatTab
ve TabHelper
soyut sınıflarının nasıl alt sınıfa ayrılacağı ve yeni API'lerin nasıl kullanılacağı gösterilmektedir. Uygulamanız, bu uygulamayı destekleyen bir platform sürümü çalıştıran cihazlarda kullanılabilir.
Sekmeleri yeni API'ler kullanarak uygulayın
Daha yeni API'leri kullanan CompatTab
ve TabHelper
için somut sınıflar bir proxy uygulamasıdır. Önceki derste tanımlanan soyut sınıflar yeni API'leri (sınıf yapısı, yöntem imzaları vb.) yansıttığından, bu yeni API'leri kullanan somut sınıflar yalnızca yöntem çağrılarını ve sonuçlarını proxy olarak kullanır.
Tembel sınıf yükleme özelliği sayesinde bu somut sınıflarda doğrudan yeni API'leri kullanabilir ve eski cihazlarda kilitlenme yaşamazsınız. Sınıflar yüklenir ve ilk erişimde başlatılır. Böylece, sınıf başlatılır veya statik alanlarından ya da yöntemlerinden birine ilk kez erişilir. Bu nedenle, Honeycomb öncesi cihazlarda Honeycomb'a özgü uygulamaları örneklemediğiniz sürece Dalvik sanal makinesi herhangi bir VerifyError
istisnası atmaz.
Bu uygulama için iyi bir adlandırma kuralı, somut sınıfların gerektirdiği API'lere karşılık gelen API düzeyini veya platform sürüm kodu adını eklemektir. Örneğin, yerel sekme uygulaması Android 3.0 (API düzeyi 11) veya sonraki sürümlerde kullanılabilen API'leri temel aldığı için CompatTabHoneycomb
ve TabHelperHoneycomb
sınıfları tarafından sağlanabilir.
CompatTabHoneycomb'u uygulama
CompatTabHoneycomb
, TabHelperHoneycomb
'nin tek sekmelere referans vermek için kullandığı CompatTab
soyut sınıfının uygulamasıdır. CompatTabHoneycomb
, tüm yöntem çağrılarını kapsadığı ActionBar.Tab
nesnesine proxy olarak gönderir.
Yeni ActionBar.Tab
API'lerini kullanarak CompatTabHoneycomb
öğesini uygulamaya başlayın:
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'u Uygulama
TabHelperHoneycomb
, yöntem çağrılarını içeren Activity
öğesinden elde edilen gerçek bir ActionBar
öğesine proxy yapan TabHelper
soyut sınıfının uygulamasıdır.
ActionBar
API'sine proxy uygulama yöntemi çağrıları olan TabHelperHoneycomb
'yi uygulayın:
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. }