2013-03-20 7 views
18

मैं उसी गतिविधि में दृश्यों को स्विच करने के लिए setContentView(R.layout.main) का उपयोग कर रहा हूं। मैं कुछ एसिंक्रोनस कार्य को कॉल कर रहा हूं और मुख्य लेआउट फ़ाइल पर डेटा को पॉप्युलेट कर रहा हूं जिसके बाद मैं setContentView(R.layout.main) विधि को कॉल करके दृश्य बदल रहा हूं।उसी गतिविधि में लेआउट फ़ाइलों को बदलें

मुझे पता चला कि हमें उसी गतिविधि के लिए setContentView विधि का उपयोग नहीं करना चाहिए। हालांकि यह मेरे लिए ठीक काम कर रहा है।

क्या कोई यह समझा सकता है कि हमें विचारों को बदलने के लिए एक ही गतिविधि के लिए setContentView विधि का उपयोग क्यों नहीं करना चाहिए?

क्या यह कोई स्मृति संबंधित अपवाद बनाएगा? क्या कोई स्पष्टीकरण दे सकता है?

+0

ऐसा नहीं है कि मुझे पता है कि इससे कोई अपवाद होगा। (आउटऑफमेमरी अपवाद को छोड़कर शायद यदि आप ऐसा करते हैं तो Sys मेमोरी कम होती है।) चलो सुनें कि दूसरे क्या कहते हैं। – Calvin

+0

संबंधित: http://stackoverflow.com/q/6811989/783284 – Cody

उत्तर

2

मुझे लगता है कि स्विचिंग दृश्य एक अच्छा विचार नहीं है, क्योंकि एंड्रॉइड मंच में पहले से ही संरचना के साथ जुड़े प्रत्येक दृश्य की स्थिति को बनाए रखने और बनाए रखने के लिए मजबूत फ्रेमवर्क है, इसके बजाय मौजूदा ढांचे के साथ हमेशा बेहतर होना कुछ जटिल कार्यान्वयन के बारे में सोचने के लिए जिन्हें आपको इन सभी चीजों को करने के लिए जाना है। यदि आपको अपने आवेदन में सावधानी बरतने के लिए इनमें से किसी भी चीज की आवश्यकता नहीं है और यदि केवल आपके पूरे एप्लिकेशन में केवल दो या तीन स्क्रीन हैं तो आप विचारों को स्विच करने का प्रयास कर सकते हैं। यह भी इस बात पर आधारित है कि आपके विचारों को कैसे संरचित किया गया है यदि आपके पास जटिल तर्क हैं और इन विचारों को बनाने के लिए बहुत सारे डेटा की आवश्यकता है, तो यह करने का एक अच्छा तरीका नहीं होगा। यदि आप अधिक विचार जोड़ रहे हैं तो एक और बात यह है कि आपके आवेदन के लिए कार्यक्षमता का भार गतिविधि द्वारा संभालने की आवश्यकता उच्च हो जाएगी। इस मामले में आप उस विशेष गतिविधि के अंदर सभी विचारों को घोषित और आरंभ करेंगे, इसलिए इन सभी विचारों को बनाए रखना उदाहरण भारी है। अगर आप सक्रियता और कार्य के बारे में और जानना चाहते हैं तो कृपया refer this link

+3

दूसरे शब्दों में, दृश्य को बदलने का अर्थ शायद यह होगा कि आप कुछ तर्क भी बदलते हैं और इस प्रकार, एक नई गतिविधि अधिक उपयुक्त होती है। – adrianp

+0

मैं दृश्य को बदलने के बाद जानना चाहता हूं कि पिछले दृश्य के लिए आवंटित स्मृति को हटा दिया जाएगा या नहीं। और एक और बात यह प्रक्रिया किसी भी स्मृति अपवाद का कारण बन जाएगी। क्या आप इन दो मुद्दों पर स्पष्टीकरण देते हैं। क्योंकि मैं setContentView विधि का उपयोग कर रहा हूं देखा गया। –

+0

क्या आपको मेमोरी अपवाद मिल रहे हैं? – Neil

0

ठीक है हर बार जब आप setContentView() को कॉल करते हैं तो आपको फिर से सभी लेआउट मिलना होगा, इसके अलावा मुझे लगता है कि आप इसे "कर सकते हैं"। लेकिन जैसा कि here पर चर्चा की गई है यह बीमार सलाह दी गई है क्योंकि यह एंड्रॉइड दिशानिर्देशों के खिलाफ स्पष्ट रूप से चला जाता है। इसके अलावा कमनवेयर के कुछ महत्वपूर्ण बिंदु here सबसे महत्वपूर्ण बातों में से एक है कि आप स्मृति को रिसाव करने के लिए प्रवण होंगे क्योंकि आप अपने विचारों से सामान साफ ​​करना भूल जाते हैं। एंड्रॉइड आमतौर पर आपके लिए संभाल लेगा।

संक्षेप में आपको एंड्रॉइड दिशानिर्देशों का पालन करना चाहिए और Fragments का उपयोग करना चाहिए या एक नया Activity शुरू करना चाहिए।

0

developer docs setContentView के अनुसार (int layoutResID)

एक लेआउट संसाधन से गतिविधि सामग्री सेट करने के लिए प्रयोग किया जाता है। गतिविधि को बढ़ाया जाएगा, गतिविधि के लिए सभी शीर्ष स्तरीय विचार जोड़ना होगा।

सर्वोत्तम अभ्यास में इस विधि का उपयोग शुरू होने पर आपके Activity लेआउट को बढ़ाने के लिए किया जाता है। इसका मतलब यह नहीं है कि यदि आप इस विधि का उपयोग करते रहें तो भविष्य में समस्याएं पैदा होंगी। अपनी गतिविधि पर this सवाल

setContentView में एक जवाब के शब्दों में वास्तव में गतिविधि है, जो खुद अभी लेआउट बढ़ा-चढ़ाकर तुलना में बहुत अधिक करता है के द्वारा प्रयोग किया विंडो पर setContentView कहता है।

मेरा सुझाव है कि आप Fragments के साथ एक ViewPager या कुछ अन्य Tabbing दृष्टिकोण लेकिन अंत में यह सब क्या आप क्या करना चाहते करने के लिए नीचे आता है का उपयोग कर की तरह लेआउट स्विच करने के लिए एक वैकल्पिक तरीका पाते हैं।

This प्रश्न आपको वह भी दे सकता है जो आप खोज रहे हैं।

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