ListView 是一個控件,一個在垂直滾動的列表中顯示條目的一個控件,這些條目的內容來自於一個ListAdapter (適配器)。
說明:(結合練習代碼一起看)
ListAdapter是一個接口,若要獲得適配器adapter,需要創建一個類去實現ListAdapter,而Java中有提供這種實現ListView 的類,可直接創建個類來繼承.在公司ListAdapter的BasaAdapter實現類.(ListAdapte--rAPI詳接)
1.佈局添加Listview
2.找到listview----------與其他控件一樣,通過 findViewById() 獲取控制權.
3.創建一個Adapter適配器繼承BaseAdapter,封裝4個方法,其中getcount,getview必須封裝
getcount:告訴listview要顯示的條目數
getview:告訴listview每個條目顯示的內容。
4.創建Adapter的一個對象,設置給listview。
listview.setAdapter(ListAdapter adapter);
listview優化
adapter中getview方法會傳進來一個convertView,convertView是指曾經使用過的view對象,可以被重複使用,但是在使用前需要判斷是否爲空,不爲空直接複用,並作爲getview方法的返回對象。
TextView view = null;
if(convertView != null){//判斷converView是否爲空,不爲空重新使用
view = (TextView) convertView;
}else{
view = new TextView(mContext);//創建一個textView對象
}
return view;
//根據傳入item的下標,獲取到view對象
/*
* int position, 表示item所在listView中的下標,也是在數據源中下標所對應的數據
* View convertView, 緩存機制,當一些item項滑出屏幕的時候,會創建新的View對象,這樣會使得內存資源佔據,
* 所以使用convertView判斷是否爲空,如果爲空的說明item沒有滑出,需要創建新的view對象
* 如果不爲空,說明已經滑出類屏幕所以使用convertView ,view = convertView,
* 可以把convert 理解爲滑出的view對象
* ViewGroup parent 視圖組對象,即 表示當前繪製的items項所屬的ListView對象。
* */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
解析:這裏System打印的map對象,來辨別TextView對象的唯一性.利用了map的鍵值對(key:哈希值),以及對象在內存中哈希值的唯一性.而Map可以對key相同的鍵值對進行合併.
listview顯示原理以及注意事項
listview顯示原理 (瞭解)
1.要考慮listview顯示的條目數 getcount
2.考慮listview每個條目顯示的內容 getview
3.考慮每個item的高度,因爲屏幕的多樣化
4.還要考慮listview的滑動,監聽一箇舊的條目消失,一個新的條目顯示。
ListView怪異現象
ListView控件定義時即<ListView>,若lay_width與lay_height定義爲"wrap_content",則會多次執行調用getView方法,並創建多個重複(若是顯示內容的數量的較少,不足以一屏來顯示)View(用adapter顯示內容).
建議,創建ListView時,lay_width與lay_height定義爲"fill_parent".