基於“ViewHolder”技術提升Android ListView中Item View載入效率

來源:互聯網
上載者:User

標籤:android

對於提升Android中頻繁使用的ListView子Item View的載入效率,基於兩點基本考慮:

1,Android的View的建立比較消耗資源;

2,findViewById()也不是最快的。

所以在實際開發中經常使用的適配器中的getView()方法:

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

如果每次都在裡面建立一個新View出來,將導致效率低下,比較高效率的做法是每次判斷convertView是否為空白,若不為空白,則直接使用convertView的findViewById()把子View重建出來即可。

但是,這種做法雖然提升了效率,但仍不是最高效的做法,因為還是使用了findViewById()。

因此,進一步的效率提升改進之處是:使用一種稱為“ViewHolder”的技術,緩衝convertView中的View組件,使用convertView的setTag()和getTag(),每次當ListView需要建立Item的View時候,調用convertView的getTag()找出ViewHolder,重新複用。具體的使用方法如代碼所示:

package zhangphil.listview;import android.app.ListActivity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends ListActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ListView lv = this.getListView();setContentView(lv);ArrayAdapter adapter = new MyAdapter(this,android.R.layout.simple_list_item_2);lv.setAdapter(adapter);}private class MyAdapter extends ArrayAdapter {private int resId;private LayoutInflater mInflater;privateViewHolder holder = null; public MyAdapter(Context context, int resource) {super(context, resource);this.resId = resource;mInflater = LayoutInflater.from(context);}//子View的“容器”public final class ViewHolder {public TextView text1;public TextView text2;}@Overridepublic int getCount() {//巨大的資料return 10000;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = mInflater.inflate(resId, null);holder = new ViewHolder();  holder.text1=(TextView) convertView.findViewById(android.R.id.text1);holder.text2=(TextView) convertView.findViewById(android.R.id.text2);convertView.setTag(holder); }elseholder=(ViewHolder) convertView.getTag();holder.text1.setText("text1:"+position);holder.text2.setText("text2:"+position);return convertView;}}}



基於“ViewHolder”技術提升Android ListView中Item View載入效率

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.