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 優化之路(一)佈局優化Android優化
- Flutter 佈局(十)- ListBody、ListView、CustomMultiChildLayout詳解FlutterView
- Android——ConstraintLayout的使用,優化佈局效能AndroidAI優化
- Android佈局優化三劍客Android優化
- 轉:Android佈局優化三劍客Android優化
- Android中常見的佈局和佈局引數Android
- ListView項(Item)的三種佈局View
- ListView優化View優化
- iOS Flexbox 佈局優化iOSFlex優化
- 姿勢擺好,一招學會android的佈局優化!Android優化
- Android 頁面多狀態佈局管理Android
- Android 佈局Android
- web 應用開發最佳實踐之一:避免大型、複雜的佈局和佈局抖動Web
- Web 開發者如何理解 Flutter 佈局之 —— 5. ListView 和 ScrollBarWebFlutterView
- rem佈局原理和優缺點REM
- Android學習—— Android佈局Android
- Android中View的測量和佈局過程AndroidView
- Android RecyclerView多型別佈局卡片解決方案AndroidView多型型別
- 失敗的十年,回顧反思
- 長文回顧和深度解析Supercell十年來的成就
- Android ListView中複雜資料流的高效渲染(一)AndroidView
- Flutter Interact 的 Flutter 1.12 大進化和回顧Flutter
- 前端常見的十種佈局前端
- Android的四個基本佈局Android
- android中的ListViewAndroidView
- 前端工作兩年多的回顧前端
- android --巧用 flexboxLayout 佈局AndroidFlex
- Flutter 開發從 0 到 1(三)佈局與 ListViewFlutterView
- 寫給 Android 開發的小程式佈局指南,Flex 佈局!AndroidFlex
- 軟體科技工業的十年回顧和展望 - Cindy Sridharan
- 安卓程式碼、圖片、佈局、網路和電量優化安卓優化
- 浮動佈局 和 flex佈局Flex
- 使用 CSS Grid 構建複雜佈局超實用的技巧!CSS
- Android FlexboxLayout 佈局詳解AndroidFlex