2011-12-06 26 views
57

मैं DialogFragment का उपयोग कर रहा हूं, और जब मैंने दबाए जाने पर संवाद को बंद करने के लिए सफलतापूर्वक एक छवि सेट की है (यानी खारिज कर दिया गया है), जब भी उपयोगकर्ता इसके बाहर कहीं भी क्लिक करता है तो संवाद को खारिज करने का तरीका ढूंढने में कठिनाई हो रही है, यह सामान्य संवाद के साथ काम करता है। मैंने सोचा किसंवाद के बाहर दबाते समय डायलॉगफ्रैगमेंट को कैसे खारिज करें?

dialogFragment.setCanceledOnTouchOutside(true); 

कॉल, लेकिन मुझे यह दस्तावेज में नहीं दिख रहा है।

क्या यह DialogFragment पर संभव है? या मैं गलत जगहों पर देख रहा हूँ? मैंने 'पैरेंट' गतिविधि में टच इवेंट्स को अवरुद्ध करने की कोशिश की लेकिन किसी भी टच इवेंट नहीं मिलने के अलावा, यह मेरे लिए सही नहीं लग रहा था।

उत्तर

136
DialogFragment.getDialog().setCanceledOnTouchOutside(true); 

(के रूप में अपूर्व गुप्ता ने बताया) onCreateView में बुलाया जाना चाहिए।

+26

'ऑनक्रेट व्यू' –

+0

में कॉल किया जाना चाहिए यदि मैं इसे रद्द नहीं करना चाहता हूं लेकिन इसके बजाय बस बंद करूँ? – jjxtra

50
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ... 
     getDialog().setCanceledOnTouchOutside(true); 
     ... 
     } 
1
DialogFragment.getDialog().setCanceledOnTouchOutside(false); 

यह गलत लिख दिया गया था। मुझे भी यही समस्या थी। यह एंड्रॉयड मोनो के लिए जावा और मोनो के लिए ठीक काम करता है हो जाएगा:

this.getDialog().SetCanceledOnTouchOutside(false); 
18
/** The system calls this only when creating the layout in a dialog. */ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // The only reason you might override this method when using onCreateView() is 
     // to modify any dialog characteristics. For example, the dialog includes a 
     // title by default, but your custom layout might not need it. So here you can 
     // remove the dialog title, but you must call the superclass to get the Dialog. 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setCanceledOnTouchOutside(true); 

     return dialog; 
    } 
+0

यह मेरे लिए काम नहीं किया। मुझे @Apurv के अनुसार 'onCreateView' में' setCanceledOnTouchOutside' को कॉल करना पड़ा था। मुझे जिक्र करना चाहिए कि मैंने 'setCanceledOnTouchOutside (false)' – kimbaudi

0

मैं केवल ऊपर समाधान बाहर की कोशिश कर के बाद मेरे समाधान का उपयोग करने की सिफारिश करेंगे। मैंने अपने समाधान here का वर्णन किया है। बस संक्षेप में, मैं DialogFragment.getView() की स्पर्श सीमाओं की जांच कर रहा हूं। जब टच पॉइंट डायलॉग फ्रैगमेंट के बाहर होते हैं, तो मैं संवाद को खारिज कर रहा हूं।

0
  Dialog.SetCanceledOnTouchOutside(true); 

यहाँ मुझे
मेरे कोड उत्तरों की

class dlgRegister : DialogFragment 
     { 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
      { 
    .... 
    .... 
    } 
    public override void OnActivityCreated(Bundle savedInstanceState) 
      { 
       Dialog.Window.RequestFeature(WindowFeatures.NoTitle); 
       Dialog.SetCanceledOnTouchOutside(true); 
       base.OnActivityCreated(savedInstanceState); 
       Dialog.Window.Attributes.WindowAnimations = Resource.Style.dialog_animation; 
      } 
    } 
+0

कहा है आप बंद हैं लेकिन सही नहीं! – sud007

2

बहुत काम किया लेकिन, ऐप्लिकेशन क्रैश जब संवाद खुलता है। getDialog().setCanceledOnTouchOutside(true);onCreateView के अंदर लेखन और मेरे ऐप को क्रैश नहीं किया।

(मैं अपने बेसएक्टिविटी के रूप में AppCompatActivity का उपयोग कर रहा हूं और मेरी फ्रैगमेंट के रूप में android.app.DialogFragment)। ।

getDialog() setCanceledOnTouchOutside (सही);:

क्या काम करता है दो निम्नलिखित लाइनों के दोनों है

या

this.getDialog() setCanceledOnTouchOutside (सही)।

onActivityCreated अंदर

तरह
@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationZoom; 
     //getDialog().getWindow().setDimAmount(0.85f); 
     getDialog().setCanceledOnTouchOutside(true);//See here is the code 
    } 

क्या उपयोग करने के लिए नहीं:

DialogFragment.getDialog()।setCanceledOnTouchOutside (गलत);

त्रुटि

enter image description here

निम्नलिखित और onCreateView में कोड अनुप्रयोग क्रैश हो लिख फेंकता है! अगर आपको कुछ गलत लगता है तो कृपया उत्तर अपडेट करें।