2013-04-08 11 views
5

क्या लेआउट के संसाधन आईडी (जैसे R.layout.viewtoInflate) प्राप्त करने का कोई तरीका है जिससे दृश्य देखा गया था?संसाधन आईडी प्राप्त करें, जिसमें से दृश्य

मैं एक सूची दृश्य को लागू करने की कोशिश कर रहा हूं जो सूची आइटम के लिए 2 कस्टम लेआउट का उपयोग करता है। कौन सा आइटम लेआउट उपयोग किया जाता है, सूची दृश्य को पॉप्युलेट करने के लिए उपयोग की जाने वाली वस्तुओं में फ़ील्ड पर आधारित होता है।

जो मैं अपने कस्टम एडाप्टर में लापता हूं, यह जानने का एक तरीका है कि getView() में मुझे 'कन्वर्ट व्यू' प्राप्त करने वाला संसाधन किस प्रकार से प्राप्त हुआ था। अगर मैं उस जानकारी को प्राप्त कर सकता हूं तो मैं तुलना कर सकता हूं और यह निर्धारित कर सकता हूं कि मैं कनवर्ट व्यू को फिर से उपयोग कर सकता हूं या नहीं, अगर मुझे वर्तमान आइटम के लिए उपयुक्त लेआउट के साथ इसे बदलना है।

तो आदर्श यह कुछ इस तरह होगा: बिल्कुल

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

    JSONObject currItem = mItems.getJSONObject(position); 

    int layoutType; 

    if (currItem.getBoolean("alternate")) 
     layoutType = R.layout.list_item_b; 
    else 
     layoutType = R.layout.list_item_a; 

    if (convertView == null || <convertView.resourceID> != layoutType) { 
     convertView = inflater.inflate(layoutType, null); 

     //Finish setting up new View and its holder 
    } 
    else { 
     //Get view holder for view reuse 
    } 

    //populate view with the required content 

    return convertView; 
} 

पर सबसे बुरा मैं सिर्फ नहीं कर सकता है फिर से उपयोग विचारों और सिर्फ लेआउट मैं हर बार की जरूरत बढ़, लेकिन यह बहुत बेकार लगता है।

उत्तर

5

एकाधिक लेआउट का उपयोग करने का एक आधिकारिक तरीका है, बस getViewTypeCount() और getItemViewType() ओवरराइड करें। ये विधियां एडाप्टर को एकाधिक लेआउट की उम्मीद करने के लिए सूचित करती हैं और convertView हमेशा उचित लेआउट होगी (इसलिए संसाधन आईडी की जांच करने की आवश्यकता नहीं है।) कृपया कुछ नमूना कोड के लिए this example देखें।

लेकिन यदि आप यह जानना चाहते हैं कि कौन सा लेआउट है, तो बस एक अद्वितीय विशेषता की जांच करें। उदाहरण के लिए आप एक दृश्य पर findViewById() का उपयोग कर सकते हैं जो केवल एक लेआउट में मौजूद है, फिर जांचें कि यह null या नहीं देता है या नहीं।

+0

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

3

सूची दृश्य से अधिक लेआउट का समर्थन करता है - आप getItemViewType() में पंक्ति के लिए getViewTypeCount() और सही लेआउट प्रकार में इस्तेमाल किया लेआउट की गिनती लौटना ही होगा।

और यदि आप अभी भी जानना चाहते हैं कि यह किस लेआउट से फुलाया गया था, तो आप setTag() का उपयोग करके किसी भी जानकारी को दृश्य में संलग्न कर सकते हैं और getTag() का उपयोग करके इसे बाद में पुनर्प्राप्त कर सकते हैं - यह आपका लेआउट आईडी या कुछ भी हो सकता है।

-1

यदि आप उस लेआउट से आइटम की आईडी प्राप्त करने के लिए कह रहे हैं जो आपने फुलाया है। यह इस प्रकार है: -

//Suppose you have an TextView in the inflated layout of id textView1. Here you go 

convertView = inflater.inflate(layoutType, null); 
TextView tv = (TextView)convertview.findViewById(R.id.textView1); 
+0

उपरोक्त कोड फुलाए गए आइटम की आईडी कैसे लौटाता है। findviewbyid केवल दृश्य देता है न कि आईडी –

1

मैं क्या जब दृश्य बनाने फुलाया देखने के संसाधन आईडी बचाने के दृश्य धारक में है। जब मैं विचारों को पॉप्युलेट कर रहा हूं तो यह मुझे लेआउट संसाधन आईडी प्राप्त करने की अनुमति देता है।

उम्मीद है कि इससे मदद मिलती है।

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