वर्तमान में मैं जो एंड्रॉइड ऐप विकसित कर रहा हूं उसमें एक मुख्य गतिविधि है जो काफी बड़ी हो गई है। यह मुख्य रूप से है क्योंकि इसमें TabWidget
3 टैब होते हैं। प्रत्येक टैब में कुछ घटक होते हैं। गतिविधि को एक बार में उन सभी घटकों को नियंत्रित करना है। इसलिए मुझे लगता है कि आप सोच सकते हैं कि इस गतिविधि में 20 फ़ील्ड (लगभग हर घटक के लिए एक फ़ील्ड) पसंद हैं। इसके अलावा इसमें बहुत सारे तर्क हैं (श्रोता पर क्लिक करें, सूची भरने के लिए तर्क आदि)।
मैं घटक आधारित रूपरेखा में सामान्य रूप से क्या करता हूं, सब कुछ को कस्टम घटकों में विभाजित करना है। प्रत्येक कस्टम घटक के बाद एक स्पष्ट जिम्मेदारी होगी। इसमें सम्मिलित घटकों का समूह और उस घटक से संबंधित अन्य सभी तर्क शामिल होंगे।
मैंने यह पता लगाने की कोशिश की कि यह कैसे किया जा सकता है, और मुझे एंड्रॉइड डॉक्यूमेंटेशन में कुछ मिला जो उन्हें "कंपाउंड कंट्रोल" कहलाना पसंद है। (देखें http://developer.android.com/guide/topics/ui/custom-compenders.html#compound और "Compound Controls" अनुभाग पर स्क्रॉल करें) मैं एक XML फ़ाइल को परिभाषित करने वाली XML फ़ाइल के आधार पर इस तरह का एक घटक बनाना चाहूंगा। संरचना देखें।
प्रलेखन में यह कहता है:
ध्यान दें कि किसी गतिविधि के साथ की तरह, आप निहित घटकों को बनाने के लिए या तो घोषणात्मक (XML- आधारित) दृष्टिकोण का उपयोग कर सकते हैं, या आप उन्हें अपने कोड से प्रोग्रामेटिकली घोंसला बना सकते हैं।
खैर, यह अच्छी खबर है! एक्सएमएल-आधारित दृष्टिकोण बिल्कुल वही है जो मैं चाहता हूं! लेकिन यह नहीं कहता कि यह कैसे करना है, सिवाय इसके कि यह "एक गतिविधि के साथ की तरह है" ... लेकिन मैं एक गतिविधि में क्या करता हूं setContentView(...)
एक्सएमएल से विचारों को फुलाया जाता है। यदि आप उपवर्ग उदाहरण के लिए वह विधि उपलब्ध नहीं है LinearLayout
।
तो मैंने इस तरह से XML को मैन्युअल रूप से बढ़ाने की कोशिश की:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
यह इस तथ्य को छोड़कर काम करता है कि एक्सएमएल मैं लोड कर रहा हूं LinearLayout
रूट रूट घोषित किया गया है। यह फुलाया LinearLayout
जा रहा है MyCompoundComponent
जिसके परिणामस्वरूप एक बच्चा पहले से ही एक है LinearLayout
!! तो अब हमारे बीच एक निरर्थक LinearLayout है MyCompoundComponent
और इसके विचारों की वास्तव में आवश्यकता है।
क्या कोई मुझे इस बारे में बताने का एक बेहतर तरीका प्रदान कर सकता है, निरर्थक LinearLayout
तात्कालिकता से बचने के लिए ?