標籤:android style blog color 使用 os io 資料
Android開發之中,listview是一個非常重要的組件,它以列表的形式顯示使用者的資料,使用者可以自由的定義LsitView每一列的內容,樣式,很多時候使用ListView都需要使用自訂Adapter,自訂Adapter之中最重要的莫過於getView方法了。
getView方法實現主要的三種方法:
1、第一種就是每次都給adapter new一個View載入布局。
例如:
public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item_icon_text, null); ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return item;}
使用這種方式會佔據大量記憶體,十分影響效能(不建議使用)
2、當convertView不為空白的時候直接重新使用convertView從而減少了很多不必要的View的建立,然後載入資料。
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item, parent, false); } ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return convertView; }
這種方式每次都要判斷view回收池之中是否有可用的view,如果有則重用;如果沒有則,建立View。(可以使用)
3、最快的一種方式:定義一個ViewHolder,將convetView的tag設定為ViewHolder,不為空白時重新使用即可
static class ViewHolder {TextView text;ImageView icon;} public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, parent, false); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.text.setText(DATA[position]);holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);return convertView;}
(推薦使用)