BaseAdapter優化深入分析

2021-07-04 10:36:18 字數 2843 閱讀 4394

baseadapter是乙個資料介面卡,將我們提供的資料格式化為listview可以顯示的資料,baseadapter的優化直接影響到listview的顯示效率。

我們都知道,listview自帶有**機制,當乙個item滑出螢幕的時候,listview會自動把這個listview**到緩衝區,當有乙個item滑入螢幕的時候,listview會自動從緩衝區讀取乙個item,並給它賦上值,然後顯示出來,這便是listview的**機制,然而,如果你在baseadapter中沒有做相應的優化,你的程式有可能根本就沒有使用listview的**機制,這將會造成很大的資源浪費。好了,下來我們看看baseadater的優化問題。

xmlns:android=""

xmlns:tools=""

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.baseadapter.mainactivity" >

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/listview"

>

listview>

relativelayout>

2.在mainactivity中對資料進行初始化:

public

class

mainactivity

extends

activity

private

void

initdata()

}}

由於我們把adapter單獨抽取成了乙個類,因此要通過構造方法來傳遞上下文和資料兩個引數。

再來乙個item.xml

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

android:id="@+id/username"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

/>

android:id="@+id/nickname"

android:layout_weight="1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

/>

linearlayout>

android:id="@+id/age"

android:layout_width="match_parent"

android:layout_height="wrap_content"

/>

linearlayout>

@override

public

intgetcount()

@override

public object getitem(int position)

@override

public

long

getitemid(int position)

@override

public view getview(int position, view convertview, viewgroup parent)

@override

public view getview(int position, view convertview, viewgroup parent)

上面已經解決了**item的問題,但是每次都要findviewbyid依然是非常耗時,所以這裡我們將要使用乙個viewholder來解決這個問題。所有item中的控制項我們都在viewholder這個類中來說明,然後在例項化convertview的時候把viewholder儲存在convertview中,在後面的使用中直接從convertview中獲得viewholder。這樣就避免了每次findviewbyid,盡量節省顯示時間。

@override

public view getview(int position, view convertview, viewgroup parent) else

viewholder.username

.settext(list.get(position).getusername());

viewholder.nickname

.settext(list.get(position).getnickname());

viewholder.age

.settext(list.get(position).getage() + "");

return convertview;

}

ListView之BaseAdapter的基本使用

當 adapter和arrayadapter不能滿足我們的需求時,我們就需要通過繼承baseadapter來建立我們自定義的介面卡 1 baseadapter的基本結構 方法 getcount 介面卡資料集中資料個數 getitem int position 從資料集中獲取指定位置的資料項 geti...

Android入門 BaseAdapter介面卡

介面卡類 實現baseadapter方法 重寫固定的四個方法 上下級布局 context 資料來源arraylist beans 構造方法 override public int getcount override public object getitem int position overrid...

mysql 深入優化 Mysql的深入優化

ok,廢話不多說,上乾貨。調優思路 0.硬體優化 1.資料庫設計與規劃 以後再修改很麻煩,估計資料量,使用什麼儲存引擎 2.資料的應用 怎樣取資料,sql 語句的優化 3.磁碟 io 優化 4.mysql 服務優化 記憶體的使用,磁碟的使用 5.my.cnf 內引數的優化。0.硬體優化 cpu 64...