2012-07-31 8 views
5

मैंने MyCustomDialog नामक एक कस्टम संवाद बनाया है जो Dialog फैलाता है। मैं इस प्रकार बना सकते हैं और दिखाने के अपने कस्टम संवाद:अपनी ऑनक्रेट विधि में एक कस्टम संवाद को कैसे रद्द या खारिज करें?

new MyCustomDialog(myContext).show(); 

मैं अपने initialisation करने के लिए Dialog.onCreate(Bundle savedInstanceState) विधि ओवरराइड। मैं इस विधि में भी जांच करता हूं कि कोई निश्चित स्थिति है और यदि नहीं, तो मैं अपने संवाद को खारिज/रद्द करना चाहता हूं। मैंने अपने संवाद के onCreate(Bundle savedInstanceState) और onStart() विधियों में cancel() और dismiss() विधियों को कॉल करने का प्रयास किया है लेकिन इसका कोई प्रभाव नहीं है।

कोई भी जानता है कि इससे पहले कि कोई संवाद (संवाद के भीतर से) को कैसे रद्द या खारिज कर दिया जाए?

+0

क्या आप अपने ऑनक्रेट() विधि में super.onCreate() को कॉल कर रहे हैं ?? – RaphMclee

+0

आप किस एपीआई स्तर के लिए इसे लिख रहे हैं? –

उत्तर

2

आपको यह निर्धारित करने के लिए तर्क रखना चाहिए कि संवाद onCreate() विधि के बाहर दिखाया जाना है या नहीं। यह वहां से संबंधित नहीं है।

वैकल्पिक रूप से, अपने show() विधि showIfRequired() (या कुछ) का नाम बदलें, और वहां सशर्त शो तर्क जोड़ें।

मुझे पता है कि यह तकनीकी रूप से आपके प्रश्न का उत्तर नहीं देता है, लेकिन आप जो करने की कोशिश कर रहे हैं वह सही डिजाइन नहीं है। यह एक अच्छी बात है, क्योंकि सही तरीके से करना वास्तव में सरल है।

भी एक साइड नोट के रूप में, आपको DialogFragmentDialog के पक्ष में उपयोग करना चाहिए। यह v4 समर्थन पुस्तकालय में उपलब्ध है। , गतिविधि कक्षा में

सबसे पहले आप onCreateDialog ओवरराइड करना चाहिए (पूर्णांक आईडी, बंडल args) है कि आप क्या कर रहे हैं यह है:

+0

हां, और आप * अपने संवाद सबक्लास में शो() विधि को ओवरराइड कर सकते हैं, सुपर.शो() को सशर्त रूप से कॉल कर सकते हैं। – CSmith

+1

@CSmith हाँ, लेकिन वह 'DialogInterface.show()' विधि के लिए अनुबंध का उल्लंघन करेगा। –

1

यह API स्तरों 10 और नीचे के लिए है? संवाद हमेशा गतिविधि के हिस्से के रूप में बनाए जाते हैं और प्रदर्शित होते हैं। दूसरा, मुझे नहीं लगता कि आप क्रिएटडिअलॉग पर एक संवाद को रद्द/खारिज कर सकते हैं क्योंकि इसे वास्तव में बनाया नहीं गया है जब क्रिएटडिअलॉग कहा जाता है। यही है, आप कुछ ऐसा नहीं रद्द/अस्वीकार कर सकते हैं जो नहीं बनाया गया है। आप कोशिश कर सकते हैं कि इसके बजाय PrepareDialog() पर ओवरराइड करें और वहां संवाद को रद्द/खारिज करने के लिए अपनी जांच करें। उस बिंदु पर संवाद वास्तव में बनाया जाना चाहिए (केवल प्रदर्शित नहीं किया गया है), इसलिए यदि आप वहां रद्द/खारिज करते हैं तो आप इसे प्रदर्शित होने से रोक पाएंगे।

onPrepareDialog() प्रदर्शित होने वाले संवाद पर किसी प्रकार की जांच और निर्णय लेने के लिए उचित जगह है। यह हनीकॉम से पहले एपीआई के लिए है।

आप एक बाद में एपीआई का उपयोग कर रहे हैं, तो आप DialogFragment बजाय का विस्तार करना चाहिए:

इस एपीआई 11 और बाद के लिए है। इस मामले में मुझे लगता है कि आप DialogFragment कीCreateView() विधि में निर्णय लेने को संभाल सकते हैं जो PrepareDialog() पर समान है।

मुझे आशा है कि आप इस के माध्यम से पढ़ा है: http://developer.android.com/guide/topics/ui/dialogs.html

या इस, अपने एपीआई के आधार पर:

http://developer.android.com/reference/android/app/DialogFragment.html

कुल मिलाकर, शायद एक क्लीनर समाधान बटन या तंत्र निष्क्रिय करने के लिए है कि संवाद को पहली जगह में दिखाने का कारण बनता है? यही है, आपको कोड लिखना है कि Dialog.show() को केवल तभी बुलाया जाता है जब इसे वास्तव में बुलाया जाना चाहिए। मुझे वास्तव में क्या करना है, इसके बारे में अधिक जानकारी जाननी होगी। उदाहरण के लिए, आप संवाद कहते हैं।एक बटन के onClickListener से() दिखाएं। आप वास्तव में उपयोगकर्ता को बटन दबाए नहीं चाहते हैं, एक संवाद की उम्मीद करते हैं, लेकिन ऐसा कुछ कारणों से नहीं दिखता है जब उपयोगकर्ता समझ में नहीं आता है। एक बेहतर समाधान बटन को सभी को एक साथ अक्षम करना होगा ताकि उपयोगकर्ता के लिए यह स्पष्ट हो कि यह फ़ंक्शन एप्लिकेशन में किसी अन्य चीज़ के कारण उपलब्ध नहीं है।

+0

'onCreateDialog()' 'DialogFragment' में एक विधि है। वह 'डायलॉग फ्रैगमेंट' का उपयोग नहीं कर रहा है, वह 'संवाद' बढ़ा रहा है। –

+0

ऑनक्रेट डायलॉग जो मैं बात कर रहा हूं वह गतिविधि की एक विधि है। तो onPrepareDialog() मैं बात कर रहा हूँ। ऐसा लगता है कि ओपी संवादप्रवाह का उपयोग नहीं कर रहा है। यदि यह ऐप प्री-हनीकॉम है तो ओपी को यह करना चाहिए (हनीकॉम से पहले डायलॉगफैगमेंट मौजूद नहीं है)। यदि यह हनीकॉम के लिए है और बाद में, ओपी से डायलॉगफ्रैगमेंट का उपयोग करना चाहिए। मैंने उस मूल प्रश्न पर टिप्पणी को जोड़ा। –

संबंधित मुद्दे