ফ্র্যাগমেন্ট বলতে কোনও অ্যাক্টিভিটির মধ্যে ইউজার ইন্টারফেসের মডিউলার অংশকে বোঝায়। ফ্র্যাগমেন্টের নিজস্ব লাইফসাইকেল আছে, এটি নিজস্ব ইনপুট ইভেন্ট পায় এবং অ্যাক্টিভিটি চলাকালীন আপনি ফ্র্যাগমেন্ট যোগ করতে বা সরাতে পারবেন।
এই ডকুমেন্ট থেকে জানা যায় যে কীভাবে ফ্র্যাগমেন্ট তৈরি করতে হয় এবং কোনও অ্যাক্টিভিটিতে সেটি অন্তর্ভুক্ত করতে হয়।
আপনার এনভায়রনমেন্ট সেট-আপ করুন
ফ্র্যাগমেন্টের জন্য
AndroidX ফ্র্যাগমেন্ট লাইব্রেরির উপর নির্ভরতা প্রয়োজন। এই ডিপেন্ডেন্সি যোগ করতে,
আপনার প্রোজেক্টের settings.gradle ফাইলে
Google Maven রিপোজিটরি
যোগ করতে হবে।
গ্ৰুভি
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
Kotlin
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
আপনার প্রোজেক্টে AndroidX ফ্র্যাগমেন্ট লাইব্রেরি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত
ডিপেন্ডেন্সি যোগ করুন:
গ্রোভি
dependencies { def fragment_version = "1.9.1" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" }
কোটলিন
dependencies { val fragment_version = "1.9.1" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") }
ফ্র্যাগমেন্ট ক্লাস তৈরি করুন
ফ্র্যাগমেন্ট তৈরি করতে, AndroidX
Fragment ক্লাস এক্সটেন্ড করুন এবং
আপনার অ্যাপ লজিক যোগ করতে এর পদ্ধতি ওভাররাইড করুন, যেভাবে আপনি
Activity ক্লাস তৈরি করেন। নিজস্ব লেআউট সংজ্ঞায়িত করে এমন একটি ন্যূনতম
ফ্র্যাগমেন্ট তৈরি করতে, বেস কনস্ট্রাক্টরে আপনার ফ্র্যাগমেন্টের লেআউট রিসোর্স
প্রদান করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
class ExampleFragment : Fragment(R.layout.example_fragment)
জাভা
class ExampleFragment extends Fragment { public ExampleFragment() { super(R.layout.example_fragment); } }
এছাড়াও, ফ্র্যাগমেন্ট লাইব্রেরি আরও বিশেষ ফ্র্যাগমেন্ট বেস ক্লাস প্রদান করে:
DialogFragment- ফ্লোটিং ডায়ালগ দেখায়। ডায়ালগ তৈরি করার জন্য এই ক্লাস ব্যবহার করা হল
Activityক্লাসে ডায়ালগ হেল্পার পদ্ধতি ব্যবহার করার একটি ভালো বিকল্প, কারণ ফ্র্যাগমেন্ট অটোমেটিকDialogতৈরি ও ক্লিনআপ ম্যানেজ করে। আরও বিবরণের জন্যDialogFragment-এর সাথে ডায়ালগ দেখানো দেখুন। PreferenceFragmentCompatPreferenceঅবজেক্টের হায়ারার্কি তালিকা হিসেবে দেখায়। আপনিPreferenceFragmentCompatব্যবহার করে আপনার অ্যাপের জন্য সেটিংস স্ক্রিন তৈরি করতে পারবেন।
অ্যাক্টিভিটিতে ফ্র্যাগমেন্ট যোগ করা
সাধারণত, আপনার ফ্র্যাগমেন্ট অবশ্যই AndroidX
FragmentActivity-এর মধ্যে এম্বেড করা থাকতে হবে যাতে
সেই অ্যাক্টিভিটির লেআউটে UI-এর একটি অংশ কন্ট্রিবিউট করা যায়। FragmentActivity
হল
AppCompatActivity-এর মূল ক্লাস,
তাই আপনি যদি আগে থেকেই আপনার অ্যাপে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি
প্রদান করার জন্য AppCompatActivity-এর সাবক্লাস তৈরি করে থাকেন, তাহলে আপনাকে অ্যাক্টিভিটির
মূল ক্লাস পরিবর্তন করতে হবে না।
আপনি অ্যাক্টিভিটির লেআউট ফাইলে ফ্র্যাগমেন্ট সংজ্ঞায়িত করে অথবা অ্যাক্টিভিটির লেআউট ফাইলে ফ্র্যাগমেন্ট কন্টেনার সংজ্ঞায়িত করে এবং তারপর অ্যাক্টিভিটির মধ্যে থেকে প্রোগ্রাম্যাটিক্যালি ফ্র্যাগমেন্ট যোগ করে অ্যাক্টিভিটির ভিউ হায়ারার্কিতে ফ্র্যাগমেন্ট যোগ করতে পারবেন। দুটি ক্ষেত্রেই, আপনাকে
একটি
FragmentContainerView
যোগ করতে হবে যা অ্যাক্টিভিটির ভিউ হায়ারার্কির মধ্যে ফ্র্যাগমেন্টটি কোথায় রাখতে হবে তা নির্ধারণ করে। ফ্র্যাগমেন্টের কন্টেনার হিসেবে সবসময় FragmentContainerView ব্যবহার করার জন্য বিশেষভাবে সাজেস্ট করা হয়, কারণ FragmentContainerView-এ ফ্র্যাগমেন্টের জন্য নির্দিষ্ট সমাধান অন্তর্ভুক্ত থাকে যা FrameLayout-এর মতো অন্যান্য ভিউ গ্রুপে থাকে না।
XML-এর মাধ্যমে ফ্র্যাগমেন্ট যোগ করা
আপনার অ্যাক্টিভিটি লেআউটের XML-এ ডিক্লারেটিভভাবে ফ্র্যাগমেন্ট যোগ করতে, FragmentContainerView এলিমেন্ট ব্যবহার করুন।
এখানে একটি অ্যাক্টিভিটি লেআউটের উদাহরণ দেওয়া হল যাতে একটি
FragmentContainerView আছে:
<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.ExampleFragment" />
android:name অ্যাট্রিবিউটটি ইনস্ট্যান্টিয়েট করার জন্য Fragment-এর ক্লাস নাম নির্দিষ্ট করে। অ্যাক্টিভিটির লেআউট ইনফ্লেট করা হলে, নির্দিষ্ট ফ্র্যাগমেন্ট
ইনস্ট্যান্টিয়েট করা হয়,
onInflate()
নতুন ইনস্ট্যান্টিয়েট করা ফ্র্যাগমেন্টে কল করা হয় এবং FragmentManager-এ ফ্র্যাগমেন্ট যোগ করার জন্য
FragmentTransaction তৈরি করা হয়।
প্রোগ্রাম্যাটিক্যালি ফ্র্যাগমেন্ট যোগ করা
আপনার অ্যাক্টিভিটির লেআউটে প্রোগ্রাম্যাটিক্যালি ফ্র্যাগমেন্ট যোগ করতে, ফ্র্যাগমেন্ট কন্টেনার হিসেবে কাজ করার জন্য লেআউটে FragmentContainerView অন্তর্ভুক্ত করতে হবে,
যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
XML পদ্ধতির মতো, android:name অ্যাট্রিবিউট এখানে FragmentContainerView-এ ব্যবহার করা হয় না, তাই কোনও নির্দিষ্ট ফ্র্যাগমেন্ট অটোমেটিক ইনস্ট্যান্টিয়েট করা হয় না। পরিবর্তে, একটি ফ্র্যাগমেন্ট ইনস্ট্যান্টিয়েট করতে এবং অ্যাক্টিভিটির লেআউটে এটি যোগ করতে, একটি
FragmentTransaction
ব্যবহার করা হয়।
আপনার অ্যাক্টিভিটি চলাকালীন, আপনি ফ্র্যাগমেন্ট ট্রানজ্যাকশন করতে পারেন যেমন
ফ্র্যাগমেন্ট যোগ করা, সরানো বা প্রতিস্থাপন করা। আপনার FragmentActivity-এ, আপনি
FragmentManager-এর একটি ইনস্ট্যান্স
পেতে পারেন, যা
FragmentTransaction তৈরি করতে ব্যবহার করা যেতে পারে। তারপর, আপনি FragmentTransaction.add() ব্যবহার করে আপনার অ্যাক্টিভিটির onCreate() মেথডের মধ্যে আপনার ফ্র্যাগমেন্ট ইনস্ট্যান্টিয়েট করতে পারেন, আপনার লেআউটে কন্টেনারের ViewGroup আইডি এবং আপনি যে ফ্র্যাগমেন্ট ক্লাস যোগ করতে চান তা পাস করে এবং তারপর ট্রানজ্যাকশনটি কমিট করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
class ExampleActivity : AppCompatActivity(R.layout.example_activity) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { supportFragmentManager.commit { setReorderingAllowed(true) add<ExampleFragment>(R.id.fragment_container_view) } } } }
জাভা
public class ExampleActivity extends AppCompatActivity { public ExampleActivity() { super(R.layout.example_activity); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .setReorderingAllowed(true) .add(R.id.fragment_container_view, ExampleFragment.class, null) .commit(); } } }
আগের উদাহরণে, লক্ষ্য করুন যে ফ্র্যাগমেন্ট ট্রানজ্যাকশন শুধুমাত্র তখনই তৈরি হয়
যখন savedInstanceState হল null। এটি নিশ্চিত করে যে ফ্র্যাগমেন্টটি
শুধুমাত্র একবার যোগ করা হয়েছে, যখন অ্যাক্টিভিটি প্রথম তৈরি করা হয়। যখন কোনও
কনফিগারেশন পরিবর্তন হয় এবং অ্যাক্টিভিটি আবার তৈরি করা হয়,
savedInstanceState আর null থাকে না এবং ফ্র্যাগমেন্ট দ্বিতীয়বার
যোগ করার প্রয়োজন হয় না, কারণ ফ্র্যাগমেন্ট অটোমেটিক
savedInstanceState থেকে রিস্টোর করা হয়।
আপনার ফ্র্যাগমেন্টের জন্য কিছু প্রাথমিক ডেটার প্রয়োজন হলে, নিচে দেখানো পদ্ধতি অনুযায়ী FragmentTransaction.add()-এ কল করার সময় Bundle প্রদান করে আপনার ফ্র্যাগমেন্টে আর্গুমেন্ট পাস করা যেতে পারে:
Kotlin
class ExampleActivity : AppCompatActivity(R.layout.example_activity) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { val bundle = bundleOf("some_int" to 0) supportFragmentManager.commit { setReorderingAllowed(true) add<ExampleFragment>(R.id.fragment_container_view, args = bundle) } } } }
জাভা
public class ExampleActivity extends AppCompatActivity { public ExampleActivity() { super(R.layout.example_activity); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { Bundle bundle = new Bundle(); bundle.putInt("some_int", 0); getSupportFragmentManager().beginTransaction() .setReorderingAllowed(true) .add(R.id.fragment_container_view, ExampleFragment.class, bundle) .commit(); } } }
requireArguments() কল করে
আপনার ফ্র্যাগমেন্টের মধ্যে থেকে
Bundle আর্গুমেন্টগুলি তখন ফিরিয়ে আনা যেতে পারে,
এবং প্রতিটি আর্গুমেন্ট ফিরিয়ে আনার জন্য উপযুক্ত Bundle গেটার পদ্ধতি ব্যবহার করা যেতে পারে।
Kotlin
class ExampleFragment : Fragment(R.layout.example_fragment) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val someInt = requireArguments().getInt("some_int") ... } }
জাভা
class ExampleFragment extends Fragment { public ExampleFragment() { super(R.layout.example_fragment); } @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { int someInt = requireArguments().getInt("some_int"); ... } }
এছাড়াও দেখুন
ফ্র্যাগমেন্ট ট্রানজ্যাকশন এবং FragmentManager সম্পর্কে আরও বিস্তারিত তথ্য
ফ্র্যাগমেন্ট ম্যানেজার নির্দেশিকাতে দেওয়া আছে।