首先添加依赖,主要是存储数据:
// 万能工具类 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结束了