2010-10-08 15 views
5

मैं एक लेआउट एक XML फ़ाइल (base_layout.xml) जो 3-5 अन्य विचार इस तरह के एक ImageView और एक LinearLayout 3-5 ImageButton विचारों से युक्त करने के अलावा 20 ViewStub परिभाषाएँ हो सकती है के रूप में परिभाषित किया है।एक ही लेआउट एक्सएमएल फ़ाइल के लिए कितने व्यूस्ट्यूब बहुत अधिक हैं?

क्या मुझे इस लेआउट फ़ाइल में कितने ViewStub विचारों के बारे में चिंतित होना चाहिए?

मैं developer.android साइट पर पढ़ें:

एक ViewStub एक गूंगा और हल्के दृश्य है। इसमें कोई आयाम नहीं है, यह कुछ भी आकर्षित नहीं करता है और किसी भी तरह से लेआउट में भाग नहीं लेता है। यह कि एक ViewStub को बढ़ाने के लिए बहुत सस्ता और बहुत सस्ता एक दृश्य पदानुक्रम

में रखने के लिए है कि यह पर्याप्त उनमें से 20 के लिए सस्ती है इसका मतलब है? सभी को निश्चित रूप से फुलाया नहीं जा रहा है, केवल एक समय में 1-2।

जब मैं कहना cheap enough या concerned जा रहा है की बात, मैं यूआई के प्रदर्शन के बारे में हूँ

संपादित करें: मैं क्या पूरा करने के लिए कोशिश कर रहा हूँ: एक लेआउट एक्सएमएल फ़ाइल जो सभी के लिए कंकाल हो सकता है बनाने के मेरी गतिविधियों। प्रत्येक Activity में, मैं गतिविधि के लेआउट के साथ सही ViewStub फुला दूंगा। के बाद से मैं एक ही कंकाल की आवश्यकता होती है तो कई गतिविधियों है, मैं मैं एक Activity वर्ग जो मेरी गतिविधियों के लगभग सभी की मूल है के रूप में संभव

के रूप में ज्यादा का फिर से उपयोग करना चाहते हैं। यह अभिभावक वर्ग setContentView(R.layout.base_layout); पर कॉल करता है। प्रत्येक बच्चे की गतिविधि के लिए, मैं जो कर रहा हूं वह base_layout.xml के अंदर संबंधित है। ऐसा करने से मुझे अपने सभी गतिविधि लेआउट

उत्तर

13

पर एक ही कंकाल दृश्य के साथ एक बहुत ही अनुकूलित यूआई रखने की अनुमति मिलती है, मुझे नहीं लगता कि आपको एक बड़ा प्रदर्शन हिट दिखाई देगी। शुरुआत में ही उन सभी को बढ़ाना अभी भी सस्ता है।

इतने सारे स्टब्स होने के नकारात्मक पक्ष यह है कि आप पूरे डिजाइन की दृष्टि खो सकता है। शायद यह एक दृश्य समूह में कई विचारों/वस्तुओं को समूहित करने के लिए और अधिक समझ में आता है। शायद तुम समझा सकता है आप क्या करने की कोशिश कर रहे हैं और अगर वहाँ एक बेहतर तरीका है एहसास है देखना यह

संपादित करें: ठीक है, बजाय कई ViewStubs जो

<ViewStub android:id="@+id/stub" 
      android:inflatedId="@+id/activity1" 
      android:layout="@layout/myActivity1" 
      /> 
<ViewStub android:id="@+id/stub2" 
      android:inflatedId="@+id/activity2" 
      android:layout="@layout/myActivity2" 
      /> 

की तरह अलग अलग subviews शामिल होने के बस एक ही ViewStub और अपने acitivities में onCreate() की क्या ज़रूरत है

setContentView(R.layout.base_layout); 
ViewStub stub = (ViewStub)findViewById(R.id.stub); 

stub.setInflateId(R.id.activity1); 
stub.setLayoutResource(R.layout.myActivity2); 
stub.inflate(); 

इस तरह से आप अभी भी अपने base_layout में केवल एक ही ViewStub होगा जो आप में सेटअप सकता है की तरह कुछ फुलाए जाने से पहले कोड।

+0

मेरे सवाल का अद्यतन, के बाद पढ़ा ** संपादित है: ** – binnyb

+0

आह हा! मैं पहले ऐसा कुछ करने की कोशिश कर रहा था, सिवाय इसके कि मैं इसे काम नहीं कर सका। अब मैंने आपके नमूना कोड का उपयोग किया है, यह एक आकर्षण की तरह काम करता है। अति उत्कृष्ट। – binnyb

+0

@Tseng मुझे कुछ ऐसा करने की ज़रूरत है, जानकारी के लिए धन्यवाद, हालांकि आप इसे लेआउट फ़ाइल में शामिल किए बिना आईडी गतिविधि 1 को कैसे परिभाषित करते हैं? –

0

LinearLayout या RelativeLayoutका विस्तार ViewGroup

तो मैं इस्तेमाल किया ViewGroup पैरामीटर के रूप में यह मेरा समाधान

public CategoryViewController(Context context, ViewGroup containerView) { 
     this.context = context; 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View categoryLayout = inflater.inflate(R.layout.category_section, null, false); 
     containerView.addView(categoryLayout); 
     this.categoryView = categoryLayout; 
} 
संबंधित मुद्दे