Fragment হল Android-এ একটি পুনঃব্যবহারযোগ্য UI উপাদান যা Activity-তে এম্বেড করা হয় এবং FragmentManager-এর মাধ্যমে পরিচালিত হয়। প্রতিটি ফ্র্যাগমেন্টের নিজস্ব জীবনচক্র, layout এবং অবস্থা থাকে। Fragment বিভিন্ন স্ক্রিন সাইজের সাথে খাপ খাওয়ানো এবং কোড পুনঃব্যবহার সহজ করে। Google-এর অফিসিয়াল গাইডে আরও পড়ুন।
মূল পয়েন্ট
Fragment হল একটি মডুলার Android ইউজার ইন্টারফেস উপাদান যা Activity-র ভিতরে স্ক্রিনের একটি অংশ উপস্থাপন করে। Fragment তার নিজস্ব layout পরিচালনা করতে পারে, জীবনচক্র ইভেন্টগুলি হ্যান্ডেল করতে পারে এবং তার অবস্থা সংরক্ষণ করতে পারে। মডুলারিটির কারণে, একটি ফ্র্যাগমেন্ট বিভিন্ন Activity এবং বিভিন্ন ডিভাইসে ব্যবহার করা যেতে পারে।
Fragment API Android 3.0 (Honeycomb, API 11)-এ 2011 সালে ট্যাবলেট সমর্থনের জন্য আবির্ভূত হয়েছিল। এর আগে, ডেভেলপারদের ফোন এবং ট্যাবলেটের জন্য আলাদা Activity তৈরি করতে হতো। Fragment স্বাধীন ব্লক থেকে স্ক্রিন একত্রিত করা সম্ভব করেছে। 2019 সালে, Google API 4 পর্যন্ত পশ্চাদগামী সামঞ্জস্য সহ Jetpack Fragment লাইব্রেরি প্রকাশ করে।
Google (2026) অনুসারে, Google Play-তে 80% অ্যাপ কোনো না কোনো形式上 Fragment ব্যবহার করে। Jetpack Fragment লাইব্রেরি Google Play Services-এর মাধ্যমে 10 বিলিয়নেরও বেশি বার ডাউনলোড হয়েছে। Jetpack Compose-এর যুগেও Fragment Android আর্কিটেকচারের একটি মূল উপাদান রয়ে গেছে।
Fragment-এর জীবনচক্র Activity-র চেয়ে বেশি জটিল কারণ এটি হোস্ট Activity-র অবস্থার উপর নির্ভর করে। Fragment Activity-র মতো একই অবস্থার মধ্য দিয়ে যায় কিন্তু নিজস্ব কলব্যাক যোগ করে: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach।
| Fragment কলব্যাক | Activity সমতুল্য | উদ্দেশ্য |
|---|---|---|
| onAttach | onCreate-এর আগে | Fragment Activity-র সাথে সংযুক্ত |
| onCreate | onCreate | নন-UI ডেটার প্রাথমিককরণ |
| onCreateView | onCreate | inflater-এর মাধ্যমে layout তৈরি |
| onViewCreated | onCreate | ভিউ তৈরির পর UI উপাদান বাঁধাই |
| onDestroyView | onDestroy | ভিউ অপসারণ, UI রিসোর্স মুক্ত করা |
| onDetach | onDestroy | Fragment Activity থেকে বিচ্ছিন্ন |
Fragment জীবনচক্রের প্রধান পার্থক্য হল onCreate এবং onDestroy-এর মধ্যে onCreateView এবং onDestroyView-এর আহ্বান। Fragment UI ছাড়া থাকতে পারে (যদি onCreateView null ফেরত দেয়)। Activity পুনর্নির্মাণের পর, FragmentManager স্বয়ংক্রিয়ভাবে ফ্র্যাগমেন্ট পুনরুদ্ধার করে।
FragmentManager Activity-তে ফ্র্যাগমেন্ট পরিচালনার জন্য কেন্দ্রীয় ক্লাস। এটি ফ্র্যাগমেন্ট যোগ, অপসারণ, প্রতিস্থাপন, ব্যাক স্ট্যাক পরিচালনা এবং অবস্থা পুনরুদ্ধারের জন্য দায়ী। FragmentManager supportFragmentManager (AndroidX) বা fragmentManager (পুরানো API)-এর মাধ্যমে উপলব্ধ।
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ফ্র্যাগমেন্ট এখনও যোগ করা হয়নি — তৈরি করা হচ্ছে
if (savedInstanceState == null) {
val transaction = this.supportFragmentManager
.beginTransaction()
transaction.add(R.id.fragment_container, ListFragment())
transaction.addToBackStack(null)
transaction.commit()
}
}
fun replaceFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(null)
.commit()
}
}FragmentTransaction লেনদেন পারমাণবিক। commit() পরবর্তী Looper চক্রে নির্বাহ নির্ধারণ করে। তাৎক্ষণিক নির্বাহের জন্য commitNow() ব্যবহার করুন। addToBackStack(null) লেনদেনটি ব্যাক স্ট্যাকে যোগ করে — ব্যাক বাটন অপারেশনটি পূর্বাবস্থায় ফিরিয়ে আনবে।
Kotlin-এ একটি উদাহরণ সহ Fragment জীবনচক্রের মূল পদ্ধতিগুলি দেখি। onCreateView একটি layout তৈরি করে — Activity-র বিপরীতে, পদ্ধতিটিকে একটি View ফেরত দিতে হয়। onViewCreated এর সাথে সাথেই কল করা হয়, এখানে id দ্বারা উপাদান খুঁজে পাওয়া নিরাপদ। onDestroyView ভিউ রেফারেন্স পরিষ্কার করার শেষ মুহূর্ত।
class DetailFragment : Fragment() {
private var _binding: FragmentDetailBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentDetailBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.textTitle.setText("বিবরণ")
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}View Binding প্যাটার্ন _binding/binding-সহ নিশ্চিত করে যে onDestroyView-এর পর layout রেফারেন্স শূন্য হয়ে যায়। ভিউ ধ্বংসের পর binding অ্যাক্সেস করলে NullPointerException হবে। Google সব ফ্র্যাগমেন্টের জন্য এই প্যাটার্ন সুপারিশ করে।
ফ্র্যাগমেন্টের মধ্যে ডেটা স্থানান্তরের জন্য Android বেশ কয়েকটি প্রক্রিয়া সরবরাহ করে। সবচেয়ে নির্ভরযোগ্য হল একটি ভাগ করা ViewModel, যা একটি Activity-র ফ্র্যাগমেন্টের মধ্যে ভাগ করা হয়। Fragment Result API এককালীন ইভেন্টের জন্য উপযুক্ত। Bundle আর্গুমেন্ট ফ্র্যাগমেন্ট তৈরির সময় ডেটার জন্য।
// দুটি ফ্র্যাগমেন্টের জন্য ভাগ করা ViewModel
class SharedViewModel : ViewModel() {
private val _selectedItem = MutableLiveData<Item>()
val selectedItem: LiveData<Item> = _selectedItem
fun select(item: Item) { _selectedItem.setValue(item) }
}
// ফ্র্যাগমেন্ট A: Fragment Result API-এর মাধ্যমে ইভেন্ট পাঠায়
setFragmentResult("request_key", bundleOf("key" to "value"))
// ফ্র্যাগমেন্ট B: ইভেন্ট গ্রহণ করে
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
val value = bundle.getString("key")
}Fragment Result API (Fragment 1.3.0-এ যোগ করা হয়েছে) অবচিত setTargetFragment/onActivityResult-কে প্রতিস্থাপন করে। API টাইপ-নিরাপদ, Bundle ব্যবহার করে এবং প্রাপকের জ্ঞানের প্রয়োজন হয় না। Parent FragmentManager ফ্র্যাগমেন্টের মধ্যে মধ্যস্থতাকারী হিসেবে কাজ করে।
Fragment এবং Activity-র মধ্যে পছন্দ অ্যাপ্লিকেশন আর্কিটেকচারের উপর নির্ভর করে। Fragment অভিযোজিত লেআউট (ফোন + ট্যাবলেট), কাস্টম ট্রানজিশন অ্যানিমেশন এবং Jetpack Navigation ব্যবহারের জন্য বাধ্যতামূলক। Activity এক বা দুটি স্ক্রিনযুক্ত সরল অ্যাপের জন্য পছন্দনীয়।
| মানদণ্ড | Fragment | Activity |
|---|---|---|
| সৃষ্টির গতি | দ্রুত (হালকা উপাদান) | ধীর (সিস্টেম প্রক্রিয়া) |
| পুনঃব্যবহারযোগ্যতা | উচ্চ (এক ফ্র্যাগমেন্ট বিভিন্ন Activity-তে) | নিম্ন (প্রতিটি স্ক্রিনের নিজস্ব Activity) |
| ট্রানজিশন অ্যানিমেশন | নমনীয় (FragmentTransaction) | সীমিত (overridePendingTransition) |
| ঘোরানোর সময় সংরক্ষণ | স্বয়ংক্রিয় (ম্যানেজার পুনরুদ্ধার করে) | ম্যানুয়াল (onSaveInstanceState) |
| Deep Links | Navigation Component-এর মাধ্যমে | intent-filter-এর মাধ্যমে নেটিভ সমর্থন |
Fragment-এর সাথে কাজ করার আধুনিক পদ্ধতি হল Jetpack Navigation Component, যা ম্যানুয়াল FragmentManager পরিচালনা প্রতিস্থাপন করে। লাইব্রেরিটি NavGraph (XML নেভিগেশন গ্রাফ), NavHostFragment এবং টাইপ-নিরাপদ ডেটা স্থানান্তরের জন্য Safe Args সরবরাহ করে।
Jetpack Fragment লাইব্রেরি (androidx.fragment:fragment-ktx)-এ FragmentResult API, DialogFragment, BottomSheetDialogFragment এবং Lifecycle-aware উপাদানের সাথে একীকরণ অন্তর্ভুক্ত। 2026 সাল থেকে, Google সরাসরি না করে শুধুমাত্র Jetpack Navigation-এর মাধ্যমে Fragment ব্যবহার করার সুপারিশ করে।
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:startDestination="@+id/listFragment">
<fragment
android:id="@+id/listFragment"
android:name=".ListFragment"
android:label="তালিকা">
<action
android:id="@+id/action_list_to_detail"
app:destination="@+id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name=".DetailFragment"
android:label="বিবরণ" />
</navigation>সচরাচর জিজ্ঞাসিত প্রশ্ন
FragmentManager একটি ক্লাস যা ফ্র্যাগমেন্ট লেনদেন পরিচালনা করে। এটি Activity কন্টেইনে ফ্র্যাগমেন্ট যোগ, অপসারণ এবং প্রতিস্থাপন করে। FragmentManager Activity পুনর্নির্মাণের সময় ফ্র্যাগমেন্ট অবস্থা পুনরুদ্ধার করে এবং ব্যাক স্ট্যাক পরিচালনা করে।
Fragment Activity-র ভিতরে UI-র একটি অংশ, এটি স্বাধীনভাবে থাকতে পারে না। Fragment স্ক্রিন ঘোরানোর সময় Activity পুনর্নির্মাণ থেকে বেঁচে যায়। Activity তার নিজস্ব Lifecycle-সহ একটি পূর্ণ স্ক্রিন, Fragment Activity-র Lifecycle-এর উপর নির্ভর করে।
Fragment — যখন স্ক্রিনে বেশ কয়েকটি স্বাধীন ব্লক থাকে (ট্যাব, মাস্টার-ডিটেল, ট্যাবলেট অভিযোজন)। Activity — যখন স্ক্রিনে পুনরাবৃত্তিযোগ্য ব্লক না থাকে। Google Single Activity + একাধিক Fragment সুপারিশ করে।
তিনটি উপায়: প্যারেন্ট Activity-র মাধ্যমে (ভাগ করা ViewModel), Fragment Result API (setFragmentResult)-এর মাধ্যমে, Fragment তৈরির সময় Bundle আর্গুমেন্টের মাধ্যমে। ViewModel পছন্দের পদ্ধতি কারণ ডেটা পুনর্নির্মাণের সময় সংরক্ষিত থাকে।
Fragment Transaction একটি পারমাণবিক অপারেশন যা ফ্র্যাগমেন্ট সেট পরিবর্তন করে। FragmentManager.beginTransaction() একটি লেনদেন খোলে যেখানে add, remove, replace, hide, show কল করা যায়। প্রতিটি লেনদেন commit() বা commitNow()-এর মাধ্যমে শেষ হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন