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" } }
Java
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()
Dialog
لعرضه كجزء من DialogFragment
. تتعامل السمة DialogFragment
مع عرض Dialog
في الحالات المناسبة خلال دورة حياة الجزء.
كما هي الحال في onCreateView()
، يمكنك عرض أي فئة فرعية من Dialog
اعتبارًا من onCreateDialog()
ولا تقتصر على استخدام
AlertDialog
.
عرض DialogFragment
ليس عليك إنشاء FragmentTransaction
يدويًا
لعرض DialogFragment
. يمكنك استخدام الطريقة show()
لعرض مربّع الحوار. يمكنك ضبط مرجع إلى FragmentManager
وString
لاستخدامه كعلامة FragmentTransaction
.
عند إنشاء
DialogFragment
من داخل Fragment
، يمكنك استخدام العنصر الثانوي
FragmentManager
للجزء حتى تتم استعادة الحالة بشكل صحيح
بعد تغييرات الإعدادات. تتيح لك العلامة غير الفارغة استخدام
findFragmentByTag()
لاسترداد DialogFragment
في وقت لاحق.
Kotlin
// From another Fragment or Activity where you wish to show this // PurchaseConfirmationDialogFragment. PurchaseConfirmationDialogFragment().show( childFragmentManager, PurchaseConfirmationDialog.TAG)
Java
// 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)
.
لا يمكنك تجاهل
onCreateView()
أو
onViewCreated()
عند استخدام DialogFragment
مع Dialog
. لا تُعد مربعات الحوار مجرد طرق
عرض - بل لها نافذتها الخاصة. وبناءً على ذلك، لا يكفي إلغاء
onCreateView()
. علاوةً على ذلك، لا يتم استدعاء onViewCreated()
أبدًا في
DialogFragment
مخصص ما لم يتم تجاوز onCreateView()
وتقديم
طريقة عرض غير فارغة.
استخدام طرق العرض المخصّصة
يمكنك إنشاء DialogFragment
وعرض مربّع حوار عند إلغاء
onCreateView()
.
ويمكنك إما إعطائه layoutId
، كما هو الحال مع الأجزاء المعتادة، أو استخدام
دالة DialogFragment
الإنشائية.
تتم تلقائيًا إضافة View
الذي يعرضه onCreateView()
إلى مربّع الحوار. وفي معظم الحالات، يعني ذلك أنّك
لا تحتاج إلى إلغاء
onCreateDialog()
،
لأنّ مربّع الحوار التلقائي الفارغ تتم تعبئته بطريقة العرض.
تتضمّن بعض الفئات الفرعية من DialogFragment
، مثل
BottomSheetDialogFragment
،
طريقة العرض الخاصة بك في مربّع حوار مصمّم على شكل بطاقة سفلية.