招生熱線
0755-86191118 0755-86191118
我的位置: 首頁 > 學習專區 > 安卓技術 > android中listview的優化

android中listview的優化

2012-02-22 11:32:00
來源:
[導讀] Adapter的作用是界面與數據之間的橋梁,通過設置適配器至ListView控件后(如調用ListView的 setAdapter(ListAdapter adapter)),列表的每
Adapter的作用是界面與數據之間的橋梁,通過設置適配器至ListView控件后(如調用ListView的 setAdapter(ListAdapter adapter)

),列表的每一項會顯示至頁面中。其實,當列表里的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View,如:

@Override

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

return super.getView(position, convertView, parent);

}

我們看一看下面的這段代碼:

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

View newView = mInflater.inflate(R.layout.list_item, null);

((TextView) newView .findViewById(R.id.text)).setText(DATA[position]);

((ImageView) newView .findViewById(R.id.icon)).setImageBitmap(

(position & 1) == 1 ? mIcon1 : mIcon2);

return newView ;

}

上面的代碼塊中,我通過LayoutInflater.inflate(,)將Layout文件–layout.list_item轉換為View.

(注:Layout也是View的子類,但在android中如果想將xml中的Layout轉換為View放入.java代碼中操作,只能通過Inflater,而不能通過findViewById())

這時,如果我的ITEM項有數以千條這樣多或更多呢,再以上面代碼塊的寫法,后果自己想想吧。

于是,改用其它一種寫法:

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

if (convertView == null) {

convertView = mInflater.inflate(R.layout.list_item, null);

}

((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);

((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(

(position & 1) == 1 ? mIcon1 : mIcon2);

return convertView;

}

這時,上面的代碼是不是好了很多?系統將會減少創建很多View。性能得到了很大的提升。

到這里,問一下,還有沒有優化的方法呢,是有的,請看————》》:

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

ViewHolder holder;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.list_item_icon_text, null);

holder = new ViewHolder();

holder.text = (TextView) convertView.findViewById(R.id.text);

holder.icon = (ImageView) convertView.findViewById(R.id.icon);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.text.setText(DATA[position]);

holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);

return convertView;

}

static class ViewHolder {

TextView text;

ImageView icon;

}

這樣系統性能會得到更大的提升。

希望可能幫助到大家。這也是平時面試當中面試官經常會問到的”ListView的優化”的問題。

評論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
一本久久a久久精品综合夜夜 | 日本欧美大码a在线观看 | 尤物视频免费在线观看 | 亚洲国产精品一区二区久久HS | 亚洲日韩乱码中文字幕 | 色综合视频一区二区三区 |