Android回顧--(十) ListView的優化和多佈局複用
LIstView常用的三方法
- addHeaderView:這個方法的作用是在LIstView的頂部新增一個View
- addFooterView:在ListView的底部新增一個View
- setEmptyView:當ListView資料為空的時候,顯示一個對應的View
LayoutInflater inflater = getLayoutInflater(); //把這個佈局整成View
View headView=inflater.inflate(R.layout.list_item_headview,null);
View footView=inflater.inflate(R.layout.list_item_footview,null);
mListView.addHeaderView(headView);
mListView.addFooterView(footView);
TextView textView=new TextView(GoodListViewActivity.this);
textView.setText("沒有資料");
textView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
textView.setGravity(Gravity.CENTER);
mListView.setEmptyView(textView);
mListView.setAdapter(adapter); //給ListView新增頂部或者底部資訊一定是在 setAdapter之前
ListView的優化
- 複用convertView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){ //複用convertView
convertView=inflater.inflate(R.layout.list_infor_item,null);
//初始化那個viewHolder的物件
viewHolder=new ViewHolder();
//找控制元件
viewHolder.img=(ImageView) convertView.findViewById(R.id.mImageView);
viewHolder.lastInfor=(TextView) convertView.findViewById(R.id.mTextViewLastInfor);
viewHolder.userName=(TextView) convertView.findViewById(R.id.mTextViewUserName);
viewHolder.time=(TextView) convertView.findViewById(R.id.mTextViewTime);
//給這個convertView設定一個tag相當於:是將ViewHolder暫時裝進了convertView
convertView.setTag(viewHolder);
}else{
//從convertView裡面將viewHolder取出來
viewHolder=(ViewHolder) convertView.getTag(); //減少了那個findViewById的次數
}
//img先丟這裡.
viewHolder.lastInfor.setText(lists.get(position).getLastInfor());
viewHolder.userName.setText(lists.get(position).getUserName());
viewHolder.time.setText(lists.get(position).getTime());
new MyAsyncTask(viewHolder.img).execute(lists.get(position).getImg());
return convertView;
}
}
- 使用靜態的ViewHolder來儲存模板這樣可以減少findViewById的次數。
/**
* 靜態的ViewHolder模板
* @author apple
*
*/
static class ViewHolder{
ImageView img;
TextView userName;
TextView lastInfor;
TextView time;
}
ListView的上拉載入:
- 通過setOnScrollListener給ListView設定滾動事件
-
自定義一個類實現OnScrollListener
ListView的多佈局複用:
- 初始化資料來源
- 編寫介面卡
- 宣告靜態模板的物件
- ListView在實現多佈局複用時需要多重寫兩個方法:
a. getViewTypeCount:獲取ListView中佈局的種類
b. getItemViewType:獲取每個佈局的型別
- getView中應該分情況給Item設定內容
GridView網格檢視
解析資料和介面卡與ListView相同
GridView佈局中特有的屬性:
android:numColumns="3" //列數
android:verticalSpacing="2dp" //垂直間距
android:horizontalSpacing="2dp" //水平間距
相關文章
- Android 佈局優化Android優化
- Android優化之佈局優化Android優化
- Android效能優——佈局優化Android優化
- Android中佈局的優化Android優化
- Android佈局優化利器include和ViewStubAndroid優化View
- Android佈局優化技巧Android優化
- Android效能優化之佈局優化Android優化
- Android 優化之路(一)佈局優化Android優化
- Android繪製優化(二)佈局優化Android優化
- Flutter 佈局(十)- ListBody、ListView、CustomMultiChildLayout詳解FlutterView
- Android佈局檢測優化Android優化
- Android 佈局優化之includeAndroid優化
- Android中View繪製優化二一---- 使用標籤複用佈局檔案AndroidView優化
- Android佈局優化三劍客Android優化
- Android listView奇偶項採用不同的佈局AndroidView
- 佈局優化優化
- Android 效能優化(二)之佈局優化面面觀Android優化
- 轉:Android佈局優化三劍客Android優化
- Android學習之 UI佈局優化AndroidUI優化
- 常見面試題之ListView的複用及如何優化面試題View優化
- Android——ConstraintLayout的使用,優化佈局效能AndroidAI優化
- ListView項(Item)的三種佈局View
- Android中常見的佈局和佈局引數Android
- Android最佳效能實踐(4):佈局優化技巧Android優化
- 開源專案MergeAdapter,實現ListView複雜佈局APTView
- ListView的複用和快取機制View快取
- Android熱點回顧第十期Android
- listView中多個listItem佈局時,convertView快取及使用View快取
- ListView優化View優化
- web 應用開發最佳實踐之一:避免大型、複雜的佈局和佈局抖動Web
- iOS Flexbox 佈局優化iOSFlex優化
- 效能優化技巧知識梳理(1) 佈局優化優化
- 姿勢擺好,一招學會android的佈局優化!Android優化
- Web 開發者如何理解 Flutter 佈局之 —— 5. ListView 和 ScrollBarWebFlutterView
- 長文回顧和深度解析Supercell十年來的成就
- Android ListView功能擴充套件,實現高效能的瀑布流佈局AndroidView套件
- rem佈局原理和優缺點REM
- Android 頁面多狀態佈局管理Android