ListView批量删除数据
来源:互联网 发布:聊天机器人软件下载 编辑:程序博客网 时间:2024/06/07 00:11
ListView批量删除数据
批量删除数据特别常见,写了个简单的demo。思路是利用CheckBox标记ListView的item,然后进行批量删除。代码如下:
1、布局:
activity_main:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/public_layout_ii" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RelativeLayout android:id="@+id/edit_bar" android:layout_width="match_parent" android:layout_height="50dp" android:background="#fbfbf4" android:padding="5dp"> <CheckBox android:id="@+id/check_all" android:layout_width="60dp" android:layout_height="match_parent" android:background="@drawable/edit_button_bg" android:button="@null" android:gravity="center" android:text="全选" android:visibility="gone" /> <Button android:id="@+id/btn_delete" android:layout_width="60dp" android:layout_height="match_parent" android:layout_marginRight="10dp" android:layout_toLeftOf="@+id/cb_edit" android:background="@drawable/edit_button_bg" android:text="删除" android:visibility="gone" /> <CheckBox android:id="@+id/cb_edit" android:layout_width="60dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:background="@drawable/edit_button_bg" android:button="@null" android:gravity="center" android:text="编辑" /> </RelativeLayout> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>item_layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/llRoot" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:padding="2dp"> <CheckBox android:id="@+id/check_box" android:layout_width="40dp" android:layout_height="match_parent" android:layout_marginLeft="5dp" android:gravity="center" android:visibility="gone" /> <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:paddingLeft="10dp" android:textColor="#000" /></LinearLayout>
public class ListViewAdapter extends BaseAdapter { private Context context; private ArrayList<String> data; private ArrayList<Boolean> state; private LayoutInflater inflate; private boolean visibilityFlag; public ListViewAdapter(Context context, ArrayList<Boolean> state, ArrayList<String> data) { this.context = context; this.data = data; this.state = state; inflate = LayoutInflater.from(context); } public void setVisibilityFlag(boolean visibilityFlag) { this.visibilityFlag = visibilityFlag; notifyDataSetChanged(); } public void setData(ArrayList<String> data) { this.data = data; notifyDataSetChanged(); } public void setState(ArrayList<Boolean> state) { this.state = state; notifyDataSetChanged(); } @Override public int getCount() { return data == null ? 0 : data.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; if (convertView == null) { convertView = inflate.inflate(R.layout.item_layout, parent, false); holder = new Holder(convertView); convertView.setTag(holder); } else { holder = ((Holder) convertView.getTag()); } final String str = data.get(position); if (!TextUtils.isEmpty(str)) { holder.tvName.setText(str); holder.check_box.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (clickListener != null) { clickListener.itemClickIsCheckedListener(str); } } }); if (visibilityFlag) { holder.check_box.setVisibility(View.VISIBLE); } else { holder.check_box.setVisibility(View.GONE); } if (state != null && state.size() > 0) { if (state.get(position)) { holder.check_box.setChecked(true); } else { holder.check_box.setChecked(false); } } } return convertView; } class Holder { TextView tvName; LinearLayout llRoot; CheckBox check_box; public Holder(View view) { tvName = (TextView) view.findViewById(R.id.tvName); llRoot = (LinearLayout) view.findViewById(R.id.llRoot); check_box = (CheckBox) view.findViewById(R.id.check_box); } } ClickListener clickListener; public void setClickListener(ClickListener clickListener) { this.clickListener = clickListener; } public interface ClickListener { void itemClickIsCheckedListener(String str); }}
public class MainActivity extends AppCompatActivity implements ListViewAdapter.ClickListener { private Button delete; private CheckBox edit; private CheckBox all; private ListView listView; private ArrayList<String> data; private ArrayList<String> selectData; private ArrayList<Boolean> state; private ListViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initAdapter(); } private void initAdapter() { adapter = new ListViewAdapter(this, state, data); adapter.setClickListener(this); listView.setAdapter(adapter); } private void initView() { delete = ((Button) findViewById(R.id.btn_delete)); edit = ((CheckBox) findViewById(R.id.cb_edit)); all = ((CheckBox) findViewById(R.id.check_all)); listView = ((ListView) findViewById(R.id.listView)); all.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (all.isChecked()) { Collections.replaceAll(state, false, true); } else { Collections.replaceAll(state, true, false); } adapter.setState(state); } }); edit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (edit.isChecked()) { all.setVisibility(View.VISIBLE); delete.setVisibility(View.VISIBLE); adapter.setVisibilityFlag(true); } else { all.setVisibility(View.GONE); delete.setVisibility(View.GONE); adapter.setVisibilityFlag(false); } } }); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (state.indexOf(false) == -1) { data.removeAll(data); state.removeAll(state); } else { removeData(); } adapter.setData(data); adapter.setState(state); } }); } private void removeData() { for (int i = 0; i < state.size(); i++) { if (state.get(i)) { //如果被选中则把该条数据添加到selectData集合中 selectData.add(data.get(i)); } } for (int j = 0; j < selectData.size(); j++) { for (int i = 0; i < data.size(); i++) { if (data.get(i) != null) { if (selectData.get(j) == data.get(i)) { data.set(i, null);//把被选中的数据设置为null } } } } for (int i = 0; i < data.size(); i++) { if (data.get(i) == null) {//对为null的数据删除 data.remove(i); i--; } } for (int i = 0; i < state.size(); i++) { if (state.get(i)) { state.remove(i);//把对应的标记删除 i--; } } } private void initData() { data = new ArrayList<>(); for (int i = 0; i < 20; i++) { data.add("NAME_" + i); } state = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { state.add(false); } selectData = new ArrayList<>(); } @Override public void itemClickIsCheckedListener(String str) { for (int i = 0; i < data.size(); i++) { if (data.get(i).equals(str)) { if (state.get(i)) { state.set(i, false); } else { state.set(i, true); } } } adapter.setState(state); }}
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/text_bg_i" android:state_pressed="true"/> <item android:drawable="@drawable/text_bg_ii"/></selector>
大体的思路就是这样,至于代码精不精简看个人。
阅读全文
2 0
- ListView批量删除数据
- listview批量删除
- Android:ListView批量删除
- 利用ListView批量删除item
- 利用ListView批量删除item .
- ListView多选批量删除
- ListView 批量删除、数据库同步
- ListView批量删除Item条目
- 利用ListView批量删除item
- 批量删除 数据(checkbox)
- php批量删除数据
- PHP批量删除数据
- JdbcTemplate数据批量删除
- Extjs批量删除数据
- 数据的批量删除
- 批量删除数据
- redis批量删除数据
- JdbcTemplate数据批量删除
- Path Sum 二叉树中和为某一值的路径
- maven打包
- [机器学习入门] 李宏毅机器学习笔记-9 (“Hello world” of deep learning;初探深度学习)
- Cloudera Manager的搭建及hadoop组件的安装
- tensorflow1.1的几个api变动
- ListView批量删除数据
- Jeecg框架入门
- Android WebView 实现缓存网页数据
- android 7.0系统解决拍照的问题android.os.FileUriExposedException:
- 1230: 矩阵乘法
- 07_流程控制
- 十六进制转换为十进制(C/C++)
- Mac 下安装TensorFlow出现权限不足解决方案
- 阿里架构之旅(二)——Dubbo解析