ListView動態載入資料
ListView是Android中常用的控制元件之一,一般用來展示那種列表的資訊。現在有RecycleView可以替代,效能也很好,但是ListView依然有著很大的使用範圍。ListView的使用方法很簡單,在佈局檔案中定義,在Activity裡面引用,在定義一個Adapter繼承自BaseAdapter(重寫幾個關鍵方法就行),最後關聯一些就OK了。
所有的關鍵在於Adapter中,自定義一個ListAdapter繼承自BaseAdapter。
兩個常量不用做過多關心,是用來做佈局的。方法getItem(int position)和getItemId(int position)看名字就能明白是幹嘛用的了,不做過多的闡述。對於方法getCount()返回的是一個int值,這個就是指的是ListView中有多少個Item。一般就是有多少個實體類了。所以我直接了實體類集合的長度size();至於這個DataBean.mListViewData是我定義的一個常量工具類,就是把這個實體類的集合抽出來,唯一化,在之後更新資料的時候方便一點。具體程式碼如下:
下面關鍵看方法getView()和內部類ViewHolder。先上程式碼:
ViewHolder的出現是對ListView的一種優化,因為在ListView中的每一個Item的佈局樣式都是一樣的,所以其中findViewById()的過程結果都是一樣的,所以為了節省每次尋找浪費的時間就出現了ViewHolder,大概的意思就是把第一次查詢的結果記錄下來,之後直接呼叫結果就行了。比如我上面的ViewHolder中只有ImageView和TextView兩個控制元件,是因為我上面每個Item中就是這樣的佈局。同時,沒有必要每個Item都建立一個View,因為當Item被滑動到不可見時,那個不可見的View物件不會被銷燬,完全可以複用。
引數position指的是第幾條Item,引數convertView指的是是否有可複用的View。就是有沒有被建立了但是現在處於不可見狀態的View物件。在剛開始的時候這個都會是NULL。那個判斷語句中的過程就是在儲存和複用的過程,就是隻建立可見的數量的View物件。一個Recycle的迴圈而已。這張圖片可以很好的解釋這個過程。
後面的程式碼就是載入圖片和設定文字,之後返回這個convertView物件。這就是ListView的基本用法和ViewHolder的對ListView的優化。但是有一個問題,就是不能一下子將所有的Item全部載入出來,希望在我們下滑到底部的時候載入剩下的部分,這就是所說的動態載入。
動態載入就是現在ListView中載入一部分資料,然後設定一個監聽器,當監聽到ListView滑動到底部時,再載入接下來的資料,ListView再重新整理一下。具體過程如下
onScrollSatateChanged()中,int scrollState引數一般有三個值代表了三個狀態。SCROLL_STATE_TOUCH_SCROLL:手指正拖著ListView滑動。SCROLL_STATE_FLING:ListView正自由滑動。SCROLL_STATE_IDLE:ListView滑動後靜止。
onScroll()方法中的引數,firstVisibleItem:第一個可見Item的下標。visibleItemCount:可見Item的數量。totalItemCount:ListView中所有Item的數量。
當載入完更多的資料之後,再呼叫listAdapter.notifyDataSetChanged()方法就可以對ListView中的Item做更新,載入更多。這個方法應該就是使用的觀察者模式,觀察到資料產生變化,則重新整理UI。
相關文章
- Jquery Datatables (2) 動態載入資料型別jQuery資料型別
- 動態頁面資料載入不全的問題
- DLL動態庫動態載入
- 動態載入UserControl
- Xamarin.Forms: 無限滾動的ListView(懶載入方式)ORMView
- Flutter 例項 - 載入更多的ListViewFlutterView
- python動態載入(三)Python
- vue 動態載入元件Vue元件
- Java動態載入類Java
- goloader - golang動態載入Golang
- QLibrary 載入動態庫
- 指令碼的動態載入指令碼
- 使用dlopen載入動態庫
- Flutter 基類BaseWidget封裝(錯誤態、載入態、無資料態)Flutter封裝
- ListView 之非同步載入圖片亂序View非同步
- flutter - listView 下拉重新整理 上拉載入FlutterView
- Flutter 開發從 0 到 1(四)ListView 下拉載入和載入更多FlutterView
- echarts遷移圖動態載入Echarts
- OrchardCore 如何動態載入模組?
- 資料載入
- Flutter listview下拉重新整理 上拉載入更多FlutterView
- Android:使用LoadingLayout來展示載入資料時不同狀態Android
- Android native層動態載入so庫Android
- 動態載入的一些坑
- vue如何動態載入本地圖片Vue地圖
- javascript如何動態載入js檔案JavaScriptJS
- Flutter的ListView(靜態列表)FlutterView
- 啟動優化之動態庫延遲載入優化
- Flutter ListView封裝,下拉重新整理、上拉載入更多FlutterView封裝
- 載入動態連結庫——dlopen dlsym dlclose
- vue後臺管理之動態載入路由Vue路由
- SyntaxHighlighter 頁面動態js載入方式整理JS
- Drools與動態載入規則檔案
- vue 動態選單以及動態路由載入、重新整理採的坑Vue路由
- Flutter入門進階之旅(十五)ListView下拉重新整理&上拉載入更多FlutterView
- (課程學習)Android必學-非同步載入 —— 監聽 ListViewAndroid非同步View
- jQuery 動態載入下拉框選項(Django)jQueryDjango
- ElementUI級聯選擇器動態載入DemoUI