लिस्ट व्यू वास्तव में पहले से ही सभी वस्तुओं को प्रदर्शित करने के लिए खुद को लंबा करने के लिए मापने में सक्षम है, लेकिन यह तब नहीं होता है जब आप केवल रैप_ कॉन्टेंट (मेज़स्पेक्ट.यूएनएसईसीईसीआईईडी) निर्दिष्ट करते हैं। यह तब करेगा जब यह मापने के लिए दिया जाएगा। इस ज्ञान के साथ, आप इस समस्या को हल करने के लिए एक बहुत ही सरल उपवर्ग बना सकते हैं जो ऊपर दिए गए किसी भी समाधान की तुलना में कहीं बेहतर काम करता है। आपको अभी भी इस उपवर्ग के साथ wra_content का उपयोग करना चाहिए।
public class ListViewForEmbeddingInScrollView extends ListView {
public ListViewForEmbeddingInScrollView(Context context) {
super(context);
}
public ListViewForEmbeddingInScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListViewForEmbeddingInScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 4, MeasureSpec.AT_MOST));
}
}
एक बहुत बड़े आकार (Integer.MAX_VALUE >> 4) के साथ AT_MOST होने के लिए heightMeasureSpec का हेरफेर लिस्ट व्यू को उसके सभी बच्चों को दी गई (बहुत बड़ी) ऊंचाई तक मापने और तदनुसार उसकी ऊंचाई निर्धारित करने का कारण बनता है।
यह कुछ कारणों से अन्य समाधानों की तुलना में बेहतर काम करता है:
- यह सब कुछ सही ढंग से मापता है (पैडिंग, डिवाइडर)
- यह माप पास के दौरान ListView को मापता है
- # 2 के कारण, यह किसी भी अतिरिक्त कोड के बिना सही ढंग से चौड़ाई या आइटम की संख्या में परिवर्तन को संभालता है
नकारात्मक पक्ष पर, आप तर्क दे सकते हैं कि ऐसा करने से एसडीके में अनैच्छिक व्यवहार पर भरोसा किया जा सकता है जो बदल सकता है। दूसरी ओर, आप यह तर्क दे सकते हैं कि इस तरह से wra_content को वास्तव में ListView के साथ काम करना चाहिए और वर्तमान wra_content व्यवहार बस टूट गया है।
यदि आप चिंतित हैं कि व्यवहार भविष्य में बदल सकता है, तो आपको बस सूची फ़ंक्शन और संबंधित कार्यों को ListView.java से बाहर और अपने स्वयं के उपवर्ग में कॉपी करना चाहिए, फिर UNSPIFIFIED के लिए ऑनमॉर रन के माध्यम से AT_MOST पथ बनाएं।
वैसे, मेरा मानना है कि यह पूरी तरह से मान्य दृष्टिकोण है जब आप कम संख्या में सूची आइटम के साथ काम कर रहे हैं। LinearLayout की तुलना में यह अक्षम हो सकता है, लेकिन जब आइटम की संख्या छोटी होती है, तो LinearLayout का उपयोग करना अनावश्यक अनुकूलन है और इसलिए अनावश्यक जटिलता है।