2012-09-15 21 views
8

मैं एंड्रॉइड प्रोग्रामिंग के लिए नया हूं और एडाप्टर के साथ पहला कदम कर रहा हूं (ListView के लिए)।ओवरराइडिंग एडाप्टर.getView

ओवरराइड Adapter.getView मैं अक्सर इस तरह चीजों को देखने के:

public View getView(int position, View convertView, ViewGroup parent) { 

    View itemView = null; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) parent.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.table_row, null); 
    } else { 
     itemView = convertView; 
    } 

    // play with itemView 

    return itemView; 
} 

मेरा प्रश्न है कि इस के खिलाफ बोलता है है:

public View getView(int position, View convertView, ViewGroup parent) { 

    View itemView = super(position, convertView, parent); 

    // play with itemView 

    return itemView; 
} 

यह मेरे लिए काम करने के लिए लगता है, लेकिन मैं वहाँ एक बड़ा यकीन बिंदु मुझे याद आ रही है: डी

मेरे खराब अंग्रेजी के लिए पढ़ने और खेद के लिए धन्यवाद ...

उत्तर

6

आप

View itemView = super(position, convertView, parent); 

उपयोग कर सकते हैं, तो केवल आप एडेप्टर "का उपयोग करने के लिए तैयार" (नहीं BaseAdapter) से पाने कर रहे हैं, जैसे SimpleAdapter, या ArrayAdapter, क्योंकि पहले से ही उनके getView() के लिए कार्यान्वयन है।

उन पर एक नज़र डालें: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 ऐरेएडाप्टर के लिए, और http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113 SimpleAdapter के लिए।

आप BaseAdapter से निकाले जाते हैं, तो आप पूरे विधि को लागू manualy के रूप में आप पहले उदाहरण में वर्णित किया है, क्योंकि यह बॉक्स से बाहर नहीं है होगा: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

2

getView(..)-एडाप्टर का तरीका कई तरीकों से हो सकता है। एकमात्र सवाल यह है कि कौन सा सबसे कुशल है?

एक दिलचस्प लेख पढ़ सकते हैं और आप ListView अधिक विस्तृत समझ सकें: http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

1

आप इसका मतलब यह तो कोड के इस टुकड़े:

if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) parent.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.table_row, null); 
} else { 
    itemView = convertView; 
} 

आप के लिए अनावश्यक लगता है: कोड के इस टुकड़े एंड्रॉयड कोशिकाओं की एक अपेक्षाकृत छोटी संख्या बनाने के लिए अनुमति देता है (कोशिकाओं है कि अपनी स्क्रीन + पर दिखाई दे रहे की संख्या के बराबर है -), और फिर इन कोशिकाओं को "रीसायकल" - उपयोगकर्ता को सूची बनाने के बजाए सूची को स्क्रॉल करते समय बार-बार उपयोग करें आपके सरणी में प्रत्येक ऑब्जेक्ट के लिए सेल। इस के साथ तुम्हारी मदद करेगा:

  1. सहेजा जा रहा है स्मृति - क्योंकि आप अपने सरणी

  2. CPU उपयोग सहेजा जा रहा है में प्रत्येक तत्व के लिए दृश्य बनाने नहीं है - xml फ़ाइल से बाहर एक दृश्य वस्तु बनाने ("बढ़ा-चढ़ाकर ") अपेक्षाकृत महंगा काम है और आपके सरणी में प्रत्येक आइटम के लिए ऐसा करने से आपके यूआई थ्रेड

हो सकता है
संबंधित मुद्दे