ধরুন আপনি আপনার অ্যাপ্লিকেশনে শীর্ষ-স্তরের নেভিগেশনের প্রাথমিক ফর্ম হিসাবে অ্যাকশন বার ট্যাবগুলি ব্যবহার করতে চান৷ দুর্ভাগ্যবশত, ActionBar
এপিআই শুধুমাত্র অ্যান্ড্রয়েড 3.0 বা তার পরবর্তী সংস্করণে উপলব্ধ (API স্তর 11+)। এইভাবে, আপনি যদি প্ল্যাটফর্মের পূর্ববর্তী সংস্করণগুলি চলমান ডিভাইসগুলিতে আপনার অ্যাপ্লিকেশনটি বিতরণ করতে চান তবে আপনাকে একটি বাস্তবায়ন প্রদান করতে হবে যা নতুন API সমর্থন করে যখন একটি ফলব্যাক প্রক্রিয়া প্রদান করে যা পুরানো API ব্যবহার করে।
এই ক্লাসে, আপনি একটি ট্যাবড ইউজার ইন্টারফেস (UI) উপাদান তৈরি করেন যা পশ্চাদগামী-সামঞ্জস্যতা প্রদানের জন্য সংস্করণ-নির্দিষ্ট বাস্তবায়ন সহ বিমূর্ত ক্লাস ব্যবহার করে। এই পাঠটি ট্যাব উপাদান তৈরির দিকে প্রথম পদক্ষেপ হিসাবে নতুন ট্যাব API-এর জন্য কীভাবে একটি বিমূর্ত স্তর তৈরি করতে হয় তা বর্ণনা করে।
বিমূর্ততা জন্য প্রস্তুত
জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজে অ্যাবস্ট্রাকশন এক বা একাধিক ইন্টারফেস বা অ্যাবস্ট্রাক্ট ক্লাস তৈরি করে বাস্তবায়নের বিবরণ লুকানোর জন্য। নতুন অ্যান্ড্রয়েড এপিআই-এর ক্ষেত্রে, আপনি সংস্করণ-সচেতন উপাদানগুলি তৈরি করতে বিমূর্ততা ব্যবহার করতে পারেন যা নতুন ডিভাইসে বর্তমান API ব্যবহার করে এবং পুরোনো ডিভাইসে আরও বেশি সামঞ্জস্যপূর্ণ API-এ ফলব্যাক করতে পারে।
এই পদ্ধতিটি ব্যবহার করার সময়, আপনি প্রথমে নির্ধারণ করুন যে আপনি কোন নতুন ক্লাসগুলি একটি পশ্চাদগামী সামঞ্জস্যপূর্ণ উপায়ে ব্যবহার করতে সক্ষম হতে চান, তারপরে নতুন ক্লাসগুলির পাবলিক ইন্টারফেসের উপর ভিত্তি করে বিমূর্ত ক্লাস তৈরি করুন। বিমূর্ততা ইন্টারফেস সংজ্ঞায়িত করার জন্য, আপনার যতটা সম্ভব নতুন API মিরর করা উচিত। এটি ফরোয়ার্ড-সামঞ্জস্যতাকে সর্বাধিক করে তোলে এবং ভবিষ্যতে বিমূর্তকরণ স্তরটি ফেলে দেওয়া সহজ করে তোলে যখন এটি আর প্রয়োজন হয় না।
এই নতুন APIগুলির জন্য বিমূর্ত ক্লাস তৈরি করার পরে, যেকোন সংখ্যক বাস্তবায়ন তৈরি করা যেতে পারে এবং রানটাইমে বেছে নেওয়া যেতে পারে। পশ্চাদপদ-সামঞ্জস্যতার উদ্দেশ্যে, এই বাস্তবায়নগুলি প্রয়োজনীয় API স্তর অনুসারে পরিবর্তিত হতে পারে। এইভাবে, একটি বাস্তবায়ন সম্প্রতি প্রকাশিত API ব্যবহার করতে পারে, অন্যরা পুরানো API ব্যবহার করতে পারে।
একটি বিমূর্ত ট্যাব ইন্টারফেস তৈরি করুন
ট্যাবগুলির একটি পশ্চাদগামী-সামঞ্জস্যপূর্ণ সংস্করণ তৈরি করার জন্য, আপনাকে প্রথমে নির্ধারণ করা উচিত যে আপনার অ্যাপ্লিকেশনের জন্য কোন বৈশিষ্ট্য এবং নির্দিষ্ট APIগুলি প্রয়োজন৷ শীর্ষ-স্তরের বিভাগ ট্যাবের ক্ষেত্রে, ধরুন আপনার নিম্নলিখিত কার্যকরী প্রয়োজনীয়তা রয়েছে:
- ট্যাব নির্দেশক পাঠ্য এবং একটি আইকন প্রদর্শন করা উচিত.
- ট্যাবগুলি একটি খণ্ড উদাহরণের সাথে যুক্ত হতে পারে।
- অ্যাক্টিভিটি ট্যাব পরিবর্তনের জন্য শুনতে সক্ষম হওয়া উচিত।
এই প্রয়োজনীয়তাগুলি আগে থেকেই প্রস্তুত করা আপনাকে আপনার বিমূর্তকরণ স্তরের সুযোগ নিয়ন্ত্রণ করতে দেয়। এর মানে হল যে আপনি আপনার বিমূর্ততা স্তরের একাধিক বাস্তবায়ন তৈরিতে কম সময় ব্যয় করতে পারেন এবং আপনার নতুন পশ্চাদগামী-সামঞ্জস্যপূর্ণ বাস্তবায়ন ব্যবহার শুরু করতে পারেন।
ট্যাবগুলির জন্য মূল APIগুলি হল ActionBar
এবং ActionBar.Tab
এ। আপনার ট্যাব সংস্করণ-সচেতন করতে এগুলি বিমূর্ত করার জন্য API। Honeycomb (API লেভেল 11) এ নতুন ট্যাব বৈশিষ্ট্যের সুবিধা নেওয়ার সময় এই উদাহরণ প্রকল্পের প্রয়োজনীয়তাগুলি Eclair (API স্তর 5)-এ ফিরে সামঞ্জস্যের জন্য কল করে৷ এই দুটি বাস্তবায়ন এবং তাদের বিমূর্ত বেস ক্লাস (বা ইন্টারফেস) সমর্থন করার জন্য শ্রেণি কাঠামোর একটি চিত্র নীচে দেখানো হয়েছে।
![বিমূর্ত বেস ক্লাস এবং সংস্করণ-নির্দিষ্ট বাস্তবায়নের ক্লাস ডায়াগ্রাম।](https://developer.android.com/static/images/training/backward-compatible-ui-classes.png?authuser=4&hl=bn)
চিত্র 1. বিমূর্ত বেস ক্লাস এবং সংস্করণ-নির্দিষ্ট বাস্তবায়নের ক্লাস ডায়াগ্রাম।
বিমূর্ত ActionBar.Tab
একটি ট্যাব প্রতিনিধিত্বকারী একটি বিমূর্ত শ্রেণী তৈরি করে আপনার ট্যাব বিমূর্ততা স্তর তৈরি করা শুরু করুন, যা ActionBar.Tab
ইন্টারফেসকে মিরর করে:
কোটলিন
sealed class CompatTab(val tag: String) { ... abstract fun getText(): CharSequence abstract fun getIcon(): Drawable abstract fun getCallback(): CompatTabListener abstract fun getFragment(): Fragment abstract fun setText(text: String): CompatTab abstract fun setIcon(icon: Drawable): CompatTab abstract fun setCallback(callback: CompatTabListener): CompatTab abstract fun setFragment(fragment: Fragment): CompatTab ... }
জাভা
public abstract class CompatTab { ... public abstract CompatTab setText(int resId); public abstract CompatTab setIcon(int resId); public abstract CompatTab setTabListener( CompatTabListener callback); public abstract CompatTab setFragment(Fragment fragment); public abstract CharSequence getText(); public abstract Drawable getIcon(); public abstract CompatTabListener getCallback(); public abstract Fragment getFragment(); ... }
আপনি এখানে ইন্টারফেসের পরিবর্তে একটি বিমূর্ত শ্রেণী ব্যবহার করতে পারেন সাধারণ বৈশিষ্ট্যগুলির বাস্তবায়নকে সহজ করতে যেমন ট্যাব অবজেক্টের অ্যাসোসিয়েশনের সাথে অ্যাক্টিভিটি (কোড স্নিপেটে দেখানো হয়নি)।
অ্যাবস্ট্রাক্ট অ্যাকশনবার ট্যাব পদ্ধতি
এরপরে, একটি বিমূর্ত শ্রেণী সংজ্ঞায়িত করুন যা আপনাকে একটি কার্যকলাপে ট্যাব তৈরি করতে এবং যোগ করতে দেয়, যেমন ActionBar.newTab()
এবং ActionBar.addTab()
:
কোটলিন
sealed class TabHelper(protected val activity: FragmentActivity) { ... abstract fun setUp() fun newTab(tag: String): CompatTab { // This method is implemented in a later lesson. } abstract fun addTab(tab: CompatTab) ... }
জাভা
public abstract class TabHelper { ... public CompatTab newTab(String tag) { // This method is implemented in a later lesson. } public abstract void addTab(CompatTab tab); ... }
পরবর্তী পাঠে, আপনি TabHelper
এবং CompatTab
এর জন্য বাস্তবায়ন তৈরি করবেন যা পুরোনো এবং নতুন উভয় প্ল্যাটফর্ম সংস্করণে কাজ করে।