Dialogफ़्रैगमेंट के साथ डायलॉग दिखाएं

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, अपने व्यू को बॉटम शीट की स्टाइल वाले डायलॉग में एम्बेड करें.