DialogFragment সহ ডায়ালগগুলি প্রদর্শন করুন৷

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

একটি ডায়ালগ ফ্র্যাগমেন্ট তৈরি করুন

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

কোটলিন

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 প্রদর্শনের জন্য আপনাকে ম্যানুয়ালি একটি FragmentTransaction তৈরি করতে হবে না। পরিবর্তে, আপনার ডায়ালগ প্রদর্শন করতে show() পদ্ধতি ব্যবহার করুন। আপনি একটি FragmentManager এবং একটি FragmentTransaction ট্যাগ হিসাবে ব্যবহার করার জন্য একটি String এর একটি রেফারেন্স পাস করতে পারেন৷

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

কোটলিন

// 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 কিছু অতিরিক্ত লাইফসাইকেল কলব্যাক সহ স্ট্যান্ডার্ড ফ্র্যাগমেন্ট লাইফসাইকেল অনুসরণ করে। সবচেয়ে সাধারণ নিম্নরূপ:

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

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

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

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

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

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

onCreateView() দ্বারা প্রত্যাবর্তিত View স্বয়ংক্রিয়ভাবে ডায়ালগে যুক্ত হয়। বেশিরভাগ ক্ষেত্রে, এর মানে হল যে আপনাকে onCreateDialog() ওভাররাইড করতে হবে না, কারণ ডিফল্ট খালি ডায়ালগ আপনার ভিউতে পপুলেট করা হয়।

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