मेरे पास अलग-अलग आइटमों के लिए अलग-अलग लेआउट के साथ एक सूची दृश्य है। कुछ आइटम विभाजक हैं। कुछ आइटम अलग-अलग होते हैं क्योंकि वे विभिन्न प्रकार के डेटा, आदिविभिन्न आइटम लेआउट के साथ ListViews के लिए ViewHolders बनाना
मैं GetView प्रक्रिया को तेज़ करने के लिए व्यूहोल्डर्स को कार्यान्वित करना चाहता हूं, लेकिन मुझे पूरा यकीन नहीं है कि इसके बारे में कैसे जाना है। विभिन्न लेआउट में डेटा के अलग-अलग टुकड़े होते हैं (जो नामकरण को मुश्किल बनाते हैं) और विभिन्न दृश्यों का उपयोग करना जिन्हें मैं उपयोग करना चाहता हूं।
मुझे यह करने के बारे में कैसे जाना चाहिए?
एक्स के साथ एक सामान्य व्यूहोल्डर बनाने के लिए सबसे अच्छा विचार है, जहां एक्स सबसे अधिक संख्या वाले आइटम लेआउट में दृश्यों की संख्या है। दृश्यों की एक छोटी संख्या के साथ अन्य विचारों के लिए, मैं केवल व्यूहोल्डर में उन चर के उपखंड का उपयोग करूंगा। तो कहें कि मेरे पास 2 लेआउट हैं जो मैं 2 अलग-अलग वस्तुओं के लिए उपयोग करता हूं। एक में 3 टेक्स्ट व्यू हैं और दूसरे के पास 1 है। मैं 3 टेक्स्ट व्यू चर के साथ एक व्यूहोल्डर बनाउंगा और केवल अपने अन्य आइटम के लिए उनमें से 1 का उपयोग करूंगा। मेरी समस्या यह है कि यह वास्तव में बदसूरत लग रहा है और वास्तव में हैकी लगता है; खासकर जब किसी आइटम लेआउट में कई अलग-अलग प्रकार के कई दृश्य हो सकते हैं।
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyHolder holder;
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_mylistlist_item, parent, false);
holder = new MyHolder();
holder.text = (TextView) v.findViewById(R.id.mylist_itemname);
v.setTag(holder);
}
else {
holder = (MyHolder)v.getTag();
}
MyListItem myItem = m_items.get(position);
// set up the list item
if (myItem != null) {
// set item text
if (holder.text != null) {
holder.text.setText(myItem.getItemName());
}
}
// return the created view
return v;
}
मान लीजिए मैं पंक्ति लेआउट के विभिन्न प्रकार थी, मैं पंक्ति के प्रत्येक प्रकार के लिए एक ViewHolder हो सकता है:
यहाँ एक बहुत ही बुनियादी getView है। लेकिन मैं किस प्रकार "धारक" को शीर्ष पर घोषित करूंगा? या मैं प्रत्येक प्रकार के लिए धारक घोषित करता हूं और फिर उस पंक्ति के प्रकार के लिए उपयोग करता हूं जिस पर मैं हूं।
फैली शायद मैं तो मेरे जावा पर कुछ ब्रश करने की जरूरत है। मेरी ListActivities में getView फ़ंक्शंस की शुरुआत में, मैं उस सूची दृश्य के लिए अपने परिभाषित धारक को तुरंत चालू करता हूं। मैं फिर कन्वर्ट व्यू को नल के लिए जांचता हूं और या तो GetTag प्राप्त करता हूं या धारक बनाता हूं और आइटम सेट करता हूं। यदि मैं आइटम प्रकारों के लिए अलग-अलग धारकों का उपयोग करने जा रहा हूं, तो मुझे GetView की शुरुआत में अपने धारक को क्या घोषित करना चाहिए? या क्या मुझे अपने सभी आइटम प्रकारों के लिए 1 को चालू करने और पंक्ति के प्रकार से मेल खाने वाले किसी व्यक्ति को प्रारंभ करने और उपयोग करने की आवश्यकता है? – Andrew
कृपया मेरे संपादित पोस्ट को शीर्ष – Andrew
@Andrew देखें, प्रत्येक धारक को व्यक्तिगत विवरणों में से एक में व्यक्तिगत रूप से परिभाषित किया जाएगा। अपने सभी मौजूदा कोड को इक्का केस कथन में रखें, लेकिन प्रत्येक के लिए व्यूल्डर प्रकार और डेटा हैंडलिंग बदलें। मैं थोड़ा सा उदाहरण के साथ अपना जवाब संपादित करूंगा। – CodeFusionMobile