Android ListView適配器(Adapter)優(yōu)化方法詳解
Android ListView的優(yōu)化,在做Android項(xiàng)目的時(shí)候,在用到ListView 界面及數(shù)據(jù)顯示,這個(gè)時(shí)候如果資源過(guò)大,對(duì)項(xiàng)目來(lái)說(shuō),用戶體驗(yàn)肯定是不好的,這里就對(duì)如何優(yōu)化做了詳細(xì)介紹:
Adapter的作用就是ListView界面與數(shù)據(jù)之間的橋梁,當(dāng)列表里的每一項(xiàng)顯示到頁(yè)面時(shí),都會(huì)調(diào)用Adapter的getView方法返回一個(gè)View。想過(guò)沒(méi)有? 在我們的列表有1000000項(xiàng)時(shí)會(huì)是什么樣的?是不是會(huì)占用極大的系統(tǒng)資源?
ListView的Adapter的作用如下圖所示:
先看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item_icon_text, null); ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return item; }
怎么樣?如果超過(guò)1000000項(xiàng)時(shí),后果不堪設(shè)想!您可千萬(wàn)別這么寫(xiě)!
我們?cè)賮?lái)看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.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; }
怎么樣,上面的代碼是不是好了很多?系統(tǒng)將會(huì)減少創(chuàng)建很多View。性能得到了很大的提升。
還有沒(méi)有優(yōu)化的方法呢? 答案是肯定的:
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; }
怎么樣?會(huì)不會(huì)又給您的系統(tǒng)帶來(lái)很大的提升呢?看看下面三種方式的性能對(duì)比圖您就知道了!
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 舉例講解Android應(yīng)用中SimpleAdapter簡(jiǎn)單適配器的使用
- Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法
- Kotlin編寫(xiě)Android適配器Adapter
- Android SimpleAdapter適配器使用詳解
- Android之自定義實(shí)現(xiàn)BaseAdapter(通用適配器一)
- Android ListView和Adapter數(shù)據(jù)適配器的簡(jiǎn)單介紹
- Android控件系列之相冊(cè)Gallery&Adapter適配器入門(mén)&控件縮放動(dòng)畫(huà)入門(mén)
- Android設(shè)計(jì)模式之適配器(Adapter)模式
- Android適配器(Adapter)的概念與自定義
相關(guān)文章
Android實(shí)現(xiàn)文字和圖片混排(文字環(huán)繞圖片)效果
這篇文章主要介紹了Android實(shí)現(xiàn)文字和圖片混排的方法,實(shí)例分析了文字環(huán)繞圖片效果的具體功能顯示及頁(yè)面布局實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10Android編程實(shí)現(xiàn)點(diǎn)擊EditText之外的控件隱藏軟鍵盤(pán)功能
這篇文章主要介紹了Android編程實(shí)現(xiàn)點(diǎn)擊EditText之外的控件隱藏軟鍵盤(pán)功能,涉及Android控件的功能、屬性及相關(guān)操作技巧,需要的朋友可以參考下2017-06-06Android滑動(dòng)動(dòng)態(tài)分頁(yè)實(shí)現(xiàn)方法
這篇文章主要介紹了Android滑動(dòng)動(dòng)態(tài)分頁(yè)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)滑動(dòng)動(dòng)態(tài)分頁(yè)的操作步驟與核心實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-10-10Android實(shí)現(xiàn)登錄郵箱的自動(dòng)補(bǔ)全功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)登錄郵箱的自動(dòng)補(bǔ)全功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04Android 實(shí)現(xiàn)通知消息水平播放、無(wú)限循環(huán)效果
Android 實(shí)現(xiàn)通知消息水平播放、無(wú)限循環(huán)效果非常常見(jiàn),今天小編給大家分享實(shí)例代碼感興趣的朋友參考下吧2017-08-08淺析Android企業(yè)級(jí)開(kāi)發(fā)數(shù)據(jù)綁定技術(shù)
這篇文章通過(guò)代碼實(shí)例分析了Android企業(yè)級(jí)開(kāi)發(fā)數(shù)據(jù)綁定技術(shù)的應(yīng)用以及相關(guān)的原理知識(shí),跟著小編一起學(xué)習(xí)參考下吧。2017-12-12android高仿微信表情輸入與鍵盤(pán)輸入代碼(詳細(xì)實(shí)現(xiàn)分析)
表情與鍵盤(pán)的切換輸入大部分IM都會(huì)需要到,本篇文章主要介紹了android高仿微信表情輸入與鍵盤(pán)輸入,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12