18

के बीच अंतर मैं कई टुकड़ों के साथ एक टैब सूची बना रहा हूं। मैंने देखा है कि, मुख्य गतिविधि में, मैंने लेआउट xml प्राप्त करने के लिए setContentView का उपयोग किया और संबंधित UI तत्व कॉन्फ़िगरेशन प्राप्त करने के लिए findViewById का उपयोग किया।setContentView और LayoutInflater

setContentView(R.layout.fragment_tabs); 
mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
mTabHost.setup(); 
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent); 

हालांकि, विभिन्न खंड वर्ग में, मुझे इसके बजाय inflater का उपयोग करना होगा।

View v = inflater.inflate(R.layout.webview, container, false); 
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser); 

और दोनों समारोह, एक वस्तु बनाने के लिए लेआउट एक्सएमएल प्राप्त करने के लिए उपयोग किया जाता है यही कारण है कि वहाँ एक अंतर है? onCreate के दौरान पहला उपयोग है, और दूसरा onCreateView के दौरान? मुझे किस स्थिति में उनमें से किसी एक को चुनना चाहिए?

उत्तर

22

setContentView केवल Activity विधि है। प्रत्येक Activity को FrameLayout आईडी "@+id/content" (यानी सामग्री दृश्य) के साथ प्रदान किया गया है। setContentView में जो भी दृश्य आप निर्दिष्ट करते हैं वह Activity के लिए दृश्य होगा। ध्यान दें कि आप इस विधि के दृश्य के उदाहरण को भी पास कर सकते हैं, उदा। setContentView(new WebView(this)); आपके द्वारा उपयोग की जा रही विधि का संस्करण दृश्यों के पीछे आपके लिए दृश्य को फुलाएगा।

दूसरी तरफ, फ्रैगमेंट्स में onCreateView नामक लाइफसाइकिल विधि है जो एक दृश्य (यदि यह एक है) देता है। ऐसा करने का सबसे आम तरीका एक्सएमएल में एक दृश्य को फुला देना और इसे इस विधि में वापस करना है। इस मामले में आपको इसे खुद को फुलाए जाने की आवश्यकता है। टुकड़ों में setContentView विधि

+0

उत्तर देने के लिए धन्यवाद, क्या xml फ़ाइल प्राप्त करना और खोजने के लिए इसके लिए कोई ऑब्जेक्ट बनाना आवश्यक है ViewById? चूंकि मुझे ऑफिकल डॉक में कुछ उदाहरण नहीं मिला है। जैसे एडिटटेक्स्ट एडिटटेक्स्ट = (एडिटटेक्स्ट) findViewById (R.id.email_address); – user782104

+4

मुझे यकीन नहीं है कि मैं पूरी तरह से प्रश्न समझता हूं, इसलिए यदि मेरा उत्तर समझ में नहीं आता है, तो फिर से पूछने में संकोच न करें। क्रियाएँ और विचार दोनों में findViewById() नामक एक विधि है। गतिविधि संस्करण दिए गए आईडी के साथ इसके सामग्री दृश्य के अंदर एक दृश्य की खोज करेगा (इसलिए, आंतरिक रूप से, यह contentView.findViewById()) को कॉल करेगा। इसका अर्थ यह है कि सामग्री दृश्य को प्रयोग करने योग्य होने से पहले सेट करने की आवश्यकता है। "SetContentView" की तरह, खंडों में "findViewById" (जो समझ में आता है, क्योंकि कोई सामग्री दृश्य नहीं है) के लिए कोई विधि नहीं है। बस उसी व्यवहार के लिए getView()। FindViewById() का उपयोग करें। –

+0

आपने उल्लेख नहीं किया कि कोई भी 'setContentView' के विकल्प के रूप में, गतिविधि में 'LayoutInflater.inflate' का उपयोग भी कर सकता है। –

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