listview是安卓中十分常見的乙個控制項,這裡不討論其它。至於為什麼要listview要進行viewholder的優化,網上有很多詳細的解釋,在這裡只簡單敘述:安卓螢幕有限,當listview的條目(item)很少的時候,一般不需要;而當item很多時,乙個螢幕往往顯示不了這麼多item,而對於程式本身來說,顯示不了但還是會建立item的例項,從而導致記憶體溢位等現象。
下面是本文的所演示程式的布局。
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.csdn_listview.mainactivity">
android:id="@+id/ed_name"
android:layout_width="200dp"
android:layout_height="50dp"
android:maxlength="6"/>
android:maxlength="6"
android:id="@+id/ed_age"
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_below="@+id/ed_name"
android:inputtype="numberdecimal" />
android:id="@+id/bt_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentright="true"
android:text="add" />
android:id="@+id/lv_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/ed_age">
listview>
relativelayout>
然後在mainactivity中進行必要的初始化:
private void init()
然後,我們需要為listview設定乙個介面卡listviewadapter繼承自baseadapter,該類重寫了四個方法:
@override
public
intgetcount()
@override
public object getitem(int i)
@override
public
long
getitemid(int i)
@override
public view getview(int position, view convertview, viewgroup viewgroup)
上面四個方法具體不討論,這裡主要講第四個方法。
getview()的三個引數代表的意義
int position: 位置,每乙個item的位置,可以理解為listview中item的編號。
view convertview:建立成功並且顯示完成後,徹底離開螢幕的那個item的view物件。
viewgroup viewgroup:這個屬性是載入xml檢視時使用。如:inflate(r.layout.adapter__item, parent, false);確定他父控制項,減少寬高的測算 (這個屬性博主到寫這個部落格時還沒用過,這裡到描述是盜用的其它人的。)
下面是convertview的使用:
if (convertview == null) else
使用方法:
判斷當前是否存在convertview,沒有就建立新的view,有就進行復用。
viewholder是乙個使用者自己定義的內部類,其作用是快取了顯示資料的檢視(view),加快了 ui 的響應速度(減少定址--findviewbyid)。其工作類似與convertview的復用。
具體步驟:
1:建立內部類
2:當需要建立新view時,定址,例項化。並設定tag,方便復用時取出。
3:當復用時gettag()。
private
class viewholder
holder.tv_age = (textview) view_item.findviewbyid(r.id
.tv_age);
holder.tv_name = (textview) view_item.findviewbyid(r.id
.tv_name);
holder =(viewholder) view_item.gettag();
第一次寫部落格,比較不成熟,繼續努力。
程式的demo沒上傳成功。。。正在嘗試
listView的復用優化
公司在做乙個需求,a 頁面有 lsitview,b頁面是系統設定,當b 中設定 黑白版切換時,再開啟a頁面時,a的 listview中的item 也要改變背景顏色。這裡提供我的做法 1 在getview中,將 new 出來的item 裝入乙個 集合中 2 當黑白版切換時,這時候切換到a頁面,a進行判...
android 的listview的優化
首先定義listview 首先是把這個listview顯示出來,在activity中兩個步驟 1 找到listview對應的布局 強轉 findviewbyid 對應id 2 設定介面卡 setadapt 這裡放介面卡 3 新建介面卡 new myadapt 這裡可以選擇實現adapter的介面,也...
ListView 中Adapter的優化
listview的adapter的作用如下圖所示 adapter的作用就是listview介面與資料之間的橋梁,當列表裡的每一項顯示到頁面時,都會呼叫adapter的getview方法返回乙個view。想過沒有?在我們的列表有1000000項時會是什麼樣的?是不是會占用極大的系統資源?先看看下面的 ...