編輯:關於android開發
在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...
Android Studio上面使用Ndk JNI 開發工程 Ps:最近比較閒,so.多更新幾篇博客算是總結一下.順便鄙視一下有的programmer照搬網上面文章,
Android開發環境的搭建之Java開發環境的安裝,androidjava(1) 安裝JDK(Java Developer Kit)。下載JDK1.8並安裝
Android選項卡動態滑動效果 本文會實現一個類似網易新聞(不說網易新聞大家可能不知道大概是什麼樣子)點擊超多選項卡,選項卡動態滑動的效果。 首先來看看布局,就是用Ho
FFmpeg使用手冊 - FFmpeg 的基本組成1 FFmpeg 的基本組成FFmpeg 的基本組成包含Format、Codec、Filter、Devices、Util