2012-07-19 17 views
10

अगर मैं अपने DialogFragment एक भीतरी वर्ग मैं orientation change पर एक InstantiationException मिला के रूप में घोषित किया था, यानी जब उदाहरण निर्मित है, जो कहते हैं कोई सार्वजनिक निर्माता है, वर्ग नहीं सार्वजनिक आदि तथ्य सब कुछ public है, डिफ़ॉल्ट निर्माता है जगह पर है। अगर मैं सिर्फ DialogFragment को एक अलग फ़ाइल में ले जाता हूं - सब कुछ ठीक हो जाता है। मैं कामकाज की तलाश नहीं कर रहा हूं, मैं सिर्फ यह समझना चाहता हूं कि यह क्यों हो रहा है।क्यों डायलॉगफ्रैगमेंट आंतरिक कक्षा नहीं हो सकता है?

+0

मुझे पूरी तरह से यकीन नहीं है, लेकिन मुझे लगता है कि 'क्लास के भीतर डायलॉग फ्रैगमेंट' को 'स्थैतिक' होना चाहिए। दुर्भाग्यवश, मेरे पास इसके लिए कोई उद्धरण नहीं है, बस मैंने देखा है कि हर कामकाजी उदाहरण 'स्थैतिक' कार्यान्वयन का उपयोग करता है। कल आपकी पोस्ट की शुरुआत से, मुझे लगता है कि यह एक व्यवहार्य समाधान नहीं है, लेकिन मेरा मानना ​​है कि यह मामला है। शायद कोई और इस पर अधिक प्रकाश डाल सकता है ... – Eric

+0

धन्यवाद, एरिक। मैं सिर्फ यह समझना चाहता हूं कि दृश्यों के पीछे क्या चल रहा है, ऐसा क्यों होता है। – Eugene

+0

हां मुझे व्यूपेगर और फ्रैगमेंट क्लास के साथ बिल्कुल वही समस्या है। – WELLCZECH

उत्तर

8

यह जावा में एक प्रतिबंध है कि Fragments कैसे बनाया और बनाया गया है।

ऐसा लगता है सभी Fragment रों जैसे कि ओरिएंटेशन परिवर्तन के रूप में कुछ स्थितियों [1], (और मैं, आरंभीकरण पर लगता है कि होगा Fragment कैसे बनाया जाता है के आधार पर) में reinstantiated जा करने के लिए है। इसका मतलब है कि इसे आपके बाहरी वर्ग के बाहर से बहाल किया जाएगा। हालांकि, बाहरी वर्ग के बाहर से गैर-static आंतरिक वर्ग को तत्काल नहीं किया जा सकता है। [2] ऐसे अन्य मामले भी हैं जिनमें Fragment कक्षा के बाहर से संवाद करने की आवश्यकता होगी। [3]

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