編輯:關於Android編程
在Android開發中, ListView是重要的組件, 它以列表形式根據數據的長度, 自適應展示具體內容. 用戶可以自由的定義ListView每一列的布局.
當listview有大量數據需要加載的時候, 會占據內存, 影響性能. 這時候就需要按需填充, 並重新使用View, 減少對象的創建.
ListView加載數據都是在getView()方法中進行. 同時, 需要自定義ListView重寫ListAdapter: 如BaseAdapter, SimpleAdapter, CursorAdapter等.
優化ListView加載速度, 要讓convertView匹配列表類型, 並最大程度的重用convertView.
getView()的加載方法一般有以下三種方式:
(1) 最慢的加載方式: 每次都重新定義一個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;
}
(3) 最快的較方式: 定義一個ViewHolder,將convetView的tag設置為ViewHolder, 不為空時重用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;
}
三種方式的效率對比:
當處理一些耗時的資源加載時, 做到以下幾點, 可使你的加載更快更平滑:
(1) 適配器在界面主線程中進行修改
(2) 可以在任何地方獲取數據但應該在另外一個地方請求數據
(3) 在主界面的線程中提交適配器的變化並調用notifyDataSetChanged()方法(更新數據源)
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
在官方support.v4包裡,提供給我們一個兼容類ViewCompat。ViewCompat裡面針對幾個版本有不同的實現,根據不同版本進行判斷, 但是要注意的是,Vie
最近,公司的項目開始使用谷歌官方最新推出的IDE——Android Studio 1.0,發現使用studio打渠道包很容易。 下面
本文為大家分享了Android模擬位置的使用方法,支持Android6.0,供大家參考,具體內容如下1、開啟系統設置中的模擬位置Android 6.0 以下:【開發者選項
當我們的手指在Android屏幕上點擊或滑動時,就會觸發觸摸事件TouchEvent。在App中ViewGroup和View存在多級嵌套,在最外層的是Activity,最