安卓開發-Adapter 適配器


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

 

LayoutInflater

     它的作用類似於findViewById(),不同點是LayoutInflater是用來找res/layout/下的xml布局文件,並且實例化;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)。

    具體作用:

   1)、對於一個沒有被載入或者想要動態載入的界面,都需要使用LayoutInflater.inflate()來載入;

   2)、對於一個已經載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。

獲得 LayoutInflater 實例的三種方式

  1. LayoutInflater inflater = getLayoutInflater();//調用Activity的getLayoutInflater()
  2. LayoutInflater inflater = LayoutInflater.from(context);
  3. LayoutInflater inflater = (LayoutInflater)context.getSystemService

 

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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM