ListView实现的列表,如果是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验很不好,也给用户带来了很大的麻烦。

实现效果图

具体实现代码

select.xml

主布局文件包含一个ListView还有一个隐藏的布局,包含了两个Button一个TextView,默认布局为gone,当监听到长按响应事件时候显示。

 <?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="vertical" > <ListView android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:cacheColorHint="#FFF" > </ListView> <RelativeLayout android:id="@+id/relative"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:gravity="bottom"
android:background="@color/lemonchiffon"
android:visibility="gone"
>
<Button android:id="@+id/cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="撤销 |"
android:textSize="20sp"
android:background="@null"
android:layout_centerVertical="true" />
<TextView android:id="@+id/txtcount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="共计"
android:textSize="15sp"
android:layout_centerInParent="true" /> <Button android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="| 删除"
android:textSize="20sp"
android:background="@null"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/> </RelativeLayout>
</LinearLayout>

item.xml

包含一个TextView 一个CheckBox

 <?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" > <TextView
android:id="@+id/txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="444444444444"
android:textSize="17sp"
android:textColor="#333" /> <CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:clickable="false"
/>
</LinearLayout>

通过自定义Adapter绑定ListView数据源,实现长按监听,在长按监听时候,切记将监听事件返回ture。

 /**
* @author ieasy360_1
* 自定义Adapter
*/
class Adapter extends BaseAdapter{
private Context context;
private LayoutInflater inflater=null;
private HashMap<Integer, View> mView ;
public HashMap<Integer, Integer> visiblecheck ;//用来记录是否显示checkBox
public HashMap<Integer, Boolean> ischeck;
private TextView txtcount;
public Adapter(Context context,TextView txtcount)
{
this.context = context;
this.txtcount = txtcount;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = new HashMap<Integer, View>();
visiblecheck = new HashMap<Integer, Integer>();
ischeck = new HashMap<Integer, Boolean>();
if(isMulChoice){
for(int i=0;i<array.size();i++){
ischeck.put(i, false);
visiblecheck.put(i, CheckBox.VISIBLE);
}
}else{
for(int i=0;i<array.size();i++)
{
ischeck.put(i, false);
visiblecheck.put(i, CheckBox.INVISIBLE);
}
}
} public int getCount() {
// TODO Auto-generated method stub
return array.size();
} public Object getItem(int position) {
// TODO Auto-generated method stub
return array.get(position);
} public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = mView.get(position);
if(view==null)
{
view = inflater.inflate(R.layout.item, null);
TextView txt = (TextView)view.findViewById(R.id.txtName);
final CheckBox ceb = (CheckBox)view.findViewById(R.id.check); txt.setText(array.get(position)); ceb.setChecked(ischeck.get(position));
ceb.setVisibility(visiblecheck.get(position)); view.setOnLongClickListener(new Onlongclick()); view.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
if(isMulChoice){
if(ceb.isChecked()){
ceb.setChecked(false);
selectid.remove(array.get(position));
}else{
ceb.setChecked(true);
selectid.add(array.get(position));
}
txtcount.setText("共选择了"+selectid.size()+"项");
}else {
Toast.makeText(context, "点击了"+array.get(position), Toast.LENGTH_LONG).show();
}
}
}); mView.put(position, view);
}
return view;
} class Onlongclick implements OnLongClickListener{ public boolean onLongClick(View v) {
// TODO Auto-generated method stub isMulChoice = true;
selectid.clear();
layout.setVisibility(View.VISIBLE);
for(int i=0;i<array.size();i++)
{
adapter.visiblecheck.put(i, CheckBox.VISIBLE);
}
adapter = new Adapter(context,txtcount);
listview.setAdapter(adapter);
return true;
}
}
}

全部实现代码

 package com.example.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast; /**
* @author ieasy360_1
*
*/
public class MulSelect extends Activity implements OnClickListener { private ListView listview;
private Context context;
private List<String> array = new ArrayList<String>();
private List<String> selectid = new ArrayList<String>();
private boolean isMulChoice = false; //是否多选
private Adapter adapter;
private RelativeLayout layout;
private Button cancle,delete;
private TextView txtcount; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.select);
context = this;
listview = (ListView)findViewById(R.id.list);
layout = (RelativeLayout)findViewById(R.id.relative);
txtcount = (TextView)findViewById(R.id.txtcount);
cancle = (Button)findViewById(R.id.cancle);
delete = (Button)findViewById(R.id.delete);
cancle.setOnClickListener(this);
delete.setOnClickListener(this);
init();
adapter = new Adapter(context,txtcount);
listview.setAdapter(adapter); } void init()
{
for(int i=0;i<20;i++)
{
array.add("小明"+i);
}
} public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.cancle:
isMulChoice = false;
selectid.clear();
adapter = new Adapter(context,txtcount);
listview.setAdapter(adapter);
layout.setVisibility(View.INVISIBLE);
break;
case R.id.delete:
isMulChoice =false;
for(int i=0;i<selectid.size();i++){
for(int j=0;j<array.size();j++){
if(selectid.get(i).equals(array.get(j))){
array.remove(j);
}
}
}
selectid.clear();
adapter = new Adapter(context,txtcount);
listview.setAdapter(adapter);
layout.setVisibility(View.INVISIBLE);
break;
default:
break;
} } @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("操作");
} /**
* @author ieasy360_1
* 自定义Adapter
*/
class Adapter extends BaseAdapter{
private Context context;
private LayoutInflater inflater=null;
private HashMap<Integer, View> mView ;
public HashMap<Integer, Integer> visiblecheck ;//用来记录是否显示checkBox
public HashMap<Integer, Boolean> ischeck;
private TextView txtcount;
public Adapter(Context context,TextView txtcount)
{
this.context = context;
this.txtcount = txtcount;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = new HashMap<Integer, View>();
visiblecheck = new HashMap<Integer, Integer>();
ischeck = new HashMap<Integer, Boolean>();
if(isMulChoice){
for(int i=0;i<array.size();i++){
ischeck.put(i, false);
visiblecheck.put(i, CheckBox.VISIBLE);
}
}else{
for(int i=0;i<array.size();i++)
{
ischeck.put(i, false);
visiblecheck.put(i, CheckBox.INVISIBLE);
}
}
} public int getCount() {
// TODO Auto-generated method stub
return array.size();
} public Object getItem(int position) {
// TODO Auto-generated method stub
return array.get(position);
} public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = mView.get(position);
if(view==null)
{
view = inflater.inflate(R.layout.item, null);
TextView txt = (TextView)view.findViewById(R.id.txtName);
final CheckBox ceb = (CheckBox)view.findViewById(R.id.check); txt.setText(array.get(position)); ceb.setChecked(ischeck.get(position));
ceb.setVisibility(visiblecheck.get(position)); view.setOnLongClickListener(new Onlongclick()); view.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
if(isMulChoice){
if(ceb.isChecked()){
ceb.setChecked(false);
selectid.remove(array.get(position));
}else{
ceb.setChecked(true);
selectid.add(array.get(position));
}
txtcount.setText("共选择了"+selectid.size()+"项");
}else {
Toast.makeText(context, "点击了"+array.get(position), Toast.LENGTH_LONG).show();
}
}
}); mView.put(position, view);
}
return view;
} class Onlongclick implements OnLongClickListener{ public boolean onLongClick(View v) {
// TODO Auto-generated method stub isMulChoice = true;
selectid.clear();
layout.setVisibility(View.VISIBLE);
for(int i=0;i<array.size();i++)
{
adapter.visiblecheck.put(i, CheckBox.VISIBLE);
}
adapter = new Adapter(context,txtcount);
listview.setAdapter(adapter);
return true;
}
}
}
}

Android 长按Listview显示CheckBox,实现批量删除。的更多相关文章

  1. Android — 长按ListView 利用上下文菜单(ActionMode) 进行批量事件处理

    好久没写博客拉``````` 近期最终略微闲一点了``````` 无聊拿手机清理短信.发现批量事件的处理还是挺管用的`````` 那么自己也来山寨一记看看效果吧````` 闲话少说,首先,我们来看下手 ...

  2. 作业:汽车查询--弹窗显示详情,批量删除 ajax做法(0521)

    作业:显示以下界面: 作业要求: 1.查看详细信息,以弹窗的形式显示,使用ajax2.批量删除 一.主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  3. 作业:汽车查询--弹窗显示详情,批量删除 php做法(0521)

    作业:显示以下界面: 作业要求: 1.查看详细信息,以弹窗的形式显示,使用ajax2.批量删除 一.主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  4. 完整地mybatis + springmvc用checkbox实现批量删除

    因为自己在网上找了半天,都找不到完整地代码(脑袋笨,不会变通到自己项目里),所以在这里记下了近乎完整的代码 前端代码 <span style="cursor:pointer;" ...

  5. jsp中利用checkbox进行批量删除

    一.将前台jsp页面中的所有你要用到checkbox的name值设为相同,如 <input type="checkbox" name="userid"&g ...

  6. Android开发之ListView条目批量选择删除

    ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局 ...

  7. Android在listview添加checkbox实现单选多选操作问题(转)

    转自:http://yangshen998.iteye.com/blog/1310183 在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作.表面上 ...

  8. android UI进阶之实现listview中checkbox的多选与记录

    今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个 清单页面,我们需要记录用户勾选了哪些条目.这个的实现并 ...

  9. 【转】android UI进阶之实现listview中checkbox的多选与记录--不错

    原文网址:http://www.cnblogs.com/notice520/archive/2012/02/17/2355415.html 今天继续和大家分享涉及到listview的内容.在很多时候, ...

随机推荐

  1. 《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

    1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL ...

  2. wireshark安装

    原文链接地址:http://blog.csdn.net/holandstone/article/details/47026213 Wireshark下载地址:https://www.wireshark ...

  3. 问题解决——ShowWindow不显示窗口

    配合任务栏通知区域. //MFC对话框程序 void CXXXDlg::OnShowHideUi() { // TODO: 在此添加命令处理程序代码 m_bShown=!m_bShown; ShowW ...

  4. MongoDB 存储引擎Wiredtiger原理剖析

    今天开始看MongoDB 3.2的文档,发现了这么两句话 Support for Multiple Storage Engines MongoDB supports multiple storage ...

  5. poj 1050 To the Max(最大子矩阵之和,基础DP题)

    To the Max Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 38573Accepted: 20350 Descriptio ...

  6. nginx 配置单入口

    # 略... location / { try_fiels $uri $uri/ /index.php; } # 略...

  7. matlab里.*和*的区别

    *:矩阵相乘 (cross) .*:矩阵你元素一对一相乘 (dot) 例子: >> a=[2 3];>> b=[4 5];>> a*b' ans = 23 > ...

  8. Vertica 项目常用代码

    1.查看目录下面有多少文件数 ls -l |grep "^-"|wc -l 思路很明显了,ls后通过grep进行过滤判断是文件还是文件夹, 如果是判断文件夹,可以使用ls -l | ...

  9. Neo4j 高可用集群安装

    安装neo4j高可用集群,抓图安装过程 http://www.ibm.com/developerworks/cn/java/j-lo-neo4j/ Step1.下载neo4j商业版并解压,复制为neo ...

  10. 《TCP/IP 详解 卷一》读书笔记-----Ping&Traceroute

    1.ping是用于测试对方主机是否可达的命令,其实本质上就是echo类型的ICMP报文.同时,ping还能用于计算RTT(round-trip time),即两台主机间的往返时延. 2.随着网络安全意 ...