歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

解決 Android 中使用ListView和CheckBox批量操作時若干問題

本文可以幫助 完美解決 在Android中使用ListView時批量操作CheckBox出現的各種問題。

在Android中使用ListActivity可以很方便的綁定一組數據或者一個查詢。但是,使用過程中也會遇到一些問題。在此,我將自己遇到的問題以及解決方法記錄下來,一方面做一個備忘,同時,也希望有緣人能少走彎路。

問題一: Listview中的Item數目到底是多少

ListView中的Item數目可以使用getCount方法獲得,經過驗證得到的結果是,其Item數目等於界面上顯示的Item數目,這個數目可能小於實際上綁定的數據條目數。

那麼,在實際中如果有額外的非綁定數據源的數據需要編輯保存的時候,如何才能保存他們呢?

解決該問題的方法是:自定義ListAdapter,在其中保存額外需要保存的數據。

問題二:在Item中添加CheckBox出現麻煩了

在item中添加Checkbox的時候不小心會遇到麻煩,可能出現的情況是:

(1)Listview不能相應點擊事件

(2)Listview點擊第一個Item的時候最後一個Item也出現點擊事件(反之亦然)

以上兩種情況是我實際遇到的bug,經過各種糾結和反復測試,出現問題的原因是CheckBox相應焦點、點擊事件的優先級別比Listview要高,所以出現問題。

解決方法如下(和問題一一對應):

(1)將Checkbox設置focusable屬性為false

(2)接著將CheckBox設置Clickable屬性為false.

以下是本人程序片段,僅供參考:

  1. <!-- ans_list.xml -->  
  2. <?xml version="1.0" encoding="utf-8"?>  
  3. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:paddingLeft="8dp"  
  7.     android:paddingRight="8dp" >  
  8.   
  9.     <TextView  
  10.         android:id="@+id/ans_title"  
  11.         android:layout_width="fill_parent"  
  12.         android:layout_height="wrap_content"  
  13.         android:layout_alignParentTop="true"  
  14.         android:gravity="center"  
  15.         android:textSize="15sp"  
  16.         android:textStyle="bold" />  
  17.   
  18.     <RelativeLayout  
  19.         android:id="@+id/ans_foot"  
  20.         android:layout_width="fill_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:layout_alignParentBottom="true"  
  23.         android:paddingLeft="8sp"  
  24.         android:paddingRight="8sp" >  
  25.   
  26.         <CheckBox  
  27.             android:id="@+id/ans_cbx_select"  
  28.             android:layout_width="wrap_content"  
  29.             android:layout_height="wrap_content"  
  30.             android:layout_alignParentRight="true"  
  31.             android:layout_marginLeft="10sp"  
  32.             android:checked="false" />  
  33.         <Button  
  34.             android:id="@+id/ans_btn_showInMap"  
  35.             android:layout_width="fill_parent"  
  36.             android:layout_height="wrap_content"  
  37.             android:layout_toLeftOf="@id/ans_cbx_select"  
  38.             android:text="@string/ans_btn_showInMap" />  
  39.     </RelativeLayout>  
  40.   
  41.     <ListView  
  42.         android:id="@android:id/list"  
  43.         android:layout_width="fill_parent"  
  44.         android:layout_height="fill_parent"  
  45.         android:layout_above="@id/ans_foot"  
  46.         android:layout_below="@id/ans_title"  
  47.         android:drawSelectorOnTop="false" >  
  48.     </ListView>  
  49.   
  50.     <TextView  
  51.         android:id="@android:id/empty"  
  52.         android:layout_width="fill_parent"  
  53.         android:layout_height="fill_parent"  
  54.         android:gravity="center"  
  55.         android:text="@string/ans_list_empty"  
  56.         android:textSize="25sp"  
  57.         android:textStyle="bold" >  
  58.     </TextView>  
  59.   
  60. </RelativeLayout>  
Copyright © Linux教程網 All Rights Reserved