Android Listview使用RadioButton实现长按删除与检索删除(使用SPUtils保存数据)

首先添加依赖,主要是存储数据:

// 万能工具类
implementation 'com.blankj:utilcode:1.25.8'

不多说直接上代码:MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import com.blankj.utilcode.util.SPUtils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private List<MyData> list = new ArrayList<>();
    private TextView tv;
    private EditText edit_query;
    private MyAdapter adapter;
    private boolean if_edit = false;
    private List<MyData> seachdata;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = findViewById(R.id.listView);
        tv = findViewById(R.id.tv);//确认删除
        edit_query = findViewById(R.id.edit_query);//确认删除
        getData();
        adapter = new MyAdapter(this);
        adapter.setdata(list);
        listView.setAdapter(adapter);
//长按监听
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if (true == if_edit) {
                    for (int i = 0; i <seachdata .size(); i++) {
                        seachdata.get(i).setFlag(true);//长按显示复选框
                    }
                } else {
                    for (int i = 0; i < list.size(); i++) {
                        list.get(i).setFlag(true);//长按显示复选框
                    }
                }
                adapter.notifyDataSetChanged();
                tv.setVisibility(View.VISIBLE);
                return false;
            }
        });
//删除
        tv.setOnClickListener(new View.OnClickListener() {//删除所有选中项   确认删除
            @Override
            public void onClick(View v) {
                Log.e("111111111111-----------", "data2==删除前" + list.toString());
                Iterator<MyData> iterator = list.iterator();
                while (iterator.hasNext()) {
                    MyData myData = iterator.next();
                    if (SPUtils.getInstance("yang").getString("item" + myData.getId()).equals(myData.getId())) {
                        SPUtils.getInstance("yang").remove("item" + myData.getId());
                        iterator.remove();
                    }
                }
                for (int i = 0; i < list.size(); i++) {
                        MyData data = new MyData();
                        data.setId(i + "");
                        data.setTitle("杨" + i+"郎");
                        data.setFlag(false);
                        seachdata.add(data);

                }
                Log.e("111111111111-----------", "data2==删除后" + list.toString());
                adapter.setdata(list);
                adapter.notifyDataSetChanged();
            }
        });
//edit文本更新监听
        edit_query.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                searchResetData(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

    public void searchResetData(String s) {
        if_edit = true;
     seachdata = new ArrayList<>();
        seachdata.clear();
        //如果为null,直接使用全部数据
        if (s.equals("")) {
            seachdata.addAll(list);
        } else {
            //否则,匹配相应的数据
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getTitle().indexOf(s) >= 0) {//这里可拓展自己想要的,甚至可以拆分搜索汉字来匹配
                    MyData data = new MyData();
                    data.setId(i + "");
                    data.setTitle("杨" + i+"郎");
                    data.setFlag(false);
                    seachdata.add(data);
                }
            }
        }
        adapter.setdata(seachdata);
        adapter.notifyDataSetChanged();
    }

    private void getData() {
        MyData data;
        for (int i = 0; i < 20; i++) {
            data = new MyData();
            data.setId(i + "");
            data.setTitle("杨" + i+"郎");
            data.setFlag(false);
            list.add(data);
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        SPUtils.getInstance("yang").clear();//删除存储的所有数据
    }
}

接下来是adapter:这里面的勾选图片换成自己的就行

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.blankj.utilcode.util.SPUtils;

import java.util.List;

public class MyAdapter extends BaseAdapter {
    private List<MyData> list ;
    private Context context;
    MyAdapter(Context context) {
        this.context = context;
    }
public void setdata(List<MyData> list){
    this.list = list;

}
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @SuppressLint("ViewHolder")
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder vh;
        if (convertView == null){
            vh = new ViewHolder();
            convertView =  View.inflate(context,R.layout.item,null);
            vh.textView = convertView.findViewById(R.id.title);
            vh.img = convertView.findViewById(R.id.check);
            vh.ll = convertView.findViewById(R.id.ll);
            convertView.setTag(vh);
        }else {
            vh = (ViewHolder) convertView.getTag();
        }
        vh.textView.setText(list.get(position).getTitle());
         if (list.get(position).isFlag()){//长按显示复选框
             vh.ll.setVisibility(View.VISIBLE);
         }else
             vh.ll.setVisibility(View.GONE);

        if (SPUtils.getInstance("yang").getString("item"+list.get(position).getId()).contains(list.get(position).getId())) {
            vh.img.setImageResource(R.mipmap.screening_check);
        }else {
            vh.img.setImageResource(R.mipmap.screening_no_check);
        }
        vh.ll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              if (SPUtils.getInstance("yang").getString("item"+list.get(position).getId()).contains(list.get(position).getId())) {
                  SPUtils.getInstance("yang").remove("item"+list.get(position).getId());
              }else {
                  SPUtils.getInstance("yang").put("item"+list.get(position).getId(),list.get(position).getId());
              }
                notifyDataSetChanged();
            }

        });
        return convertView;
    }
    class ViewHolder{
        LinearLayout ll;
        TextView textView;
        ImageView img;
    }
}

接下来是bean类:

public class MyData {
    private String id;

    @Override
    public String toString() {
        return "MyData{" +
                "id='" + id + '\'' +
                ", title='" + title + '\'' +
                ", flag=" + flag +
                '}';
    }

    private String title;
    private boolean flag;



    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    public String getId() {
        return id == null ? "" : id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title == null ? "" : title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

接下来是主页面xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
<EditText
    android:id="@+id/edit_query"
    android:layout_width="match_parent"
    android:layout_height="40dp"/>
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
<TextView
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:gravity="center"
    android:background="#ff401a"
    android:textColor="#ffffff"
    android:visibility="gone"
    android:text="确认删除"/>
</LinearLayout>

再然后是item布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout

    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:gravity="center_vertical"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:layout_weight="1"
        android:layout_marginLeft="12dp"
        android:text="啊说不定就爱上大嫂"/>
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:visibility="gone"
        android:paddingLeft="15dp"
        android:paddingRight="12dp">
    <ImageView
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/screening_no_check"/>
    </LinearLayout>
</LinearLayout>
</LinearLayout>

OK结束了

发布了16 篇原创文章 · 获赞 37 · 访问量 9734

猜你喜欢

转载自blog.csdn.net/weixin_37587365/article/details/102823938