現在已經寫好乙個簡單的listview,它是這個樣子的
自定義adapter要繼承baseadapter,並且實現4個方法,其中getview是返回乙個檢視,對於listview的優化就要針對這個方法來優化
首先我們在getview方法中列印position和convertview,來觀察他們的值
其中convertview=null表示沒有空閒的view,position0到position9共10個,也就是我們當前乙個螢幕上最多可以顯示出來的item數量
下面有一張圖顯示了乙個螢幕最多可以容納的item數量
當我們向下滑動來顯示下面的view時,再來看看position和convertview的值
我們可以看到此時的contentview的值完全不一樣,這就意味著如果我們有1000個item的話,
convertview將會有1000個不同的值,也就是呼叫了1000次getview方法,這無疑將影響效率
現在開始優化
首先我們來看看乙個螢幕最多可以顯示多少個item
仔細看看螢幕的最上方和最下方都有一點小邊,自己觀察後發現乙個螢幕最多可以容納10個item
這麼說我們只需要10個convertview,而不用新建1000個甚至更多,
這就像電梯的原理,最上面的item被頂出去後,它將會作為即將要顯示出來的item從最下面再顯示出來
這樣的話只需要執行10次getview方法
只需要這樣修改**
現在我們再來列印convertview
我只截了一部分,但可以看出這兩個的view是同乙個view
此時不管我們有少個item,那麼它只會新建我們乙個螢幕最多可以容納的item數量(我這裡是10個),這樣不會新建多餘的view,提高了效率
到這裡還沒有完,我們發現在getview方法中每次都要到布局檔案中拿到view,這也無疑增加了多餘的開銷
解決這個問題我們需要寫乙個viewholder類,裡面只存有屬性,作為乙個臨時的儲存器,把getview方法每次返回的view儲存起來,可以下次再用
接著在getview方法中做這樣的修改
這樣就可以重複利用getview方法返回的view了,而不用每次都要到布局檔案中找。
可復用的自定義Adapter
public abstract class myadapterextends baseadapter public myadapter arraylis ata,int mlayoutres override public intgetcount override public t getitem ...
對自定義UITableViewCell的理解
自定義uitableviewcell有兩種方法 1.較早版本 子類uitableviewcell 並利用xib構造 2.利用storyboard直接自定義cell 1.利用xib 設計好自定義的cell並且連線好控制項後 有兩種方法引用我們自己的cell 方法1 1 uitableviewcell ...
對自定義UITableViewCell的理解
自定義uitableviewcell有兩種方法 1.較早版本 子類uitableviewcell 並利用xib構造 2.利用storyboard直接自定義cell 1.利用xib 設計好自定義的cell並且連線好控制項後 有兩種方法引用我們自己的cell 方法1 1 uitableviewcell ...