標(biāo)簽: Android Adapter ViewHolder
Adapter 的理解
Adapter :適配器桐智,因?yàn)?ListView 是一個(gè) View ,不能添加子項(xiàng),因此在呈現(xiàn)數(shù)據(jù)的時(shí)候就需要某種工具將數(shù)據(jù)呈現(xiàn)在 ListView 上,而 Adapter 就能充當(dāng)此角色渴庆。常用的 Adapter:ArrayAdapter、BaseAdapter等雅镊。
ViewHolder 的理解
要想使用 ListView 就需要編寫一個(gè) Adapter 將數(shù)據(jù)適配到 ListView上襟雷,而為了節(jié)省資源提高運(yùn)行效率,一般自定義類 ViewHolder 來減少 findViewById() 的使用以及避免過多地 inflate view仁烹,從而實(shí)現(xiàn)目標(biāo)耸弄。
Adapter的定義
- 繼承 BaseAdapter (可在繼承的時(shí)候指定泛型,擴(kuò)展使用);
- 重寫四個(gè)基本方法:
getCount():獲取數(shù)據(jù)的總的數(shù)量卓缰,返回 int 類型的結(jié)果计呈;
getItem(int position) :獲取指定位置的數(shù)據(jù),返回該數(shù)據(jù)征唬;
getItemId(int position):獲取指定位置數(shù)據(jù)的id捌显,返回該數(shù)據(jù)的id,一般以數(shù)據(jù)所在的位置作為它的id鳍鸵;
getView(int position,View convertView,ViewGroup parent):關(guān)鍵方法苇瓣,用于確定列表項(xiàng) - 創(chuàng)建 ViewHolder (包含列表項(xiàng)的控件。)
代碼展示(部分)
public class MyListAdapter extends BaseAdapter // 類定義
// 自定義數(shù)據(jù)集與布局加載器
List<Note> notes;
LayoutInflater inflater;
/** 構(gòu)造方法 */
public MyListAdapter(Context context,List<Note> notes){
this.notes = notes;
inflater = LayoutInflater.from(context);
}
/** 重寫方法 */
@Override
public int getCount(){
return notes.size();
}
@Override
public Object getItem(int position){
return notes.get(position);
}
@Override
public long getItemId(int position){
return position;
}
@Override
public View getView(int position,View convertView,ViewGroup parent){
ViewHolder viewHolder;
// 若無可重用的 view 則進(jìn)行加載
if(converView == null){
convertView = inflater.inflate('列表項(xiàng)布局文件',parent,false);
// 初始化 ViewHolder 方便重用
viewHolder = new ViewHolder();
viewHolder.tvTitle = (TextView) convertView.findViewById('id1');
viewHolder.tvContent = (TextView) convertView.findViewById('id2');
converView.setTag(viewHolder);
}else{ // 否則進(jìn)行重用
viewHolder = (ViewHolder)convertView.getTag();
}
// 獲得條目?jī)?nèi)容對(duì)象
Note note = notes.get(position);
// 設(shè)置內(nèi)容(Note Bean 需要自定義)
viewHolder.tvTitle.setText(note.getTitle());
viewHolder.tvContent.setText(note.getContent());
return converView;
}
/** 創(chuàng)建 ViewHolder */
class ViewHolder{
TextView tvTitle;
TextView tvContent;
}
至此偿乖,一個(gè)比較基礎(chǔ)的 Adapter 已經(jīng)完成,里面包含了 ViewHolder 的基本使用哲嘲,初學(xué)者可以參考次文檔進(jìn)行 Adapter 的編寫贪薪。
- 2017.3.7