一,首先定义一个类来关联Adapter和Activity能够记住点击的位置

public class MyViewHoler{
public CheckBox cb;
public TextView tv; }

二,Adapter的写法

package com.example.listviewcheckdemo;

import java.util.HashMap;
import java.util.List; import android.annotation.SuppressLint;
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.TextView;
/**
*
* @author LiuZiwei
* 选列表adapter
*
*/
public class CheckAdapter extends BaseAdapter{ public static HashMap<Integer, Boolean> isSelected;
private Context context = null;
private List<String> list = null; @SuppressLint("UseSparseArrays")
public CheckAdapter(Context context, List<String> list) {
this.context = context;
this.list = list; isSelected = new HashMap<Integer, Boolean>();
for (int i = 0; i < list.size(); i++) {
isSelected.put(i, false);
}
} @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int arg0) {
return list.get(arg0);
} @Override
public long getItemId(int arg0) {
return 0;
} @Override
public View getView(int position, View view, ViewGroup arg2) {
MyViewHoler holder = null; if (view == null) {
holder = new MyViewHoler();
view = LayoutInflater.from(context).inflate(R.layout.check_item, null);
holder.tv = (TextView) view.findViewById(R.id.item_tv);
holder.cb = (CheckBox) view.findViewById(R.id.item_cb); view.setTag(holder); } else { holder = (MyViewHoler) view.getTag(); } holder.tv.setText(list.get(position));
holder.cb.setChecked(isSelected.get(position));
return view;
} }

三、Activity里的写法

public class MainActivity extends Activity {
private ListView listview_check;
private CheckAdapter adapter;
/** 初始化数据*/
private List<String> newList=new ArrayList<String>();
/** 存储点击选中的数据*/
private List<String> checkList=new ArrayList<String>(); /** 全选*/
private Button btn_all;
/** 反选*/
private Button btn_clear;
/** 取消已选*/
private Button btn_cancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview_check=(ListView) findViewById(R.id.listview);
btn_all=(Button) findViewById(R.id.all);
btn_clear=(Button) findViewById(R.id.clear);
btn_cancel=(Button) findViewById(R.id.cancel); /** 初始化数据*/
for(int i=0;i<10;i++){
newList.add("选项"+i);
}
adapter=new CheckAdapter(this, newList);
listview_check.setAdapter(adapter);
listview_check.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long arg3) {
// TODO Auto-generated method stub
MyViewHoler holder=(MyViewHoler) view.getTag(); holder.cb.toggle();// 在每次获取点击的item时改变checkbox的状态 CheckAdapter.isSelected.put(position, holder.cb.isChecked()); // 同一时候改动map的值保存状态 if (holder.cb.isChecked() == true) {
checkList.add(newList.get(position));
} else {
checkList.remove(newList.get(position));
}
Log.e("----", "---------"+checkList.toString());
}
});
/** 全选*/
btn_all.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
checkList.clear();
for(int i=0;i<newList.size();i++){
CheckAdapter.isSelected.put(i,true);
checkList.add(newList.get(i));
}
adapter.notifyDataSetChanged();//注意这一句必须加上,否则checkbox无法正常更新状态
}
});
/** 反选*/
btn_clear.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) { for(int i=0;i<newList.size();i++){
if(CheckAdapter.isSelected.get(i)==false){
CheckAdapter.isSelected.put(i, true);
checkList.add(newList.get(i));
}
else{
CheckAdapter.isSelected.put(i, false);
checkList.remove(newList.get(i));
}
}
adapter.notifyDataSetChanged();
}
});
/** 取消已选*/
btn_cancel.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
for(int i=0;i<newList.size();i++){
if(CheckAdapter.isSelected.get(i)==true){
CheckAdapter.isSelected.put(i, false);
checkList.remove(newList.get(i));
}
}
adapter.notifyDataSetChanged();
}
});
}

设置ListView的item多选的更多相关文章

  1. 6.设置ListView的Item的高度无效

    问题: 设置ListView的Item的高度无效. 解决方式: 设置ListView的Item的minHeight属性.

  2. 如何设置listview每个item高度

    据我所了解,listview每行的宽度是由 inflater填充布局中高度最大的那个控件的高度... public  void setListViewHeightBasedOnChildren(Lis ...

  3. 设置ListView的item不能点击

    写了一个ListView结合volley的demo ListView只是用来展示数据,所以不需要点击效果. 网上搜索了下: 可以禁用ListView ListView.setEnabled(false ...

  4. Android 设置ListView当前显示的item

    项目中可能会有这种需求:动态设置ListView显示的item 这种需求可能会出现在不同的情况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据并且改变了集合中数据,或者是某种条件 ...

  5. Android为ListView的Item设置不同的布局

    MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; impor ...

  6. android中设置ListView的选中的Item的背景颜色

    ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml <? ...

  7. Android ListView的item背景色设置以及item点击无响应等相关问题

    Android ListView的item背景色设置以及item点击无响应等相关问题 在Android开发中,listview控件是非常常用的控件,在大多数情况下,大家都会改掉listview的ite ...

  8. Android ListView的item背景色设置

    1.如何改变item的背景色和按下颜色 listview默认情况下,item的背景色是黑色,在用户点击时是黄色的.如果需要修改为自定义的背景颜色,一般情况下有三种方法: 1)设置listSelecto ...

  9. 实现ScrollView中包含ListView,动态设置ListView的高度

    ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...

随机推荐

  1. HDU 1272 小希的迷宫(并查集) 分类: 并查集 2015-07-07 23:38 2人阅读 评论(0) 收藏

    Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就 ...

  2. 【CF 675D Tree Construction】BST

    题目链接:http://codeforces.com/problemset/problem/675/D 题意:给一个由n个互异整数组成的序列a[],模拟BST的插入过程,依次输出每插入一个元素a[i] ...

  3. 一张图讲解为什么需要自己搭建自己的git服务以及搭建的途径

    图片信息量有点大.不废话上图 图中的一些链接: gitlab官方安装文档 https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/in ...

  4. PHP MySQL Insert Into 之 Insert

    向数据库表插入数据 INSERT INTO 语句用于向数据库表添加新记录. 语法 INSERT INTO table_name VALUES (value1, value2,....) 您还可以规定希 ...

  5. hive优化之自己主动合并输出的小文件

    1.先在hive-site.xml中设置小文件的标准. <property> <name>hive.merge.smallfiles.avgsize</name> ...

  6. 小谈@override

    @override是jdk1.5增加的注解,主要是用来声明子类的某方法覆盖了父类的某方法.非常简单的注解,但是有个小问题: 项目最开始使用的是jdk1.6,mvc模式:接口 ----> 实现类. ...

  7. 基类的参考Expression能传一个lambda表达式

    using System;using System.Collections.Generic;using System.Data.Entity.Infrastructure;using System.L ...

  8. JSON 日期格式带 T 问题

    var iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-dd"; object obj = new  ...

  9. php中数字和字母生成随机字符串

    function strrand($len) { $arr = array( "0", "1", "2", "3", & ...

  10. .Net Service开发(一)

    一, 新增一个服务项目