Android ViewHolder 的基本使用

標簽: Android Adapter ViewHolder


Adapter 的理解

Adapter :適配器,因為 ListView 是一個 View ,不能添加子項,因此在呈現數據的時候就需要某種工具將數據呈現在 ListView 上,而 Adapter 就能充當此角色。常用的 Adapter:ArrayAdapter、BaseAdapter等。


ViewHolder 的理解

要想使用 ListView 就需要編寫一個 Adapter 將數據適配到 ListView上,而為了節省資源提高運行效率,一般自定義類 ViewHolder 來減少 findViewById() 的使用以及避免過多地 inflate view,從而實現目標。


Adapter的定義

  1. 繼承 BaseAdapter (可在繼承的時候指定泛型,擴展使用);
  2. 重寫四個基本方法:
    getCount():獲取數據的總的數量,返回 int 類型的結果;
    getItem(int position) :獲取指定位置的數據,返回該數據;
    getItemId(int position):獲取指定位置數據的id,返回該數據的id,一般以數據所在的位置作為它的id;
    getView(int position,View convertView,ViewGroup parent):關鍵方法,用于確定列表項
  3. 創建 ViewHolder (包含列表項的控件。)

代碼展示(部分)

public class MyListAdapter extends BaseAdapter // 類定義

// 自定義數據集與布局加載器
List<Note> notes;
LayoutInflater inflater;

/** 構造方法 */
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 則進行加載
    if(converView == null){
        convertView = inflater.inflate('列表項布局文件',parent,false);
        // 初始化 ViewHolder 方便重用
        viewHolder = new ViewHolder();
        viewHolder.tvTitle = (TextView) convertView.findViewById('id1');
        viewHolder.tvContent = (TextView) convertView.findViewById('id2');
        converView.setTag(viewHolder);
    }else{ // 否則進行重用
        viewHolder = (ViewHolder)convertView.getTag();
    }
    // 獲得條目內容對象
    Note note = notes.get(position);
    // 設置內容(Note Bean 需要自定義)
    viewHolder.tvTitle.setText(note.getTitle());
    viewHolder.tvContent.setText(note.getContent());
    return converView;
}

/** 創建 ViewHolder */
class ViewHolder{
    TextView tvTitle;
    TextView tvContent;
}

至此,一個比較基礎的 Adapter 已經完成,里面包含了 ViewHolder 的基本使用,初學者可以參考次文檔進行 Adapter 的編寫。

  • 2017.3.7
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容