在《android第一行**》的第三章,遇到了listview和recyclerview兩個複雜的控制項,完整的乙個listview和recyclerview需要書寫4部分**:listview和recyclerview的整體布局,介面卡型別類,listview和recyclerview的子布局,介面卡。其中,介面卡的寫法和優化相較更為複雜。
public
class
fruitadapter
extends
arrayadapter
//fruit是介面卡型別類
@override
public view getview(int position,view convertview,viewgroup parent)//重寫getview函式
}
1、一般寫法中listview的執行效率是很低的,在fruitadapter的getview()方法中,每次都將布局載入了一遍
[view view=layoutinflater.from(getcontext()).inflate(resourcedid,parent,flase);],這會成為效能的瓶頸。
仔細觀察會發現,getview()方法中有乙個view convertview引數,*這個引數用於將之前載入好的布局進行緩
存,以便之後可以進行重用。我們可以在getview()方法中進行判斷,如果convertview是null,則使用layoutinflater進行載入布局,否則直接對convertview進行重用*,**如下:
public
class
fruitadapter
extends
arrayadapter
//fruit是介面卡型別類
@override
public view getview(int position,view convertview,viewgroup parent)//重寫getview函式
else
//獲取子布局控制項的引用
imageview fruitimage=(imageview) view.findviewbyid(r.id.fruit_image);
textview fruitname=(textview) view.findviewbyid(r.id.fruit_name);
//設定控制項內容
fruitname.setimageresourced(fruit.getimageid());
fruitimage.settext(fruit.getname());
return view;
}}
2、經過1的優化,雖然已經不用重新去載入布局,但是每次在getview()方法中還是會呼叫view的findviewbyid方法
來獲取一次控制項的例項。我們可以借助乙個viewholder來對這部分進行優化.我們新增乙個內部類viewholder,並將控制項
的例項都存放在viewholder裡,然後呼叫view的settag()方法,將viewholder物件儲存在view中。當convertview不為null時,則呼叫view的gettag()方法,把viewholder取出。這樣控制項的例項都快取在了viewholder裡。**如下:
public
class
fruitadapter
extends
arrayadapter
//fruit是介面卡型別類
@override
public view getview(int position,view convertview,viewgroup parent)//重寫getview函式
else
//設定控制項內容
viewholder.fruitname.setimageresourced(fruit.getimageid());
viewholder.fruitimage.settext(fruit.getname());
return view;
}class
viewholder
}
介面卡模式Adapt
例子 牆上的插座為三孔介面,但是很多家電都是雙孔標準,這個時候就需要乙個介面卡,讓雙孔的家電通過介面卡後也可以接入三孔介面的插座 兩種介面卡 物件介面卡 三孔插座 雙孔插座 使用雙孔插座的電視 物件介面卡 author wjm date 2020 6 16 17 10 public class tv...
介面卡模式(Adapt) 設計模式(六)
作用 將乙個類的介面轉換成客戶希望的另外乙個介面。adapt 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。解析 adapt 模式其實就是把完成同樣的乙個功能但是介面不能相容的類橋接在一起使之可以在一起工作,這個模式使得復用舊的介面成為可能.實現 adapt 模式有兩種實現辦法,一種...
android學習 陣列介面卡 簡單介面卡
資料介面卡是將複雜的資料來源填充到指定的檢視介面中 1 陣列介面卡arrayadapter 用於繫結型別單一的資料,資料 可以是陣列或集合 2 簡單介面卡 adapter 也叫 並不簡單的簡單介面卡 用於繫結格式複雜的資料,資料 只能是特定泛型的集合 作用 介面卡是連線資料來源和檢視介面的橋梁 介面...