Bu derste, CompatTab
ve TabHelper
soyut sınıflarının nasıl alt sınıflandırı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'ler kullanan CompatTab
ve TabHelper
için somut sınıflar, 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 sadece proxy yöntem çağrıları ve bunların sonuçlarını yansıtır.
Geç yüklenen sınıf nedeniyle eski cihazlarda kilitlenmeden önce bu somut sınıflarda daha yeni API'leri doğrudan kullanabilirsiniz. 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ı uygulamadığınız sürece Dalvik sanal makinesi herhangi bir VerifyError
istisnası dikkate almaz.
Beton sınıfların gerektirdiği API'lere karşılık gelen API düzeyi veya platform sürümü kod adını eklemek bu uygulama için iyi bir adlandırma kuralıdır. Ö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 tek sekmelere referans vermek için kullandığı CompatTab
soyut sınıfın uygulamasıdır. CompatTabHoneycomb
, tüm yöntem çağrılarını, içerdiği ActionBar.Tab
nesnesine proxy yapar.
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öntemin, içerdiği Activity
öğesinden elde edilen gerçek bir ActionBar
öğesine proxy yaptığı 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. }