下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android數(shù)據(jù)適配器ViewHolder怎么用
這篇文章主要介紹了Android數(shù)據(jù)適配器ViewHolder怎么用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Android數(shù)據(jù)適配器ViewHolder怎么用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。在使用Listview或GridView的時(shí)候,往往需要自定義數(shù)據(jù)適配器,一般都要覆寫getView(),在該方法中有一個(gè)convertView參數(shù),該參數(shù)就是用來(lái)加載數(shù)據(jù)時(shí)的View。初學(xué)者簡(jiǎn)單但低效的方式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對(duì)象,如果某條listview中有一萬(wàn)條數(shù)據(jù),這種加載方式就歇菜了。利用convertView利用Android的Recycler機(jī)制,利用convertView來(lái)重新回收View,效率有了本質(zhì)提高。View的每次創(chuàng)建是比較耗時(shí)的,因此對(duì)于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才是將這些緩存起來(lái)供下次調(diào)用。當(dāng)你的listview里布局多樣化的時(shí)候viewholder的作用體現(xiàn)明顯,效率再一次提高。View的findViewById()方法也是比較耗時(shí)的,因此需要考慮只調(diào)用一次,之后就用View.getTag()方法來(lái)獲得ViewHolder對(duì)象。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一多,是不是感覺(jué)煩爆了,base-adapter-helper這個(gè)類庫(kù)似乎***的解決了這個(gè)問(wèn)題。其設(shè)計(jì)思想是使用SparseArray來(lái)存儲(chǔ)view的引用,代替了原本的ViewHolder,不用聲明一大堆View,簡(jiǎn)潔明了。我也自己動(dòng)手寫了一個(gè)簡(jiǎn)單版的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;
}
}使用的話就超級(jí)簡(jiǎn)單和簡(jiǎn)潔了: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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度石材行業(yè)人才交流與供貨合同
- 二零二五年度公共停車場(chǎng)車位租賃及增值服務(wù)合同
- 2025年度林木采伐安全與林業(yè)可持續(xù)發(fā)展合同4篇
- 二零二五年度私教兒童運(yùn)動(dòng)技能培訓(xùn)合同
- 二零二五年度診所掛證負(fù)責(zé)人免責(zé)及醫(yī)療責(zé)任保險(xiǎn)合同
- 2025版戶外廣告設(shè)施維護(hù)與安全保障合同3篇
- 2024版舊設(shè)備買賣合同協(xié)議
- 2025年度餐廳廚房設(shè)備更新與裝修合同3篇
- 二零二五年度綠色有機(jī)奶粉品牌代理銷售合同范本
- 二零二五年度嬰幼兒奶粉產(chǎn)品召回及風(fēng)險(xiǎn)管理合同范本4篇
- 安徽省淮南四中2025屆高二上數(shù)學(xué)期末統(tǒng)考模擬試題含解析
- 保險(xiǎn)專題課件教學(xué)課件
- 牛津上海版小學(xué)英語(yǔ)一年級(jí)上冊(cè)同步練習(xí)試題(全冊(cè))
- 室上性心動(dòng)過(guò)速-醫(yī)學(xué)課件
- 建設(shè)工程法規(guī)及相關(guān)知識(shí)試題附答案
- 中小學(xué)心理健康教育課程標(biāo)準(zhǔn)
- 四年級(jí)上冊(cè)脫式計(jì)算400題及答案
- 新課標(biāo)人教版小學(xué)數(shù)學(xué)六年級(jí)下冊(cè)集體備課教學(xué)案全冊(cè)表格式
- 人教精通版三年級(jí)英語(yǔ)上冊(cè)各單元知識(shí)點(diǎn)匯總
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 諾和關(guān)懷俱樂(lè)部對(duì)外介紹
評(píng)論
0/150
提交評(píng)論