একটি খণ্ড তৈরি করুন

একটি খণ্ড একটি কার্যকলাপের মধ্যে ব্যবহারকারী ইন্টারফেসের একটি মডুলার অংশ প্রতিনিধিত্ব করে। একটি খণ্ডের নিজস্ব জীবনচক্র থাকে, এটির নিজস্ব ইনপুট ইভেন্টগুলি গ্রহণ করে, এবং যখন থাকা কার্যকলাপটি চলছে তখন আপনি খণ্ডগুলি যোগ করতে বা সরাতে পারেন৷

এই দস্তাবেজটি বর্ণনা করে যে কীভাবে একটি খণ্ড তৈরি করা যায় এবং এটি একটি কার্যকলাপে অন্তর্ভুক্ত করা যায়।

আপনার পরিবেশ সেট আপ করুন

ফ্র্যাগমেন্টের জন্য AndroidX ফ্র্যাগমেন্ট লাইব্রেরির উপর নির্ভরতা প্রয়োজন। এই নির্ভরতা অন্তর্ভুক্ত করার জন্য আপনাকে আপনার প্রকল্পের settings.gradle ফাইলে Google Maven সংগ্রহস্থল যোগ করতে হবে।

গ্রোভি

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        ...
    }
}

কোটলিন

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        ...
    }
}

আপনার প্রকল্পে AndroidX ফ্র্যাগমেন্ট লাইব্রেরি অন্তর্ভুক্ত করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত নির্ভরতা যোগ করুন:

গ্রোভি

dependencies {
    def fragment_version = "1.8.3"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
}

কোটলিন

dependencies {
    val fragment_version = "1.8.3"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
}

একটি খণ্ড ক্লাস তৈরি করুন

একটি ফ্র্যাগমেন্ট তৈরি করতে, AndroidX Fragment ক্লাস প্রসারিত করুন এবং আপনার অ্যাপের লজিক সন্নিবেশ করার জন্য এর পদ্ধতিগুলিকে ওভাররাইড করুন, আপনি যেভাবে একটি Activity ক্লাস তৈরি করবেন তার অনুরূপ। একটি ন্যূনতম খণ্ড তৈরি করতে যা তার নিজস্ব লেআউটকে সংজ্ঞায়িত করে, বেস কনস্ট্রাক্টরকে আপনার খণ্ডের লেআউট সংস্থান প্রদান করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

class ExampleFragment : Fragment(R.layout.example_fragment)

জাভা

class ExampleFragment extends Fragment {
    public ExampleFragment() {
        super(R.layout.example_fragment);
    }
}

ফ্র্যাগমেন্ট লাইব্রেরি আরও বিশেষায়িত ফ্র্যাগমেন্ট বেস ক্লাস প্রদান করে:

DialogFragment
একটি ভাসমান ডায়ালগ প্রদর্শন করে। একটি ডায়ালগ তৈরি করতে এই ক্লাসটি ব্যবহার করা Activity ক্লাসে ডায়ালগ সহায়ক পদ্ধতিগুলি ব্যবহার করার একটি ভাল বিকল্প, কারণ টুকরোগুলি স্বয়ংক্রিয়ভাবে Dialog তৈরি এবং পরিষ্কার করার কাজ পরিচালনা করে। আরও বিশদ বিবরণের জন্য DialogFragment সাথে ডায়ালগ প্রদর্শন করা দেখুন।
PreferenceFragmentCompat
একটি তালিকা হিসাবে Preference বস্তুর একটি শ্রেণিবিন্যাস প্রদর্শন করে। আপনি আপনার অ্যাপের জন্য একটি সেটিংস স্ক্রিন তৈরি করতে PreferenceFragmentCompat ব্যবহার করতে পারেন।

একটি কার্যকলাপে একটি খণ্ড যোগ করুন

সাধারণত, সেই কার্যকলাপের লেআউটে UI এর একটি অংশ অবদান রাখতে আপনার খণ্ডটিকে অবশ্যই একটি AndroidX FragmentActivity মধ্যে এম্বেড করতে হবে। 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 তৈরি করতে ব্যবহার করা যেতে পারে। তারপর, আপনি আপনার ক্রিয়াকলাপের onCreate() পদ্ধতির মধ্যে FragmentTransaction.add() ব্যবহার করে আপনার খণ্ডটি ইনস্ট্যান্টিয়েট করতে পারেন, আপনার লেআউটের কন্টেইনারটির ViewGroup আইডি এবং আপনি যে ফ্র্যাগমেন্ট ক্লাস যোগ করতে চান এবং তারপরে লেনদেনটি করতে চান, তাতে দেখানো হয়েছে নিম্নলিখিত উদাহরণ:

কোটলিন

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 প্রদান করে আর্গুমেন্টগুলি আপনার খণ্ডে পাঠানো যেতে পারে:

কোটলিন

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();
        }
    }
}

আর্গুমেন্ট Bundle তারপর আপনার টুকরো থেকে requireArguments() কল করে পুনরুদ্ধার করা যেতে পারে এবং প্রতিটি আর্গুমেন্ট পুনরুদ্ধার করতে উপযুক্ত Bundle গেটার পদ্ধতি ব্যবহার করা যেতে পারে।

কোটলিন

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 ফ্র্যাগমেন্ট ম্যানেজার গাইডে আরও বিস্তারিতভাবে কভার করা হয়েছে।