এখন যেহেতু আপনার কাছে TabHelper এবং CompatTab এর দুটি ইমপ্লিমেন্টেশন রয়েছে—একটি অ্যান্ড্রয়েড ৩.০ ও তার পরবর্তী সংস্করণের জন্য এবং অন্যটি প্ল্যাটফর্মের পূর্ববর্তী সংস্করণগুলোর জন্য—এখন এই ইমপ্লিমেন্টেশনগুলো নিয়ে কিছু করার সময় এসেছে। এই পাঠে এই ইমপ্লিমেন্টেশনগুলোর মধ্যে স্যুইচ করার লজিক তৈরি করা, সংস্করণ-সচেতন লেআউট তৈরি করা এবং সবশেষে ব্যাকওয়ার্ড-কম্প্যাটিবল UI কম্পোনেন্ট ব্যবহার করা নিয়ে আলোচনা করা হয়েছে।
সুইচিং লজিক যোগ করুন
TabHelper অ্যাবস্ট্রাক্ট ক্লাসটি বর্তমান ডিভাইসের প্ল্যাটফর্ম সংস্করণের উপর ভিত্তি করে, সংস্করণ-উপযোগী TabHelper এবং CompatTab ইনস্ট্যান্স তৈরি করার জন্য একটি ফ্যাক্টরি হিসেবে কাজ করে:
কোটলিন
sealed class TabHelper(protected val mActivity: FragmentActivity, protected val tag: String) { abstract fun setUp() abstract fun addTab(tab: CompatTab) // Usage is tabHelper.newTab("tag") fun newTab(tag: String): CompatTab = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { CompatTabHoneycomb(mActivity, tag) } else { CompatTabEclair(mActivity, tag) } companion object { // Usage is TabHelper.createInstance(activity) fun createInstance(activity: FragmentActivity): TabHelper = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { TabHelperHoneycomb(activity) } else { TabHelperEclair(activity) } } }
জাভা
public abstract class TabHelper { ... // Usage is TabHelper.createInstance(activity) public static TabHelper createInstance(FragmentActivity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { return new TabHelperHoneycomb(activity); } else { return new TabHelperEclair(activity); } } // Usage is tabHelper.newTab("tag") public CompatTab newTab(String tag) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { return new CompatTabHoneycomb(mActivity, tag); } else { return new CompatTabEclair(mActivity, tag); } } ... }
সংস্করণ-সচেতন অ্যাক্টিভিটি লেআউট তৈরি করুন
পরবর্তী ধাপ হলো আপনার অ্যাক্টিভিটির জন্য এমন লেআউট তৈরি করা যা দুটি ট্যাব ইমপ্লিমেন্টেশনকেই সাপোর্ট করতে পারে। পুরোনো ইমপ্লিমেন্টেশনটির ( TabHelperEclair ) ক্ষেত্রে, আপনাকে নিশ্চিত করতে হবে যে আপনার অ্যাক্টিভিটি লেআউটে একটি TabWidget এবং TabHost পাশাপাশি ট্যাবের কন্টেন্টের জন্য একটি কন্টেইনারও রয়েছে:
res/layout/main.xml:
<!-- This layout is for API level 5-10 only. --> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> </TabHost>
TabHelperHoneycomb বাস্তবায়নের জন্য, ট্যাবের বিষয়বস্তু ধারণ করতে আপনার শুধু একটি FrameLayout প্রয়োজন, যেহেতু ট্যাব নির্দেশকগুলো ActionBar দ্বারা সরবরাহ করা হয়।
res/layout-v11/main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" />
রানটাইমে, অ্যান্ড্রয়েড প্ল্যাটফর্ম সংস্করণের উপর নির্ভর করে main.xml লেআউটের কোন সংস্করণটি ইনফ্লেট করবে তা স্থির করে। কোন TabHelper ইমপ্লিমেন্টেশনটি ব্যবহার করতে হবে তা নির্ধারণ করার জন্য পূর্ববর্তী বিভাগে দেখানো যুক্তিটিই এখানেও প্রযোজ্য।
আপনার অ্যাক্টিভিটিতে TabHelper ব্যবহার করুন
আপনার অ্যাক্টিভিটির onCreate() মেথডে, আপনি নিম্নলিখিত কোড ব্যবহার করে একটি TabHelper অবজেক্ট পেতে এবং ট্যাব যোগ করতে পারেন:
কোটলিন
override fun onCreate(savedInstanceState: Bundle?) { ... setContentView(R.layout.main) TabHelper.createInstance(this).apply { setUp() newTab("photos") .setText(R.string.tab_photos) .also { photosTab -> addTab(photosTab) } newTab("videos") .setText(R.string.tab_videos) .also { videosTab -> addTab(videosTab) } } }
জাভা
@Override public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); TabHelper tabHelper = TabHelper.createInstance(this); tabHelper.setUp(); CompatTab photosTab = tabHelper .newTab("photos") .setText(R.string.tab_photos); tabHelper.addTab(photosTab); CompatTab videosTab = tabHelper .newTab("videos") .setText(R.string.tab_videos); tabHelper.addTab(videosTab); }
অ্যাপ্লিকেশনটি চালানোর সময়, এই কোডটি সঠিক অ্যাক্টিভিটি লেআউটটি ইনফ্লেট করে এবং একটি TabHelperHoneycomb অথবা TabHelperEclair অবজেক্ট ইনস্ট্যানশিয়েট করে। প্রকৃতপক্ষে ব্যবহৃত কনক্রিট ক্লাসটি অ্যাক্টিভিটির কাছে অস্বচ্ছ থাকে, কারণ তারা একই TabHelper ইন্টারফেস ব্যবহার করে।
অ্যান্ড্রয়েড ২.৩ এবং অ্যান্ড্রয়েড ৪.০ ডিভাইসে এই বাস্তবায়নটি চলার দুটি স্ক্রিনশট নিচে দেওয়া হলো।


চিত্র ১। একটি অ্যান্ড্রয়েড ২.৩ ডিভাইসে ( TabHelperEclair ব্যবহার করে) এবং একটি অ্যান্ড্রয়েড ৪.০ ডিভাইসে ( TabHelperHoneycomb ব্যবহার করে) চলমান ব্যাকওয়ার্ড-কম্প্যাটিবল ট্যাবের স্ক্রিনশটের উদাহরণ।