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

Android功能模塊化之ListView中CheckBox批量操作

ListView加載CheckBox,在進行全選操作時,或全選狀態下,勾選ListView中Item的CheckBox時,全選狀態沒有改變之類的情況。

ListView中itemCheckBox與全選AllCheckBox存在以下關聯:

(1)AllCheckBox選中狀態與未選中狀態下,itemCheckBox隨之變化;

(2)itemCheckBox未選中時,應AllCheckBox為未選中狀態;

(3)itemCheckBox選中時,需判斷ListView中所有的checkbox是否處於選中狀態,若為選中狀態,則將AllCheckBox狀態改為選中,否則為未選中狀態。

解決思路:

(1)在Adapter存下每個checkBox的狀態;

(2)通過AllCheckBox狀態改變itemCheckBox狀態;

(3)通過判斷Adapter中所有checkbox的選中狀態,去更新AllCheckBox狀態;

(4)使用Handler更新AllCheckBox狀態。

實現代碼:

1)定義ListView的item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/background_color"
    android:orientation="horizontal"
    android:paddingBottom="10dip"
    android:paddingTop="10dip" >

    <TextView
        android:id="@+id/tv_time"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        android:gravity="center"
        android:text="時間"
        android:textColor="@color/black"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/tv_place"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1.5"
        android:gravity="center"
        android:text="地點"
        android:textColor="@color/black"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/tv_money"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        android:gravity="center"
        android:text="金額"
        android:textColor="@color/black"
        android:textSize="15sp" />

    <CheckBox
        android:id="@+id/cb_select"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center|center_vertical"
        android:layout_weight="0.5"
        android:button="@drawable/cb_item_selected"
        android:focusable="false"
        android:focusableInTouchMode="false" />

</LinearLayout>

2)定義ListView的Adapter,以下為一些關鍵的源代碼

2.1)定義變量

private HashMap<Integer, Boolean> isSelected = null;//存儲checkbox狀態

private Handler statusHandler = null;//更新AllCheckBox的handler

private class ViewHolder {TextView tvTime, tvPlace, tvMoney;CheckBox cbSelect;}

2.2)定義判斷全選狀態的方法

 private boolean isAllSelected() {
  for (int i = 0; i < isSelected.size(); i++) {
   if (!isSelected.get(i)) {
    return false;
   }
  }
  return true;
 }

2.3)定義選擇checkBox方法

public void select(int potision, boolean isChecked) {
  isSelected.put(potision, isChecked);//記錄下當前checkBox的狀態
  Message msg = statusHandler.obtainMessage();
  if (isChecked) {
   if (isAllSelected()) {
    msg.what = MainActivity.ALL_SELECTED_CHECK;//將AllCheckbox狀態改為選中
   } else {
    msg.what = MainActivity.NOT_ALL_SELECTED_CHECK;//將AllCheckBox改成未選中
   }
  } else {
   msg.what = MainActivity.NOT_ALL_SELECTED_CHECK;//將AllCheckBox改成未選中
}
statusHandler.sendMessage(msg);
}

Copyright © Linux教程網 All Rights Reserved