实现多选删除功能
界面-RecyclerView 使用的打气筒的界面
<?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="match_parent"
android:orientation="horizontal"
android:layout_marginBottom="22dp"
android:paddingLeft="22dp"
android:paddingRight="22dp">
<CheckBox
android:id="@+id/item_checked"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<TextView
android:id="@+id/item_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:text="内容"
android:textSize="16sp"
android:gravity="center"/>
</LinearLayout>
RecyclerView的使用请自行百度
具体思路
复选框 点击则将此条记录的位置存入list中,取消选择则将位置删除
点击删除按钮 --先将存位置的list进行排序,从小到大(这样可以避免删除数据后删除不到)遍历list 将指定数据删除
这我删除按钮的代码
//删除的数量
int len = 0;
//将list排序一遍 从小到大
sortSequenceIntList(gasAlarmList);
for (int value : list) {
//删除一个后 将len+1
data.remove(value - gasLen);
gasAlarmAdapter.removeData(value - len);
len++;
}
//刷新list --清空保存位置的list
list.clear();
//刷新适配器
adapter.notifyDataSetChanged();
实现代码:
在 onBindViewHolder 函数中获取到此text+复选框 并给复选框添加 监听
//添加监听
myViewHolder.checkBox.setOnCheckedChangeListener
(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//判断状态 添加或删除
if (isChecked) {
//判断list里是否有指定的 list为选中的复选框的位置ArrayList<Integer>
for (int value : checkedList) {
//如果有指定的数值 直接不做操作
if (value == i) {
break;
}
}
//将复选框的位置添加进集合 删除的时候只要删除data里的数据就好了
checkedList.add(i);
//将状态改变 data为设置适配器传递进来的数据 我这里是ArrayList<HashMap<>>
//你们可以自己设置个list存复选框选中的状态
data.get(i).put("checked","1");
} else {
//取消选择复选框
//删除指定的 不管有没有
int len = checkedList.size();
for (int j = 0;j < len;j++) {
if (checkedList.get(j) == i) {
checkedList.remove(j);
break;
}
}
//将状态改变
data.get(i).put("checked","0");
}
}
});
这下功能基本上就已经完全实现了- 还有点小bug 源自于RecyclerView
我们需要在给复选框加监听前清除一下监听 bug成功解除 over
myViewHolder.checkBox.setOnCheckedChangeListener(null);
如果有问题请在评论区留言...