自定義Adapter中對ListView的優化

2021-06-28 21:19:36 字數 1721 閱讀 8680

現在已經寫好乙個簡單的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 ...