歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android功能模塊化之ListView中CheckBox批量操作

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

日期:2017/3/1 9:57:14   编辑:Linux編程

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