একটি 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
, আপনার ভিউকে একটি ডায়ালগে এম্বেড করে যা নিচের শীট হিসেবে স্টাইল করা হয়।