2012-03-10 15 views
17

पर कॉल नहीं किया जाता है FinishInflate() पर कौन/क्या कॉल करता है? इससे कोई फर्क नहीं पड़ता कि मैं अपनी लेआउट फाइलों को कैसे बढ़ाता हूं (कोड में) यह विधि कभी ट्रिगर नहीं होती है। क्या कोई मुझे एक उदाहरण दे सकता है या मुझे बता सकता है कि ऑनफिनिशफ्लैट() वास्तव में कहलाता है?ऑनफिनिश इन्फ्लैट() को कभी भी

उत्तर

30

View.onFinishInflate() को देखने के बाद कॉल किया जाता है (और इसके बच्चे) एक्सएमएल से फुलाए जाते हैं। विशेष रूप से, यह LayoutInflater.inflate(...) पर कॉल के दौरान होता है कि onFinishInflate() कहा जाएगा। जड़ से शुरू होने पर मुद्रास्फीति निरंतर प्रदर्शन की जाती है। बच्चों को युक्त एक दृश्य को यह जानने की आवश्यकता हो सकती है कि उसके बच्चे कब फुले हुए हैं। इस कॉलबैक के मुख्य उपयोगों में से एक ViewGroups के लिए है जब उसके बच्चे तैयार हो जाएं।

मान लें कि आपके पास View का उप-वर्ग था जिसे CustomView कहा जाता है, और यह आंतरिक रूप से किसी भी लेआउट को आंतरिक रूप से फुलाता नहीं है। आप अपने लेआउट में एक CustomView कहीं, अर्थात् था:

... 
<com.company.CustomView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
... 

आप onFinishInflate() को एक कॉलबैक देखना चाहिए एक बार यह फुलाया गया है। यदि यह आपकी गतिविधि के आपके मुख्य लेआउट में है, तो आप Activity.setContentView(int) के बाद होने पर विचार कर सकते हैं। आंतरिक रूप से, यह LayoutInflater.inflate(...) पर कॉल करेगा।

वैकल्पिक रूप से, अगर आप के साथ CustomView का एक उदाहरण बनाया:

... 
new CustomView(context); 
... 

... आप onFinishInflate() के लिए एक कॉल प्राप्त नहीं होगा। इस तरह से इसे त्वरित रूप से मतलब यह होगा कि इसमें कोई बच्चा नहीं है और इसलिए उन्हें रिकर्सिव फैशन में तत्काल होने की प्रतीक्षा नहीं करनी चाहिए, जैसे एक्सएमएल मुद्रास्फीति में।

+6

तो दस्तावेज़ गलत हैं। यदि आप मैन्युअल रूप से एक लेआउट फुलाते हैं, तो कॉलबैक नहीं कहा जाता है। लेकिन आप अभी भी homogenous होने के लिए इसे मैन्युअल रूप से बुला सकते हैं। – Snicolas

+0

आप स्वयं को विधि को कॉल नहीं कर सकते हैं। यह एक संरक्षित विधि है ... आपको एक संरक्षित वर्ग की आवश्यकता होगी। नोट किया गया है कि पैकेज में यह है 'android.view' काम नहीं करता है। –

+2

यह सच नहीं है, आप कन्स्ट्रक्टर में 'super.onFinishInflate' या अपने ओवरराइड' onFinishInflate' को कॉल कर सकते हैं। – GLee

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