DialogFragment
खास फ़्रैगमेंट सब-क्लास, जिसे बनाने और होस्ट करने के लिए डिज़ाइन किया गया है
डायलॉग शामिल किए गए हैं. हालांकि, आपको यह करने की ज़रूरत नहीं है
अपने डायलॉग बॉक्स को किसी फ़्रैगमेंट में होस्ट करें, ताकि आपके डायलॉग बॉक्स में
राज्य का नाम FragmentManager
मैनेज करें
और कॉन्फ़िगरेशन के दौरान डायलॉग को अपने-आप पहले जैसा कर दें
बदलाव होता है.
कोई Dialogफ़्रैगमेंट बनाएं
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
.
Dialogफ़्रैगमेंट दिखाएं
आपको मैन्युअल तरीके से FragmentTransaction
बनाने की ज़रूरत नहीं है
अपने DialogFragment
को दिखाएं. इसके बजाय, show()
तरीके का इस्तेमाल करके
अपना डायलॉग दिखाएं. आपके पास, FragmentManager
को रेफ़रंस पास करने का विकल्प है
और FragmentTransaction
टैग के तौर पर इस्तेमाल करने के लिए, एक String
.
कॉन्टेंट बनाते समय
Fragment
में से DialogFragment
, फ़्रैगमेंट का इस्तेमाल करें
चाइल्ड FragmentManager
, ताकि राज्य सही तरीके से पहले जैसा हो जाए
कॉन्फ़िगरेशन में बदलाव होने के बाद. बिना शून्य टैग वाले टैग से आप
DialogFragment
को बाद में वापस पाने के लिए, findFragmentByTag()
.
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
को स्वीकार करता है.
Dialogफ़्रैगमेंट लाइफ़साइकल
DialogFragment
, स्टैंडर्ड फ़्रैगमेंट लाइफ़साइकल का पालन करता है,
कुछ अतिरिक्त लाइफ़साइकल कॉलबैक के साथ. सबसे ज़्यादा
कुछ सामान्य समस्याओं के बारे में नीचे बताया गया है:
onCreateDialog()
: इस कॉलबैक को ओवरराइड करें, ताकि फ़्रैगमेंट के लिएDialog
दिया जा सके मैनेज करने और दिखाने के लिए इस्तेमाल किया जाता है.onDismiss()
: इस कॉलबैक को ओवरराइड करें आपकीDialog
को खारिज कर दिया जाएगा. जैसे, संसाधनों को रिलीज़ करना या सदस्यता छोड़ना ट्रैक किए जा सकने वाले संसाधनों से लिए जाते हैं.onCancel()
: इस कॉलबैक को तब ओवरराइड करें, जब आपको अपनेDialog
रद्द कर दी गई है.
DialogFragment
में, रद्द करने की सुविधा को खारिज करने या सेट करने के तरीके भी मौजूद हैं
आपके DialogFragment
में से:
dismiss()
: फ़्रैगमेंट और उसके डायलॉग को खारिज करें. अगर फ़्रैगमेंट को पिछली गतिविधियों में, इस एंट्री तक की सभी बैक स्टैक स्थिति की जानकारी पॉप-अप होती है. इसमें इस एंट्री को भी शामिल किया जाता है. ऐसा न करने पर, नया ट्रांज़ैक्शन तब होगा, जब फ़्रैगमेंट हटा दिया जाएगा.setCancelable()
: यह कंट्रोल करना कि दिखाए जा रहेDialog
को रद्द किया जा सकता है या नहीं. इस तरीके का इस्तेमाल करें के बजायDialog.setCancelable(boolean)
.
आप ओवरराइड नहीं करते हैं
onCreateView()
या
onViewCreated()
जब Dialog
के साथ DialogFragment
का इस्तेमाल किया जा रहा हो. डायलॉग सिर्फ़ ऐसे नहीं होते
व्यू—उनकी विंडो भी होती है. इसलिए, ओवरराइड करना ही काफ़ी नहीं है
onCreateView()
. इसके अलावा, onViewCreated()
को
कस्टम DialogFragment
, अगर आपने onCreateView()
और
ने एक गैर-शून्य व्यू दिया है.
कस्टम व्यू का इस्तेमाल करें
DialogFragment
बनाया जा सकता है और ओवरराइड करके डायलॉग बॉक्स दिखाया जा सकता है
onCreateView()
.
आप या तो इसे layoutId
दे सकते हैं, जैसा कि सामान्य फ़्रैगमेंट के साथ दिया जाता है या
DialogFragment
कंस्ट्रक्टर.
onCreateView()
ने View
लौटाए
डायलॉग में अपने-आप जुड़ जाता है. ज़्यादातर मामलों में, इसका मतलब है कि
बदलने की ज़रूरत नहीं है
onCreateDialog()
ऐसा इसलिए ज़रूरी है, क्योंकि आपके व्यू से, डिफ़ॉल्ट तौर पर खाली डायलॉग बॉक्स में जानकारी अपने-आप भर जाती है.
DialogFragment
की कुछ सब-क्लास, जैसे
BottomSheetDialogFragment
,
अपने व्यू को बॉटम शीट की स्टाइल वाले डायलॉग में एम्बेड करें.