添加CheckBox实现ListView的长按批量删除

  工作中遇到这样的需求,在长按ListView的Item的时候出现复选框,可进行批量选择,从而实现批量删除。

  实现原理如下:

  ListView每一条Item的数据我们通常存放在List集合中,考虑到ListView的复用问题,需要在我们的数据集合中新加入一个字段,用来记录是否勾选了当前的Item,当勾选复选框或者取消勾选的时候,用来记录的字段相应的改为true或者false。避免布局复用而引起的数据混乱,下面代码进行详解。

  首先,布局中添加CheckBox,并设置状态为隐藏。

<CheckBox
android:clickable="false"
android:id="@+id/cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:focusable="false"
android:textIsSelectable="false"
android:layout_gravity="center_vertical"

  长按点击事件。CheckBox显示,同时删除按钮出现。

wait_list.setOnItemLongClickListener(new OnItemLongClickListener() {

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
adapter.setVisable(true);
deleteLayout.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
return true;
}
});

 

  还有一个问题就是ItemClickListener事件和CheckBox的点击事件会冲突,这里是这样处理的

wait_list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(position>=listAll.size()){
return;
}
if(adapter.isVisable()){
HodlerView h=(HodlerView) view.getTag();
h.cb.toggle();
if(h.cb.isChecked()){
listAll.get(position).setMyChecked(true);
adapter.notifyDataSetChanged();
addMap(position, listAll.get(position).getWaybillNo());
}else{
listAll.get(position).setMyChecked(false);
adapter.notifyDataSetChanged();
removeMap(position);
}
}else{
//点击item跳转详情
handler.sendMessage(handler.obtainMessage(1,listAll.get(position).getInfoId()+","+listAll.get(position).getWaybillNo()
+","+listAll.get(position).getHaulier()
+","+listAll.get(position).getShipper()+","+listAll.get(position).getJudgeIsComplained()+","+listAll.get(position).getInfoContent()));
}
}
});

 

  下面是勾选或者取消的时候用一个Map来进行记录的方法

//用来增加勾选项
public void addMap(int position,String wayBillNo) {
Integer pos = Integer.valueOf(position);
mySelect.put(pos, wayBillNo);
System.out.println("=======集合中元素合数"+mySelect.size());
}
//用来删除取消勾选的选项
public void removeMap(int position){
Integer pos = Integer.valueOf(position);
mySelect.remove(pos);
if(mySelect.size()!=listAll.size()){
selectAll.setChecked(false);
}
}
//用来清除Map里面所有数据
public void cleanMap(){
mySelect.clear();
}

 

以上差不多就是实现这个小功能的核心代码,希望对大家有所帮助

转载于:https://www.cnblogs.com/fuyinshan/p/6039911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值