এই পাঠে দেখানো হয়েছে কীভাবে CompatTab এবং TabHelper অ্যাবস্ট্রাক্ট ক্লাসগুলোকে সাবক্লাস করতে হয় এবং নতুন এপিআই ব্যবহার করতে হয়। আপনার অ্যাপ্লিকেশন এই ইমপ্লিমেন্টেশনটি এমন ডিভাইসগুলোতে ব্যবহার করতে পারবে, যেগুলোতে এগুলো সমর্থনকারী প্ল্যাটফর্ম সংস্করণ চলছে।
নতুন এপিআই ব্যবহার করে ট্যাব বাস্তবায়ন করুন
CompatTab এবং TabHelper এর যে কনক্রিট ক্লাসগুলো নতুন এপিআই ব্যবহার করে, সেগুলো একটি প্রক্সি ইমপ্লিমেন্টেশন। যেহেতু পূর্ববর্তী পাঠে সংজ্ঞায়িত অ্যাবস্ট্রাক্ট ক্লাসগুলো নতুন এপিআই-গুলোকে (ক্লাস কাঠামো, মেথড সিগনেচার ইত্যাদি) প্রতিফলিত করে, তাই যে কনক্রিট ক্লাসগুলো এই নতুন এপিআইগুলো ব্যবহার করে, সেগুলো মেথড কল এবং তার ফলাফলকে প্রক্সি করে।
লেজি ক্লাস লোডিং-এর কারণে আপনি এই কনক্রিট ক্লাসগুলিতে সরাসরি নতুন এপিআই ব্যবহার করতে পারেন—এবং পুরোনো ডিভাইসগুলিতেও ক্র্যাশ হবে না। প্রথমবার অ্যাক্সেস করার সময়—অর্থাৎ ক্লাসটি ইনস্ট্যানশিয়েট করার সময় বা এর কোনো স্ট্যাটিক ফিল্ড বা মেথড প্রথমবার অ্যাক্সেস করার সময়—ক্লাসগুলি লোড এবং ইনিশিয়ালাইজ করা হয়। সুতরাং, যতক্ষণ না আপনি প্রি-হানি কম্ব ডিভাইসগুলিতে হানি কম্ব-এর জন্য নির্দিষ্ট ইমপ্লিমেন্টেশনগুলি ইনস্ট্যানশিয়েট করছেন, ডালভিক ভিএম কোনো VerifyError এক্সেপশন থ্রো করবে না।
এই ইমপ্লিমেন্টেশনের জন্য একটি ভালো নামকরণের রীতি হলো, কনক্রিট ক্লাসগুলোর জন্য প্রয়োজনীয় এপিআই-এর সাথে সংশ্লিষ্ট এপিআই লেভেল বা প্ল্যাটফর্ম ভার্সনের কোড নামটি যুক্ত করা। উদাহরণস্বরূপ, নেটিভ ট্যাব ইমপ্লিমেন্টেশন CompatTabHoneycomb এবং TabHelperHoneycomb ক্লাসগুলোর মাধ্যমে প্রদান করা যেতে পারে, কারণ এগুলো অ্যান্ড্রয়েড ৩.০ (এপিআই লেভেল ১১) বা তার পরবর্তী সংস্করণে উপলব্ধ এপিআই-এর উপর নির্ভর করে।

CompatTabHoneycomb বাস্তবায়ন করুন
CompatTabHoneycomb হলো CompatTab অ্যাবস্ট্রাক্ট ক্লাসের একটি ইমপ্লিমেন্টেশন, যা TabHelperHoneycomb স্বতন্ত্র ট্যাবগুলোকে রেফারেন্স করার জন্য ব্যবহার করে। CompatTabHoneycomb তার অন্তর্ভুক্ত ActionBar.Tab অবজেক্টের সমস্ত মেথড কলকে প্রক্সি হিসেবে কাজ করে।
নতুন ActionBar.Tab API ব্যবহার করে CompatTabHoneycomb বাস্তবায়ন শুরু করুন:
কোটলিন
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.) }
জাভা
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 এ মেথড কলগুলোকে প্রক্সি করে।
ActionBar API-তে মেথড কল প্রক্সি করার জন্য TabHelperHoneycomb প্রয়োগ করুন:
কোটলিন
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) } }
জাভা
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. }