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。
相關文章
- ListView動態更新資料View
- Jquery Datatables (2) 動態載入資料型別jQuery資料型別
- 動態頁面資料載入不全的問題
- 封裝ListView,實現自動載入更多封裝View
- DLL動態庫動態載入
- 使用Echarts和Ajax動態載入資料進行大資料視覺化Echarts大資料視覺化
- ListView下拉重新整理,上拉自動載入更多View
- vue 動態載入元件Vue元件
- Java動態載入類Java
- 用Proxy 在 Vue 中解決動態載入資料的需求Vue
- 利用JQuery的load函式動態載入頁面 以及jQuery動態載入頁面和請求所返回的資料jQuery函式
- Android 動態載入資源例項解析Android
- Xamarin.Forms: 無限滾動的ListView(懶載入方式)ORMView
- listView懶載入解決快速拖動卡屏問題View
- 動態載入UserControl
- OrchardCore 如何動態載入模組?
- 使用dlopen載入動態庫
- QLibrary 載入動態庫
- vue 動態載入組建Vue
- goloader - golang動態載入Golang
- 熱更新--動態載入frameworkFramework
- 動態庫載入過程
- 動態載入APK原理分享APK
- 動態載入JS和CSSJSCSS
- 動態載入JS的方法JS
- 動態載入!dom應用!
- 指令碼的動態載入指令碼
- python動態載入(三)Python
- Flutter 例項 - 載入更多的ListViewFlutterView
- Silverlight動態載入呼叫XAML資源
- js動態載入實現提高網頁載入速度JS網頁
- EasyUI Jquery 動態載入樹,點選節點載入UIjQuery
- echarts遷移圖動態載入Echarts
- 如何動態載入js檔案JS
- Android動態載入jar/dexAndroidJAR
- Angularjs動態載入ECharts(一)AngularJSEcharts
- nginxphp動態編譯載入模組.NginxPHP編譯
- easyui 動態載入語言包UI