2011-11-13 15 views
19

मेरा कस्टम दृश्य View से बढ़ा है।कौन सा कन्स्ट्रक्टर देखने के लिए बुलाया जा सकता है?

  1. View(Context context, AttributeSet attrs, int defStyle)
  2. View(Context context, AttributeSet attrs)
  3. View(Context context)

मेरी गतिविधि से मैं std.setContentView(R.layout.main) फोन: वहाँ 3 दृश्य निर्माता ये हैं। दूसरे कन्स्ट्रक्टर को मेरे विचार में बुलाया जा रहा है। दूसरा क्यों? अग्रिम में कैसे पता चलेगा कि किसको बुलाया जाएगा और क्यों?

उत्तर

41

देखें के लिए प्रलेखन के तहत Android डेवलपर साइट से: जब कोड से एक दृश्य बनाने

public View (Context context)

सरल निर्माता का उपयोग करें।

तो यह कन्स्ट्रक्टर वह है जिसे आप जावा में दृश्य बनाने के लिए उपयोग कर सकते हैं। जब आप एक्सएमएल से फुलाते हैं तो इसे नहीं कहा जाएगा।

public View (Context context, AttributeSet attrs)

निर्माता है कि जब एक्सएमएल से एक दृश्य बढ़ा-चढ़ाकर कहा जाता है। यह तब कहा जाता है जब किसी XML फ़ाइल से दृश्य बनाया जा रहा है, जो XML फ़ाइल में निर्दिष्ट विशेषताएँ प्रदान करता है। यह संस्करण 0 की डिफ़ॉल्ट शैली का उपयोग करता है, इसलिए केवल एक ही विशेषता मान लागू होते हैं जो संदर्भ की थीम और दिए गए विशेषता Set में हैं।

सभी बच्चों को जोड़े जाने के बाद फिनिश इन्फ्लैट() पर विधि कॉल की जाएगी।

तो जब आप शैली निर्दिष्ट नहीं करते हैं तो आप एक्सएमएल से एक दृश्य को बढ़ाते समय इस कन्स्ट्रक्टर को बुलाया जाएगा।

public View (Context context, AttributeSet attrs, int defStyle)

एक्सएमएल से मुद्रास्फीति को पूरा करें और एक वर्ग विशेष के आधार शैली लागू होते हैं। व्यू का यह कन्स्ट्रक्टर उप-वर्गों को फुलाए जाने पर अपनी बेस शैली का उपयोग करने की अनुमति देता है। उदाहरण के लिए, एक बटन क्लास का कन्स्ट्रक्टर सुपर क्लास कन्स्ट्रक्टर के इस संस्करण को कॉल करेगा और DefStyle के लिए R.attr.buttonStyle की आपूर्ति करेगा; यह थीम की बटन शैली को सभी मूल दृश्य विशेषताओं (विशेष रूप से इसकी पृष्ठभूमि) के साथ-साथ बटन क्लास के विशेषताओं को संशोधित करने की अनुमति देता है।

आप इन निर्माताओं की सभी को लागू करना चाहिए, लेकिन आप के लिए क्रमशः पहले दो this(context, null) और this(context, attrs, 0) फोन करके तीसरे एक में काम के सभी डाल सकते हैं,।

+2

सुपर (संदर्भ, attrs) और सुपर (संदर्भ, attrs, 0) मेरे लिए अलग-अलग काम करता है। पहला एक ठीक है, लेकिन दूसरा मूल शैली को एक दृश्य से हटा देता है, इसलिए मैं इसका उपयोग नहीं कर सकता (संदर्भ, attrs, 0)। क्या यह एंड्रॉइड के नए संस्करणों में एक बग है? – broot

+1

कृपया कन्स्ट्रक्टर कॉल को कैस्केड न करें, नीचे मेरा जवाब देखें। – Jin

+0

मुझे लगता है कि यह जिन का उत्तर है: http://stackoverflow.com/a/34301725/326874 – aeracode

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