下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android數(shù)據(jù)適配器ViewHolder怎么用
這篇文章主要介紹了Android數(shù)據(jù)適配器ViewHolder怎么用的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Android數(shù)據(jù)適配器ViewHolder怎么用文章都會有所收獲,下面我們一起來看看吧。在使用Listview或GridView的時(shí)候,往往需要自定義數(shù)據(jù)適配器,一般都要覆寫getView(),在該方法中有一個convertView參數(shù),該參數(shù)就是用來加載數(shù)據(jù)時(shí)的View。初學(xué)者簡單但低效的方式public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
View
item=
inflater.inflate(R.layout.good_list_item,
null,
false);
ImageView
img
=
(ImageView)
item.findViewById(R.id.img);
TextView
price
=
(TextView)
item.findViewById(R.id.price);
img.setImageResource(R.drawable.ic_launcher);
price.setText("$"+list.get(position).price);
return
item;
}每次加載view,都要重新建立很多view對象,如果某條listview中有一萬條數(shù)據(jù),這種加載方式就歇菜了。利用convertView利用Android的Recycler機(jī)制,利用convertView來重新回收View,效率有了本質(zhì)提高。View的每次創(chuàng)建是比較耗時(shí)的,因此對于getview方法傳入的convertView應(yīng)充分利用!=null的判斷。public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
if(convertView==null){
convertView
=
inflater.inflate(R.layout.good_list_item,
null,
false);
}
TextView
tv_price
=
(TextView)convertView.findViewById(R.id.price)
ImageView
iv
=
(ImageView)convertView.findViewByID(R.id.img);
return
convertView;
}使用ViewHolderViewHolder將需要緩存的view封裝好,convertView的setTag才是將這些緩存起來供下次調(diào)用。當(dāng)你的listview里布局多樣化的時(shí)候viewholder的作用體現(xiàn)明顯,效率再一次提高。View的findViewById()方法也是比較耗時(shí)的,因此需要考慮只調(diào)用一次,之后就用View.getTag()方法來獲得ViewHolder對象。class
ViewHolder{
ImageView
img;
TextView
price;
}
public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
ViewHolder
holder
=
new
ViewHolder();
if(convertView==null){
convertView
=
inflater.inflate(R.layout.good_list_item,
null,
false);
holder.img
=
(ImageView)
convertView.findViewById(R.id.img);
holder.price
=
(TextView)
convertView.findViewById(R.id.price);
convertView.setTag(holder);
}else{
holder
=
(ViewHolder)
convertView.getTag();
}
//設(shè)置holder
holder.img.setImageResource(R.drawable.ic_launcher);
holder.price.setText("$"+list.get(position).price);
return
convertView;
}優(yōu)雅的使用ViewHolder使用ViewHolder時(shí),每次一遍一遍的findViewById,一遍一遍在ViewHolder里面添加View的定義,view一多,是不是感覺煩爆了,base-adapter-helper這個類庫似乎***的解決了這個問題。其設(shè)計(jì)思想是使用SparseArray來存儲view的引用,代替了原本的ViewHolder,不用聲明一大堆View,簡潔明了。我也自己動手寫了一個簡單版的ViewHolder。public
class
ViewHolder{
private
final
SparseArray<View>
views;
private
View
convertView;
private
ViewHolder(View
convertView){
this.views
=
new
SparseArray<View>();
this.convertView
=
convertView;
convertView.setTag(this);
}
public
static
ViewHolder
get(View
convertView){
if
(convertView
==
null)
{
return
new
ViewHolder(convertView);
}
ViewHolder
existedHolder
=
(ViewHolder)
convertView.getTag();
return
existedHolder;
}
public
<T
extends
View>
T
getView(int
viewId)
{
View
view
=
views.get(viewId);
if
(view
==
null)
{
view
=
convertView.findViewById(viewId);
views.put(viewId,
view);
}
return
(T)
view;
}
}使用的話就超級簡單和簡潔了:public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
if
(convertView
==
null)
{
convertView
=
LayoutInflater.from(context)
.inflate(R.layout.good_list_item,
null,
false);
}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年茶葉品牌區(qū)域銷售代理協(xié)議
- 2024秋季農(nóng)產(chǎn)品銷售代理合同
- 2024年度特色車位買賣協(xié)議(兒童樂園配套)3篇
- 《煤礦運(yùn)輸提升系統(tǒng)的安全檢查》培訓(xùn)課件2025
- 2024政府采購保密協(xié)議范本(體育場館建設(shè))3篇
- 2024新校區(qū)建設(shè)項(xiàng)目沉降數(shù)據(jù)收集與分析及基礎(chǔ)施工合同3篇
- 2024無線網(wǎng)絡(luò)覆蓋系統(tǒng)弱電裝修合同
- 2024政工程有限公承建的綠色環(huán)保智慧校園合同3篇
- 2024年精裝室內(nèi)實(shí)木門采購合同版
- 2024手繪墻繪藝術(shù)裝置設(shè)計(jì)與制作合同3篇
- 反恐應(yīng)急預(yù)案3篇
- 2025年中國社會科學(xué)院外國文學(xué)研究所專業(yè)技術(shù)人員招聘3人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 微更新視角下老舊社區(qū)公共空間適老化設(shè)計(jì)策略研究
- 《高血壓治療新進(jìn)展》課件
- 小紅書營銷師(初級)認(rèn)證理論知識考試題及答案
- 貴州省部分學(xué)校2024-2025學(xué)年高三年級上冊10月聯(lián)考 化學(xué)試卷
- 期末綜合試卷(試題)2024-2025學(xué)年人教版數(shù)學(xué)五年級上冊(含答案)
- 2023-2024學(xué)年貴州省貴陽外國語實(shí)驗(yàn)中學(xué)八年級(上)期末數(shù)學(xué)試卷(含答案)
- 2024ESC心房顫動管理指南解讀-第一部分
- 人力資源外包投標(biāo)方案
- 第二章藥物設(shè)計(jì)原理和方法
評論
0/150
提交評論