DialogFragment-এর মাধ্যমে ডায়ালগ দেখানো

DialogFragment হল একটি বিশেষ ফ্র্যাগমেন্ট সাবক্লাস যা ডায়ালগ তৈরি ও হোস্ট করার জন্য ডিজাইন করা হয়েছে। যদিও আপনাকে ফ্র্যাগমেন্টের মধ্যে ডায়ালগ হোস্ট করতে হবে না, তবে এটি করলে FragmentManager ডায়ালগের স্ট্যাটাস ম্যানেজ করতে এবং কনফিগারেশন পরিবর্তন হলে অটোমেটিক ডায়ালগ রিস্টোর করতে দেয়।

DialogFragment তৈরি করা

DialogFragment তৈরি করতে, এমন একটি ক্লাস তৈরি করুন যা DialogFragment-কে এক্সটেন্ড করে এবং onCreateDialog()-কে ওভাররাইড করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

Kotlin

class PurchaseConfirmationDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
            AlertDialog.Builder(requireContext())
                .setMessage(getString(R.string.order_confirmation))
                .setPositiveButton(getString(R.string.ok)) { _,_ -> }
                .create()

    companion object {
        const val TAG = "PurchaseConfirmationDialog"
    }
}

জাভা

public class PurchaseConfirmationDialogFragment extends DialogFragment {
   @NonNull
   @Override
   public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
       return new AlertDialog.Builder(requireContext())
               .setMessage(getString(R.string.order_confirmation))
               .setPositiveButton(getString(R.string.ok), (dialog, which) -> {} )
               .create();
   }

   public static String TAG = "PurchaseConfirmationDialog";
}

onCreateView() যেভাবে সাধারণ ফ্র্যাগমেন্টে রুট View তৈরি করে, ঠিক একইভাবে onCreateDialog() DialogFragment-এর অংশ হিসেবে দেখানোর জন্য Dialog তৈরি করে। DialogFragment ফ্র্যাগমেন্টের লাইফসাইকেলের উপযুক্ত অবস্থায় Dialog দেখানোর বিষয়টি ম্যানেজ করে।

onCreateView()-এর মতো, আপনি onCreateDialog() থেকে Dialog-এর যেকোনও সাবক্লাস ফেরত দিতে পারবেন এবং AlertDialog ব্যবহার করার ক্ষেত্রে কোনও সীমাবদ্ধতা নেই।

DialogFragment দেখান

আপনার DialogFragment দেখানোর জন্য আপনাকে ম্যানুয়ালি FragmentTransaction তৈরি করতে হবে না। পরিবর্তে, আপনার ডায়ালগ দেখাতে show() পদ্ধতি ব্যবহার করুন। আপনি FragmentTransaction ট্যাগ হিসেবে ব্যবহার করার জন্য FragmentManager এবং String-এর রেফারেন্স পাস করতে পারেন।

Fragment-এর মধ্যে থেকে DialogFragment তৈরি করার সময়, ফ্র্যাগমেন্টের চাইল্ড FragmentManager ব্যবহার করুন যাতে কনফিগারেশন পরিবর্তন করার পরে স্টেট সঠিকভাবে রিস্টোর হয়। একটি নন-নাল ট্যাগ আপনাকে পরে DialogFragment ফিরিয়ে আনার জন্য findFragmentByTag() ব্যবহার করতে দেয়।

Kotlin

// From another Fragment or Activity where you wish to show this
// PurchaseConfirmationDialogFragment.
PurchaseConfirmationDialogFragment().show(
     childFragmentManager, PurchaseConfirmationDialog.TAG)

জাভা

// From another Fragment or Activity where you wish to show this
// PurchaseConfirmationDialogFragment.
new PurchaseConfirmationDialogFragment().show(
       getChildFragmentManager(), PurchaseConfirmationDialog.TAG);

FragmentTransaction-এর উপর আরও নিয়ন্ত্রণ পেতে, আপনি show() ওভারলোড ব্যবহার করতে পারেন যা আগে থেকে থাকা FragmentTransaction গ্রহণ করে।

DialogFragment লাইফসাইকেল

DialogFragment স্ট্যান্ডার্ড ফ্র্যাগমেন্ট লাইফসাইকেল অনুসরণ করে, যার সাথে কিছু অতিরিক্ত লাইফসাইকেল কলব্যাক থাকে। সবচেয়ে সাধারণ কারণগুলি নিচে উল্লেখ করা হল:

  • onCreateDialog(): ফ্র্যাগমেন্ট ম্যানেজ ও দেখানোর জন্য Dialog প্রদান করতে এই কলব্যাক ওভাররাইড করুন।
  • onDismiss(): আপনার Dialog বাতিল করা হলে, কোনও কাস্টম লজিক পারফর্ম করতে হলে, এই কলব্যাক ওভাররাইড করুন, যেমন রিসোর্স রিলিজ করা বা পর্যবেক্ষণযোগ্য রিসোর্স থেকে আনসাবস্ক্রাইব করা।
  • onCancel(): আপনার Dialog বাতিল করা হলে, কোনও কাস্টম লজিক পারফর্ম করার প্রয়োজন হলে, এই কলব্যাক ওভাররাইড করুন।

DialogFragment-এ আপনার DialogFragment বাতিল করার সুবিধা বাতিল বা সেট করার পদ্ধতিও রয়েছে:

  • dismiss(): ফ্র্যাগমেন্ট ও তার ডায়ালগ বাতিল করুন। ফ্র্যাগমেন্টটি ব্যাক স্ট্যাকে যোগ করা হলে, এই এন্ট্রি পর্যন্ত এবং সহ সমস্ত ব্যাক স্ট্যাক স্টেট পপ করা হয়। অন্যথায়, ফ্র্যাগমেন্ট সরানোর জন্য নতুন ট্রানজ্যাকশন করা হয়।
  • setCancelable(): দেখানো Dialog বাতিল করা যাবে কিনা তা কন্ট্রোল করুন। সরাসরি Dialog.setCancelable(boolean)-এ কল করার পরিবর্তে এই পদ্ধতি ব্যবহার করুন।

Dialog-এর সাথে DialogFragment ব্যবহার করার সময় onCreateView() বা onViewCreated() ওভাররাইড করবেন না। ডায়ালগ শুধু ভিউ নয়—এগুলির নিজস্ব উইন্ডো আছে। তাই, onCreateView() ওভাররাইড করার জন্য এটি যথেষ্ট নয়। এছাড়াও, আপনি onCreateView() ওভাররাইড করে নাল নয় এমন ভিউ প্রদান না করলে, কাস্টম DialogFragment-এ onViewCreated() কখনও কল করা হয় না।

কাস্টম ভিউ ব্যবহার করুন

আপনি DialogFragment তৈরি করতে এবং onCreateView() ওভাররাইড করে একটি ডায়ালগ দেখাতে পারবেন। আপনি সাধারণ ফ্র্যাগমেন্টের মতো এটিকে layoutId দিতে পারেন অথবা DialogFragment কনস্ট্রাক্টর ব্যবহার করতে পারেন।

onCreateView()-এর মাধ্যমে ফেরত পাঠানো View অটোমেটিক ডায়ালগে যোগ করা হয়। বেশিরভাগ ক্ষেত্রে, এর অর্থ হল আপনাকে onCreateDialog() ওভাররাইড করতে হবে না, কারণ ডিফল্ট খালি ডায়ালগ আপনার ভিউ দিয়ে পূরণ করা হয়।

DialogFragment-এর কিছু সাবক্লাস, যেমন BottomSheetDialogFragment, আপনার ভিউকে এমন একটি ডায়ালগে এম্বেড করে যা স্ক্রিনের নিচে অ্যাটাচ করা শিটের মতো স্টাইল করা হয়।