设为首页 加入收藏

TOP

Android功能模块化之ListView中CheckBox批量操作
2014-11-24 07:17:40 来源: 作者: 【 】 浏览:0
Tags: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


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" />


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" />


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" />


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" />



2)定义ListView的Adapter,以下为一些关键的源代码


2.1)定义变量


private HashMap 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);
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用Cgroup限制Java使用的内存量-.. 下一篇Android中的Screencast工具

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)