ListView講解:一、ListView這個控制項是一個使用非常廣泛的控制項,值得深入的學習和研究。基本使用已經在Adapter中使用過了二、常用的屬性和方法footerDividersEnabled:是否在footerView(表尾)前繪製一條分割線,預設是trueheaderDividersEna...
ListView講解:
一、ListView這個控制項是一個使用非常廣泛的控制項,值得深入的學習和研究。基本使用已經在Adapter中使用過了
二、常用的屬性和方法
footerDividersEnabled:是否在footerView(表尾)前繪製一條分割線,預設是true
headerDividersEnabled:是否在headerView(表頭)後繪製一條分割線,預設是true
divider:設置分割條,可以是顏色分割,也可以用drawable資源分割
dividerHeight:設置分隔條的高度
stackFromBottom:列表從底部開始顯示,設置為true即可,好像沒什麼用。
cacheColorHint:如果你為ListView設置了一個圖片作為Background的時候,當你拖動或者點擊listView空白位置會發現item變成了變成黑色了,這是時候我們通過這個擦車ColorHint將顏色設置為透明:#000000
scrollbars ="none"或者setVerticalBarEnabled(true)隱藏滑動條
添加listView的表頭或者表尾貌似只能在Java中操作
addHeaderView(View view):添加HeaderView(表頭),括弧裡面是一個View對象,可以通過context上下文對象獲得。
addFooterView(View view):添加foot二View(表尾),括弧裡面是一個view對象,同樣也是可以通過context上下文對象獲得。
addHeaderView(headerView,null,false):和上面的區別:設置Header是否可以被選中
addFooterView(footerView,null,false):和上面的區別;設置footer是否可以被選中
三、listView的焦點問題
如果向item中添加button,checkBox等等控制項的時候,這時我們就需要考慮焦點的問題
當寫一個簡單的listView,上面如果含有Button,checkBox的時候,點擊item不起作用,也就是不能觸發onItemClick事件,也就是說listView的焦點被其它控制項搶占了。
解決的辦法:
方法1、為搶占控制項設置android:focusable = "false"
方法2、item根節點設置android:descendantFocusability = "blocksDescendants",屬性值有三種選擇
beforeDescendants:這個值表示ViewGroup會優先其子類控制項而獲取焦點
afterDescendants:這個值表示ViewGroup會當子類的控制項不需要獲取焦點的時候才獲取焦點
blocksDescendants:這個值表示ViewGroup會覆蓋子類控制項而直接獲得焦點
四、listView關於CheckBox的選擇錯位問題。
方法一、可以放到一個HashMap<Integer, Boolean>中, 每次初始化的時候根據postion取出對應的boolean值,然後再進行checkbox的狀態設置;也就是
HashMap<Integer, Boolean> state = new HashMap<Integer,Boolean>();
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked)
{
state.put(position, isChecked);
}else{
state.remove(position);
}
}
在getView()方法裡面: holder.cbox.setChecked(state.get(position)==null? false : true);
方法二、在entity類中加入了一個boolean值用於判斷
五、listView的數據更新(增刪改查)
以增加為例調用notifyDataSetChanged()方法
step1:在我們自定義的BaseAdapter中添加一個更新數據的方法:
step2:在activity中設置按鈕的監聽事件,來增加一條數據
對於更新數據每次調用notifyDataSetChanged(),這個方法實際上會把界面的item都重新繪製一遍,這樣會影響UI的性能,如果數據量很大的時候,只要改變其中的一項就要重新繪製所有的額item,顯然是不划算的,這時我們自定義下麵的方法