Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android中與Adapter相關的控件----ListView,androidadapter控件

android中與Adapter相關的控件----ListView,androidadapter控件

編輯:關於android開發

android中與Adapter相關的控件----ListView,androidadapter控件


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,顯然是不劃算的,這時我們自定義下面的方法

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved