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

  实现原理如下:

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

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

<CheckBox
android:clickable="false"
android:

  长按点击事件。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();
}

 

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

相关文章:

  • 2021-06-10
  • 2022-01-23
  • 2021-10-19
  • 2022-12-23
  • 2021-10-10
  • 2022-01-22
  • 2022-02-08
  • 2022-02-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案