Android 對BaseAdapter做優化處理

2021-09-06 12:36:25 字數 2020 閱讀 9813

對於baseadapter相信大家都不陌生,都知道該怎樣用、怎樣顯示資料、怎樣盡可能的把每個item做的令自己滿意。但問題來了:有些朋友會說我介面做的非常的漂亮,資料也顯示的非常完美,但是問什麼我的listview會如此的卡呢?

呵呵,今天我們就來解決這個問題。(關於優化,和解決listview卡的問題)

listview的繪製機制:當系統開始好繪製listview的時候,首先會呼叫getcount()方法(該方法的返回值實際是listview呼叫adapterview的getcount()方法得到的)的到其返回值,即listview的item個數,返回值是多少就會繪製多少個item(即呼叫多少次baseadapter的getview)。之後系統會呼叫baseadapter的getview方法繪製每乙個item。最後就會在頁面上呈現出我們想要的效果。

通過上面的繪製機制我們可以看出:要想對baseadapter進行優化實際上優化的是baseadapter的getview方法,因為一旦listview開始繪製必定會呼叫getview方法。

怎麼優化呢?

一、一點都沒有優化的getview:

@override

public view getview(final

intposition, view convertview, viewgroup arg2)

上面的getview就是沒有做任何處理的getview()此方法在listview每次繪製的時候都會建立r.layout.p_item布局,並且每次都會建立該布局中的button按鈕。

如果該布局item非常複雜(例如:有幾個imageview和幾個button、幾個textview)這就極大的耗費了系統的效能

二、重用主布局item檔案:

@override

public view getview(final

intposition, view convertview, viewgroup arg2)

button btn =(button)convertview.findviewbyid(r.id.p_item_btn);

return

convertview;

}

我們在建立convertview之前加上乙個是否為空的判斷,如果為空才建立不為空則不建立,這樣就不用每次建立getview的時候都重新建立布局了。對布局重用就好了

(這種方法也是很多朋友一直都使用的方法)

三、重用布局item,並且重用布局中的控制項。

class mybaseadapter extends

baseadapter

private

layoutinflater inflater;

private

context context;

public

mybaseadapter(context context)

list

ris = new arraylist();

public

void setlist(listris)

@override

public

intgetcount()

@override

public object getitem(int

arg0)

@override

public

long getitemid(int

arg0)

@override

public view getview(final

intposition, view convertview, viewgroup arg2)

holder.btn.settext("測試");

return

convertview;

}}

使用這種方法來處理baseadapter會極大的提高baseadapter的效能,因為不僅布局item重用了,而且item中的控制項也重用了。因此在listview進行繪製的時候時間上getview方法只用初始化布局一次就能夠多次使用。非常的節省效能。

彩筆對android中ninepatch的理解

目錄 sdk tools draw9patch 為啥叫9patch呢,也許是通過劃線劃點的操作,將素材裁成9分,有點類似於九宮格的樣子。自行腦補。從左到右依次說明都是幹嘛地!zoom 操作介面縮放 show lock 覆蓋原圖大小,沒什麼亂用 show content 劃右側和下側的線可能需要點上,...

Android 對電池狀態的監視

最近在開發乙個與gps相關的專案,因為其中涉及到了gps的使用,眾所周知,gps是相當耗電的,因此就想著怎麼能知道當前的電量,並且在電量達到乙個下限的時候,及時提醒給使用者,以根據情況關閉gps,節省電量,以備 急用,後來查資料,看api,終於找到了方法,怎麼來監視電量,根據電量的變化來獲取當前的電...

Android版本和API Level的對應關係

在開發android時,老是不知道android版本號和對應api level,這個問題真是麻煩,我們在發布聲波傳輸sdk時也遇到這樣的問題,版本號是對外發布的版本號,一般都是主版本號.子版本號.修正版本號的命名規則,說白了這是給人看的 而api level是程式中的乙個巨集引數,是為了版本相容的,...