AndroidListView、GridView----重新認識Android(7)
ListView:列表檢視元件
主要就是將資料進行垂直列表顯示
一般在使用的時候需要自定義每項顯示的佈局檔案
作用:
1、顯示資料
2、處理使用者操作
三要素:
資料來源Data
顯示ListView
介面卡Adapter
常用屬性:
android:divider 分割線(顏色/圖片)
android:dividerHeight 分割線高度
介面卡:有資料和佈局組成
ArrayAdapter:陣列介面卡
SimpleAdapter:簡單介面卡
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
引數說明:
第一個引數:正文物件
第二個引數:對應的資料來源集合物件
第三個引數:每行顯示的佈局檔案
第四個引數:對應資料來源中Map的鍵名的字串陣列
第五個引數:對應顯示的佈局檔案中的UI元件ID
注意:第四和第五ID順序要匹配
BaseAdapter:介面卡類物件
日常開發使用最為廣泛的
自定義介面卡:自己建立類繼承BaseAdapter
並且實現方法
必須實現的方法說明:
public int getCount() 返回資料來源的大小
public long getItemId(int position) 返回指定位置的item控制元件id
public Object getItem(int position) 返回指定位置的資料
public View getView(int position,View convertView,ViewGroup parent) 返回指定位置的控制元件
使用步驟:
1、自定義類繼承BaseAdapter
2、宣告屬性(一般Context,集合物件,佈局過濾器物件),建立構造方法為屬性賦值
3、實現4個方法--getView方法最為複雜
4、對應的頁面建立自定義介面卡類物件,設定到列表檢視
佈局過濾器物件的建立方式:
1、LayoutInflater.from(context);
2、(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
一、ListView優化:
1、建議設定為"match_parent"或固定值,避免重複計算ListView的高度
2、ViewHolder的使用,將findViewById()獲取的控制元件封裝起來,便於複用
優點:減少getView()時通過infalter載入佈局的次數,減少記憶體開銷,提高效能
缺點:若使用非同步任務下載圖片時,可能會出現圖片錯位問題,因為convertView的位置可能是第一個
View的tag屬性:
同id屬性一樣,標識控制元件的唯一性
View.setTag(Object)設定控制元件的標籤
View.getTag()獲取控制元件的標籤
View.setTag()+ViewHolder+convertView複用,減少佈局載入和findViewBy的次數,降低的記憶體開銷,提升效能
說到底優化也就是將能夠複用的程式碼單獨拿出來
每項載入時都是使用的同一個物件
二、ListView常用方法:
1、setOnItemClickListener
設定項點選事件
2、setOnItemLongClickListener
設定長按事件(2秒)
3、setOnScrollListener
設定滾動事件
1. onScrollStateChanged(AbsListView view, int scrollState):監聽螢幕的滾動狀態的變動情況
scrollState狀態說明:
SCROLL_STATE_TOUCH_SCROLL(1):
表示正在滾動。當螢幕滾動且使用者使用的觸碰或手指還在螢幕上時為1
SCROLL_STATE_FLING(2) :
表示手指做了拋的動作(手指離開螢幕前,用力滑了一下,螢幕產生慣性滑動)。
SCROLL_STATE_IDLE(0) :
表示螢幕已停止。螢幕停止滾動時為0。
2. onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount):監聽螢幕滾動的item的數量
AbsListView : 當前滾動的ListView控制元件
firstVisibleItem:當前視窗中能看見ListView的第一個列表項ID(從0開始)
visibleItemCount:當前視窗中能看見的ListView列表項的個數(小半個也算)
totalItemCount:ListView列表項的總數
GridView:網格檢視
顯示資料按列
常用屬性:
android:numColumns 行的列數
android:columnWidth 每列的寬度
android:gravity 每一個單元在表格中的對齊方式
android:horizontalSpacing 列之間的水平間隔
android:verticalSpacing 行之間垂直間隔
android:stretchMode 伸展模式(縮放模式)
取值:
none 無縮放
ColumnWidth 根據列寬伸展
spacingWidth 根據空白伸展
spacingWidthUniform 均勻空白伸展
setAdapter(ListAdapter adapter):設定介面卡
setOnScrollListener:設定滾動事件
setOnItemClickListener:設定點選事件
setOnItemLongClickListener:設定長按事件
相關文章
- Android元件---重新認識Android(2)Android元件
- Android非同步----重新認識Android(6)Android非同步
- Android的儲存----重新認識Android(9)Android
- Android的SQLite----重新認識Android(10)AndroidSQLite
- Android程式的結構---重新認識Android(1)Android
- Android常用佈局元件----重新認識Android(3)Android元件
- [Android]元件化-重新認識AndroidManifestAndroid元件化
- Android的Menu_Dialog----重新認識Android(8)Android
- Android啟動模式及Intent屬性----重新認識Android(5)Android模式Intent
- 重新認識CREATE DATAFILE命令
- 重新認識口令檔案
- 重新認識React Native和Android的通訊原理React NativeAndroid
- Android四大元件之Activity----重新認識Android(4)Android元件
- 重新認識 React 生命週期React
- 重新認識了下Entity FrameworkFramework
- 重新認識IT領導能力(轉)
- 重新認識原型和原型鏈三原型
- 重新認識原型和原型鏈一原型
- 重新認識原型和原型鏈二原型
- 重新認識受控和非受控元件元件
- 重新認識Java微服務架構-認證服務Java微服務架構
- Java 混淆那些事(一):重新認識 ProGuardJava
- 重新認識 async/await 語法糖AI
- 重新認識flex縮寫屬性—[flex]Flex
- ReactNative填坑之旅–重新認識RNReact
- Android - 認識ContextAndroidContext
- Android-認識BitmapAndroid
- 重新認識Docker Compose之Sidecar模式DockerIDE模式
- 重新認識融雲,「不止即時通訊」
- 重新認識javascript物件(一)——物件及其屬性JavaScript物件
- 在HTML5的時代,重新認識CookieHTMLCookie
- 從騰訊佈局教育,重新認識教育科技
- 媒體內外:重新認識“電視遊戲”時代遊戲
- 如何寫工程程式碼——重新認識物件導向物件
- 6歲!是時候重新認識下Serverless了Server
- 6 歲!是時候重新認識下 Serverless 了Server
- Java小白進階筆記(1)-重新認識JavaJava筆記
- 重新認識Windows系統中的【我的文件】Windows