- 浏览: 3506780 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
[原]基于ListView和CheckBox实现多选和全选记录的功能 |
应用开发中经常会有从数据库中读取数据显示,然后选中多条、全部记录并且删除的需求。在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选、全选的例子。下面是具体的代码,有问题请留言。代码下载地址:MultiSelect.rar
MultiSelectActivity
/** * @author zuolongsnail@163.com * MultiSelectActivity */ public class MultiSelectActivity extends Activity implements OnClickListener, OnItemClickListener { private static final String TAG = "MultiSelectActivity"; private ListView contactsDelList; private Button contactsDelBtn; private Button contactsCancelBtn; private CheckBox selectAll; private Cursor cursor; private ContactsDeleteAdapter contactsDeleteAdapter; private static final String[] PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME }; private static final int CONTACTS_ID_INDEX = 0; private static final int DISPLAY_NAME_INDEX = 1; private ContactsDeleteListItemViews holderViews; private final class ContactsDeleteListItemViews { TextView nameView; CheckBox delCheckBox; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contacts_delete_activity); contactsDelList = (ListView) findViewById(R.id.contacts_delete_list); contactsDelBtn = (Button) findViewById(R.id.contacts_delete_btn); contactsCancelBtn = (Button) findViewById(R.id.contacts_cancel_btn); selectAll = (CheckBox) (findViewById(R.id.contacts_delete_list_header) .findViewById(R.id.select_all)); contactsDelList.setOnItemClickListener(this); contactsDelBtn.setOnClickListener(this); contactsCancelBtn.setOnClickListener(this); selectAll.setOnClickListener(this); } @Override protected void onResume() { super.onResume(); refreshData(); } // 查询数据库 private void refreshData() { cursor = getContentResolver().query(Contacts.CONTENT_URI, PROJECTION, null, null, null); contactsDeleteAdapter = new ContactsDeleteAdapter(this, cursor); contactsDelList.setAdapter(contactsDeleteAdapter); } class ContactsDeleteAdapter extends BaseAdapter { Cursor cur; Map<Integer, Boolean> selectedMap; HashSet<String> delContactsIdSet; public ContactsDeleteAdapter(Context context, Cursor c) { cur = c; // 保存每条记录是否被选中的状态 selectedMap = new HashMap<Integer, Boolean>(); // 保存被选中记录作数据库表中的Id delContactsIdSet = new HashSet<String>(); for (int i = 0; i < cur.getCount(); i++) { selectedMap.put(i, false); } } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(MultiSelectActivity.this) .inflate(R.layout.contacts_delete_list_item, null); holderViews = new ContactsDeleteListItemViews(); holderViews.nameView = (TextView) convertView .findViewById(R.id.name); holderViews.delCheckBox = (CheckBox) convertView .findViewById(R.id.delete_list_item); convertView.setTag(holderViews); } cur.moveToPosition(position); ContactsDeleteListItemViews views = (ContactsDeleteListItemViews) convertView .getTag(); final String name = cur.getString(DISPLAY_NAME_INDEX); views.nameView.setText(name); views.delCheckBox.setChecked(selectedMap.get(position)); // 保存记录Id if (selectedMap.get(position)) { delContactsIdSet.add(String.valueOf(cur .getInt(CONTACTS_ID_INDEX))); } else { delContactsIdSet.remove(String.valueOf(cur .getInt(CONTACTS_ID_INDEX))); } return convertView; } @Override public int getCount() { return cur.getCount(); } @Override public Object getItem(int position) { if (cur.moveToPosition(position)) { return cur; } else { return null; } } @Override public long getItemId(int position) { return position; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.select_all: // 全选CheckBox的click事件处理 if (selectAll.isChecked()) { for (int i = 0; i < contactsDeleteAdapter.getCount(); i++) { contactsDeleteAdapter.selectedMap.put(i, true); //click事件:全选checkbox被勾选则把所有的联系人ID添加到delContactsIdSet中 contactsDeleteAdapter.cur.moveToPosition(i); contactsDeleteAdapter.delContactsIdSet.add(String .valueOf(contactsDeleteAdapter.cur .getInt(CONTACTS_ID_INDEX))); } contactsDelBtn.setEnabled(true); } else { for (int i = 0; i < contactsDeleteAdapter.getCount(); i++) { contactsDeleteAdapter.selectedMap.put(i, false); } //click事件:全选checkbox被取消勾选则把delContactsIdSet清空 contactsDeleteAdapter.delContactsIdSet.clear(); contactsDelBtn.setEnabled(false); } contactsDeleteAdapter.notifyDataSetChanged(); break; case R.id.contacts_delete_btn: new AlertDialog.Builder(this).setTitle( R.string.clearConfirmation_title).setMessage( R.string.clearConfirmation).setNegativeButton( android.R.string.cancel, null).setPositiveButton( android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { final ProgressDialog progressDialog = ProgressDialog .show( MultiSelectActivity.this, getString(R.string.clearProgress_title), "", true, false); final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { // 删除记录事件处理(我这里就不写详细的代码了) return null; } @Override protected void onPostExecute(Void result) { progressDialog.dismiss(); } }; progressDialog.show(); task.execute(); } }).setCancelable(true).create().show(); break; case R.id.contacts_cancel_btn: // 取消事件处理 break; } } @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { Log.i(TAG, "onItemClick"); ContactsDeleteListItemViews views = (ContactsDeleteListItemViews) view .getTag(); views.delCheckBox.toggle(); contactsDeleteAdapter.selectedMap.put(position, views.delCheckBox .isChecked()); contactsDeleteAdapter.notifyDataSetChanged(); // 判断是否有记录没被选中,以便修改全选CheckBox勾选状态 if (contactsDeleteAdapter.selectedMap.containsValue(false)) { selectAll.setChecked(false); } else { selectAll.setChecked(true); } // 判断是否有记录被选中,以便设置删除按钮是否可用 if (contactsDeleteAdapter.selectedMap.containsValue(true)) { contactsDelBtn.setEnabled(true); } else { contactsDelBtn.setEnabled(false); } } } 布局文件:contacts_delete_activity.xml
<?xml version="1.0" encoding="utf-8"?> <!-- zuolongsnail@163.com This layout of delete contacts. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include android:id="@+id/contacts_delete_list_header" layout="@layout/contacts_delete_list_header" /> <ListView android:id="@+id/contacts_delete_list" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> <LinearLayout style="@android:style/ButtonBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/contacts_delete_btn" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:enabled="false" android:text="@string/delete" /> <Button android:id="@+id/contacts_cancel_btn" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/cancel" /> </LinearLayout> </LinearLayout> 作者:zuolongsnail 发表于2011-12-8 10:17:39 原文链接
阅读:627 评论:0 查看评论
|
评论
4 楼
milk713785
2015-06-06
这段还是有点问题,最后把判断去掉了。因为这个方法被调用的次数跟我预期的不太一样。
public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == 1) { checkBoxList.add((CheckBox) ((TableRow) view.getParent()).findViewById(R.id.checkBox)); } return false; }
3 楼
milk713785
2015-06-06
在全局定义checkBox变量,就可以在全局使用:
另外,改写以下代码段:
可以为CheckBox添加执行的setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()的方法,实现同样效果,就不需要那么多行代码了。
ArrayList<CheckBox> checkBoxList = new ArrayList<CheckBox>();
另外,改写以下代码段:
checkBoxList.add((CheckBox) ((TableRow) view.getParent()).findViewById(R.id.checkBox));
可以为CheckBox添加执行的setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()的方法,实现同样效果,就不需要那么多行代码了。
2 楼
milk713785
2015-06-06
发现个更简单的方法,用安卓提供的高级组件,只要重写setViewBinder就能实现该功能:
DataBaseAccessUtil dataBaseAccessUtil = new DataBaseAccessUtil(this); simpleCursorAdapter = dataBaseAccessUtil.getIDCardHistoryAdapter(this); simpleCursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == 1) { checkBoxList.add((CheckBox) ((TableRow) view.getParent()).findViewById(R.id.checkBox)); } return false; } });
public SimpleCursorAdapter getIDCardHistoryAdapter(Context context) { IDCardDao idCardDao = new IDCardDao(); Cursor cursor = idCardDao.getSelectCursor(customSQLiteOpenHelper); SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(context, R.layout.idcard_history_list, cursor, new String[]{IDCardDao.COLUMN_ID, IDCardDao.COLUMN_ID_NUMBER, IDCardDao.COLUMN_SEX, IDCardDao.COLUMN_BIRTHDAY, IDCardDao.COLUMN_ADDRESS}, new int[]{R.id._id, R.id.id_number, R.id.sex, R.id.birthday, R.id.address}, 0); return simpleCursorAdapter; }
public Cursor getSelectCursor(SQLiteOpenHelper sqLiteOpenHelper) { Cursor cursor = sqLiteDatabase.query(TABLE_NAME, new String[]{COLUMN_ID, COLUMN_ID_NUMBER, COLUMN_SEX, COLUMN_BIRTHDAY, COLUMN_ADDRESS}, null, null, null, null, COLUMN_ID); return cursor; }
1 楼
cloudfile
2013-11-09
谢谢
分享
分享
发表评论
-
android离线
2019-11-04 21:25 261https://www.jianshu.com/p/fdfc4 ... -
android 异步更新
2015-07-11 22:42 1465http://www.apkbus.com/forum.php ... -
仿微米
2015-06-26 10:22 0http://www.javaapk.com/source/4 ... -
仿微信
2015-06-26 10:21 1873http://www.javaapk.com/source/1 ... -
网易客户端
2015-06-26 10:20 1562http://www.javaapk.com/source/4 ... -
仿朋友圈
2015-06-26 10:18 1665http://www.javaapk.com/source/8 ... -
仿朋友圈
2015-06-26 10:13 1779http://www.eoeandroid.com/threa ... -
全国ABC查询
2015-06-26 10:07 1272IM 功能 环信云 信息统计 Umeng 分享Umeng 更新 ... -
android 判断网络
2015-06-25 16:00 1220http://www.cnblogs.com/renqingp ... -
android 多彩表格
2015-05-31 16:06 1432http://blog.csdn.net/conowen/ar ... -
android socket
2015-05-31 16:01 1594http://blog.csdn.net/conowen/ar ... -
微信播放语音3
2015-02-25 12:00 1392http://download.csdn.net/detail ... -
微信语音播放2
2015-02-25 11:57 1297http://download.csdn.net/detail ... -
微信语音播放
2015-02-25 11:56 1643http://www.apkbus.com/android-1 ... -
超强的资料整合
2015-01-05 11:04 1196http://zz563143188.iteye.com/bl ... -
最强开发资源平台大合集
2015-01-04 14:50 1851程序员代码应用开发平 ... -
Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
2014-09-04 15:45 1335http://blog.csdn.net/vipzjyno1/ ... -
android应用推广
2014-09-03 23:25 1280应用推广不必愁,有米 ... -
android 图片异步加载
2014-09-03 16:47 1096http://www.csdn.net/article/201 ... -
android hander的使用
2014-09-02 23:46 1322http://www.cnblogs.com/xiaoran1 ...
相关推荐
本篇文章主要介绍了android基于ListView和CheckBox实现多选和全选记录的功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
由于listview的一些特性,刚开始写这种需求的功能的时候都会碰到一些问题,重点就是存储每个checkbox的状态值,在这里分享出了完美解决方法:
CheckBox实现多选列表,并实现全选、反选功能
带CheckBox的listView 支持多选,全选,反选, 的功能,网上有好多遇见的这种需求做起来有bug,在这里都完美解决了
主要介绍了Android中ListView + CheckBox实现单选、多选效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Android 长按Listview显示CheckBox,实现批量删除,具体功能请参考: http://blog.csdn.net/ddxxll2008/article/details/49125759
实现全选删除效果
ListView嵌套ListView,checkbox全选,多选,父item全选后,下面的子item全部选中
基于ListView和CheckBox实现多选和全选记录的功能
Android ListView 带CheckBox框,点击选择,反选,全选,全不选等功能,并且显示选择的数量。
基于ListView和CheckBox实现多选和全选记录的功能
android listview,ExpandableListView实现单选,多选,全选,edittext实现批量输入.zip
今天给别人写了一个多选框的应用,功能是淘宝购物车里面选择商品,全选和分开选,和大家交流学习
主要介绍了Android listview ExpandableListView实现多选,单选,全选,edittext实现批量输入的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
android ListView中的checkBox全选和反选Demo
Android ListView长按弹出CheckBox,实现全选,反选,批量删除功能. 详情:http://blog.csdn.net/u013006960/article/details/52102839
真正可用的,无误的,不存在选择异常的android listview与checkbox结合的源码,具有单选,多选,全选,取消全选,删除,单击选择,显示选择结果功能。
APP的开发中,会常遇到这样的需求:批量...先说明接下来要实现的ListView+CheckBox支持的功能: 1. 外部点击“编辑”(长按ListView的某一项也可),出现复选框; 2. 支持全选、复选、全不选 3. 支持获取选中
android的listview中包含checkbox,并且有全选反选和清楚选择的操作,效果图见http://www.eoeandroid.com/forum.php?mod=viewthread&tid=300663&page=1&extra=#pid3057257