倒目筆記 listview的優化

2021-07-23 19:45:19 字數 2723 閱讀 4590

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項時會是什麼樣的?是不是會占用極大的系統資源?先看看下面的 ...