Bu derste, CompatTab ve TabHelper soyut sınıflarının nasıl alt sınıflara ayrılacağı ve yeni API'lerin nasıl kullanılacağı gösterilmektedir. Uygulamanız, bu işlevleri destekleyen platform sürümünün yüklü olduğu cihazlarda bu uygulamayı kullanabilir.
Yeni API'leri kullanarak sekmeler uygulama
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ığı için bu yeni API'leri kullanan somut sınıflar, yöntem çağrılarını ve sonuçlarını proxy'ler.
Geç yüklenen sınıflar sayesinde, bu somut sınıflarda daha yeni API'leri doğrudan kullanabilir ve önceki cihazlarda kilitlenme sorunu yaşamayabilirsiniz. Sınıflar, ilk erişimde yüklenir ve başlatılır. Bu işlem, sınıfı oluşturma veya statik alanlarından ya da yöntemlerinden birine ilk kez erişme şeklinde gerçekleşir. Bu nedenle, Honeycomb öncesi cihazlarda Honeycomb'e özgü uygulamaları örneklendirmediğiniz sürece Dalvik VM herhangi bir VerifyError istisnası hata vermez.
Bu uygulama için iyi bir adlandırma kuralı, somut sınıfların gerektirdiği API'lere karşılık gelen API düzeyi veya platform sürümü kodu adını eklemektir. Örneğin, Android 3.0 (API düzeyi 11) veya sonraki sürümlerde kullanılabilen API'leri kullandıkları için yerel sekme uygulaması 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 uygulanmasıdır. CompatTabHoneycomb, içerdiği ActionBar.Tab nesnesine yapılan tüm yöntem çağrılarını proxy'ler.
Yeni ActionBar.Tab API'lerini kullanarak CompatTabHoneycomb'yı 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, içerdiği Activity öğesinden elde edilen gerçek bir ActionBar öğesine yöntem çağrılarını yönlendiren TabHelper soyut sınıfının uygulanmasıdır.
TabHelperHoneycomb yöntemini uygulayın ve ActionBar API'ye proxy oluşturma yöntemi çağrıları yapı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. }