在Adapter类中定义一个HashMap列表,保存每一行是否被选中:

private static HashMap<Integer, Boolean> isSelected;

可见定义了名为isSelected的HashMap列表,再定义它的getter和setter方法:

    public static void setIsSelected(HashMap<Integer, Boolean> isSelected)   {
MyAdapter.isSelected = isSelected;
} public static HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
}

在Adapter类的构造方法中,将isSelected的所有初始值设置为false:

    public MyAdapter(Context context, List<String> list){
this.context = context;
this.list = list;
isSelected = new HashMap<Integer, Boolean>();
initData();
} private void initData() {
for (int i = 0; i < list.size(); i++) {
getIsSelected().put(i, false);
}
}

在getView方法中,定义CheckBox的点击方法,当CheckBox选中/不选中时设置isSelected的值为true/false;同时根据isSelected的值设置CheckBox是否选中,并显示相应的图标:

        mCheckbox = (CheckBox)convertView.findViewById(R.id.chkBox);
mCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked){
buttonView.setButtonDrawable(R.drawable.r02);
isSelected.put(position, true);
}else{
buttonView.setButtonDrawable(R.drawable.r01);
isSelected.put(position, false);
}
}
});
mCheckbox.setChecked(getIsSelected().get(position));
if (getIsSelected().get(position)){
mCheckbox.setButtonDrawable(R.drawable.r02);
}else{
mCheckbox.setButtonDrawable(R.drawable.r01);
}

在主窗体文件中,当点击列表下面的CheckBox时,调用selectAll方法将isSelected的所有值设置为true/false,同时显示相应的图标:

    @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.chkSelect:
selectAll(chkSelect.isChecked());
break;
case R.id.btnDelete:
break;
default:
break;
} }
    private void selectAll(boolean x){
for (int i=0; i<mList.size(); i++){
mAdapter.getIsSelected().put(i, x);
}
if (chkSelect.isChecked()){
chkSelect.setButtonDrawable(R.drawable.r02);
}else{
chkSelect.setButtonDrawable(R.drawable.r01);
}
mAdapter.notifyDataSetChanged();
}

完整的文件如下。

MainActivity.java:

package com.hzhi.mylistview;

import android.support.v7.app.ActionBarActivity;

import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView; public class MainActivity extends ActionBarActivity implements OnClickListener{ private CheckBox chkSelect;
private Button btnDelete;
private List<String> mList;
private MyAdapter mAdapter;
private ListView mListview; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
initData();
mAdapter = new MyAdapter(MainActivity.this, mList);
mListview.setAdapter(mAdapter);
} private void initView(){
chkSelect = (CheckBox) findViewById(R.id.chkSelect);
btnDelete = (Button) findViewById(R.id.btnDelete);
mListview = (ListView) findViewById(R.id.lstView); chkSelect.setOnClickListener(this);
btnDelete.setOnClickListener(this); chkSelect.setButtonDrawable(R.drawable.r01);
} private void initData(){
mList = new ArrayList<String>();
for (int i=0; i<10; i++){
mList.add("第" + String.valueOf(i) + "条数据");
}
} private void selectAll(boolean x){
for (int i=0; i<mList.size(); i++){
mAdapter.getIsSelected().put(i, x);
}
if (chkSelect.isChecked()){
chkSelect.setButtonDrawable(R.drawable.r02);
}else{
chkSelect.setButtonDrawable(R.drawable.r01);
}
mAdapter.notifyDataSetChanged();
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.chkSelect:
selectAll(chkSelect.isChecked());
break;
case R.id.btnDelete:
break;
default:
break;
} } }

MyAdapter.java:

package com.hzhi.mylistview;

import java.util.HashMap;
import java.util.List; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener; public class MyAdapter extends BaseAdapter{ List<String> list;
Context context;
private static HashMap<Integer, Boolean> isSelected; public MyAdapter(Context context, List<String> list){
this.context = context;
this.list = list;
isSelected = new HashMap<Integer, Boolean>();
initData();
} private void initData() {
for (int i = 0; i < list.size(); i++) {
getIsSelected().put(i, false);
}
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
CheckBox mCheckbox;
TextView mText; if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.listitem, null);
}
mCheckbox = (CheckBox)convertView.findViewById(R.id.chkBox);
mCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked){
buttonView.setButtonDrawable(R.drawable.r02);
isSelected.put(position, true);
}else{
buttonView.setButtonDrawable(R.drawable.r01);
isSelected.put(position, false);
}
}
});
mCheckbox.setChecked(getIsSelected().get(position));
if (getIsSelected().get(position)){
mCheckbox.setButtonDrawable(R.drawable.r02);
}else{
mCheckbox.setButtonDrawable(R.drawable.r01);
} mText = (TextView)convertView.findViewById(R.id.txtText);
mText.setText(list.get(position).toString()); return convertView;
} public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
MyAdapter.isSelected = isSelected;
} public static HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
} }

运行效果如下:

选中最下面的CheckBox后,实现全部选中:

ListView的CheckBox实现全部选中/不选中的更多相关文章

  1. Jquery常用radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关设置

    获取一组radio被选中项的值:var item = $('input[name=items][checked]').val(); 获取select被选中项的文本:var item = $(" ...

  2. js获取checkbox复选框获取选中的选项

    js获取checkbox复选框获取选中的选项 分享下javascript获取checkbox 复选框获取选中的选项的方法. 有关javascript 获取checkbox复选框的实例数不胜数.js实现 ...

  3. checkbox选择框如果被选中value值就可以传过去,没有被选中value就不能穿过去(调试了近一天,坑爹的说)

    因为要适合各种分辨率,所以将原来的单选按钮radio换成单个的checkbox

  4. jquery -- checkbox选中无选中状态

    最近在工作中使用jquery操作checkbox,使用下面方法进行全选.反选: var ischecked=allCheckObj.is(':checked'); ischecked?checksOb ...

  5. ztree : checkbox 选中/不选中时动态添加/删除DOM元素

    先上代码. var IDMark_Switch = "_switch", IDMark_Icon = "_ico", IDMark_Span = "_ ...

  6. 实现listview中checkbox的多选与记录

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

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

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

  8. listview使用checkbox批量删除出现的问题

    1.选中前面的checkbox导致后的checkbox被选中 2.选中后下滑listview,再上滑时被选中的checkbox又变成未选中状态. 问题大都是因为对listview进行代码优化重用con ...

  9. Android 解决listview中checkBox错位选择

    假如ListView,分成2页(或者设置数据可以纵向拉,可隐藏),每页3条数据,每个Listview的Item 里面有个checkBox,现在,当我选择第一页的前两天数据,翻到第二页,竟然第二页后两条 ...

随机推荐

  1. Angular遇上CoffeeScript - NgComponent封装

    CoffeeScript是基于JavaScript的一门扩展小巧语言,它需要编译成JavaScript,然后再运行与浏览器或者Nodejs平台.JavaScript由于商业原因10天时间就匆忙诞生,所 ...

  2. [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上)

    [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上) 本篇导读: 上篇介绍了常用的代码管理工具VSS,看了一下评论,很多同学深恶痛绝,有的甚至因为公司使用VS ...

  3. SQL Server 深入解析索引存储(中)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆 概述 本篇文章是关于堆的存储结构.堆是不含聚集索引的表(所以只有非聚集索引的表也是堆).堆的 sys.parti ...

  4. 在Github上搭建自己的博客(Windows平台)

    折腾了好久,终于在Github上搭建了自己的博客.这里面总结一下过程希望对大家能有所帮助. Github建博优缺点 和 csdn,新浪,网易相比,在Github上可以自己实现功能 和阿里云,VPS相比 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  6. 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型

    不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...

  7. iOS-屏幕适配-UI布局

    iOS 屏幕适配:autoResizing autoLayout和sizeClass 一.图片解说 -------------------------------------------------- ...

  8. Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...

  9. 详解CSS的相对定位和绝对定位

    CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...

  10. C++中static数据成员详解

        本文和大家分享的主要是c++中static数据成员的相关用法及源码示例,希望能帮助大家更好的学习C++. static(静态存储)数据成员 StaticTest.cpp : 定义控制台应用程序 ...