Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> BaseAdapter獲取View之三重境界,baseadapterview

BaseAdapter獲取View之三重境界,baseadapterview

編輯:關於android開發

BaseAdapter獲取View之三重境界,baseadapterview


在BaseAdapter獲取View之前,BaseAdapter需要與數據源相關聯。

可以使用構造方法:

   private List<ItemBean> baseListItems;
   private LayoutInflater mInflate;      //布局裝載器
   public MyBaseAdapter(Context context,List<ItemBean> listItems){
    baseListItems = listItems;      //將數據源與數據適配器關聯
    mInflate = LayoutInflater.from(context);      //初始化布局裝載器
}

 

BaseAdapter獲取View分三種:逗比式,普通式,文藝式。

逗比式:需要多次新建View,沒有充分利用列表組件(ListView,GridView)的緩沖機制,有浪費很大資源的嫌疑。

  @Override
  public View getView(int i, View convertView, ViewGroup viewGroup) {
     View view = mInflate.inflate(R.layout.simple_item, null);    //重復新建View.其中mInflate 為布局裝載器,可從要使用的當前的Adapter的界面對象獲得.
     ImageView imageView = (ImageView) view.findViewById(R.id.header);
     TextView personName = (TextView) view.findViewById(R.id.personName);
     TextView desc = (TextView) view.findViewById(R.id.desc);
     //創建列表項對應的Bean對象
     BaseItemBean itemBean = baseListItems.get(i);
     //給個組件賦值
     imageView.setImageResource(itemBean.Header);
     personName.setText(itemBean.PersonName);
     desc.setText(itemBean.Desc);
     return view;
  }   

普通式:利用了ListView的緩存機制。

@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
    if (convertView == null) {        //判斷緩存池中是否有當前列表項布局對應的view,當為null時,使用布局裝載器轉換,否則直接使用
        convertView = mInflate.inflate(R.layout.simple_item, null);      //避免了重復的創建大量的convertView.
    }
    ImageView imageView = (ImageView) convertView.findViewById(R.id.header);
    TextView personName = (TextView) convertView.findViewById(R.id.personName);
    TextView desc = (TextView) convertView.findViewById(R.id.desc);
    //創建列表項對應的Bean對象
    BaseItemBean itemBean = baseListItems.get(i);
    //給個組件賦值
    imageView.setImageResource(itemBean.Header);
    personName.setText(itemBean.PersonName);
    desc.setText(itemBean.Desc);
    return convertView;
  }

文藝式:在普通式中,雖然利用了listView的緩存機制,避免了convertView的重復創建,但仍然存在多個findViewByID() 操作,浪費了大量的資源,為了避免此情況,使用內部類ViewHolder。。。

  @Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
      
      ViewHolder viewHolder;
      if (convertView == null) {
    convertView = mInflate.inflate(R.layout.simple_item, null);
    viewHolder = new ViewHolder(); //初始化ViewHolder
    //在創建完convertView後將列表項中的各組件保存到ViewHolder中
    viewHolder.Header = (ImageView) convertView.findViewById(R.id.header);
    viewHolder.PersonName = (TextView) convertView.findViewById(R.id.personName);
    viewHolder.Desc = (TextView) convertView.findViewById(R.id.desc);
    //通過setTag將ViewHolder與convertView綁定
    convertView.setTag(viewHolder);
    }else {
    //當convertVIew不為空時,通過getTag獲取ViewHolder對象
    viewHolder = (ViewHolder) convertView.getTag();

    }
    //給convertView個組件賦值
     BaseItemBean itemBean = baseListItems.get(i);
    viewHolder.Header.setImageResource(R.mipmap.ic_launcher);
    viewHolder.PersonName.setText(itemBean.PersonName);
    viewHolder.Desc.setText(itemBean.Desc);
    return convertView;
}
    //創建內部類ViewHolder,需要類中的各變量與列表項的各單元組件相對應
    public class ViewHolder{
    public ImageView Header;
    public TextView PersonName;
    public TextView Desc;
    }  
總結:在開發過程中,應盡量使用文藝式,這樣有利於充分利用資源,同事優化了開發效率。




http://www.bkjia.com/Androidjc/1192336.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/1192336.htmlTechArticleBaseAdapter獲取View之三重境界,baseadapterview 在BaseAdapter獲取View之前,BaseAdapter需要與數據源相關聯。 可以使用構造方法: private ListItemBean b...

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved