Android中使用RecyclerView实现多选删除功能以及一些问题

实现多选删除功能

界面-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);

如果有问题请在评论区留言...

发布了38 篇原创文章 · 获赞 23 · 访问量 9071

猜你喜欢

转载自blog.csdn.net/qq_41806966/article/details/100888705
今日推荐