设置ListView的item多选
一,首先定义一个类来关联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多选的更多相关文章
- 6.设置ListView的Item的高度无效
问题: 设置ListView的Item的高度无效. 解决方式: 设置ListView的Item的minHeight属性.
- 如何设置listview每个item高度
据我所了解,listview每行的宽度是由 inflater填充布局中高度最大的那个控件的高度... public void setListViewHeightBasedOnChildren(Lis ...
- 设置ListView的item不能点击
写了一个ListView结合volley的demo ListView只是用来展示数据,所以不需要点击效果. 网上搜索了下: 可以禁用ListView ListView.setEnabled(false ...
- Android 设置ListView当前显示的item
项目中可能会有这种需求:动态设置ListView显示的item 这种需求可能会出现在不同的情况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据并且改变了集合中数据,或者是某种条件 ...
- Android为ListView的Item设置不同的布局
MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; impor ...
- android中设置ListView的选中的Item的背景颜色
ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml <? ...
- Android ListView的item背景色设置以及item点击无响应等相关问题
Android ListView的item背景色设置以及item点击无响应等相关问题 在Android开发中,listview控件是非常常用的控件,在大多数情况下,大家都会改掉listview的ite ...
- Android ListView的item背景色设置
1.如何改变item的背景色和按下颜色 listview默认情况下,item的背景色是黑色,在用户点击时是黄色的.如果需要修改为自定义的背景颜色,一般情况下有三种方法: 1)设置listSelecto ...
- 实现ScrollView中包含ListView,动态设置ListView的高度
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
随机推荐
- 什么是队列(Queue)?
类似于链表和堆栈,队列也是存储数据的结构.队列中数据进入队列的顺序很重要,一般来说,队列就是一群人或者事物按照排好的顺序等待接受服务或者处理. 定义:队列,又称为伫列(queue),是先进先出(FIF ...
- HBase 4、Phoenix安装和Squirrel安装
描述 现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等.今天主要记录Phoenix. phoenix,中文译为“凤凰”,很美的名字.Phoen ...
- PHP 表单验证 - 完成表单实例
------------------------------------------------------------------------------------------- 本节展示如何在用 ...
- 很少人知道的office专用卸载工具
Microsoft Office是微软公司开发的一套基于 Windows 操作系统的办公软件套装.常用组件有 Word.Excel.Powerpoint等.当我们不需要再用了或者想安装旧版本的话,首先 ...
- lua 类继承和实现
http://blog.csdn.net/ssihc0/article/details/7742323 Account={balance=}; --新建了一个对像,他有一个属性balance func ...
- 【转换模型+扫描线】【UVA1398】Meteor
The famous Korean internet company nhn has provided an internet-based photo service which allows The ...
- php 添加 redis 扩展模块
由于PHP源码中并未有redis的文件,所以需要自己下载. 下载地址: http://pecl.php.net/get/redis-2.2.5.tgz [root@study package]# ta ...
- What should we do when meet a crash in android?
制造一个crash 为了演示的目的,我在libsensors的open_sensors_device中故意制造了一个crash: static int open_sensors_device( ...
- 自学Android的第一个小程序(小布局、button点击事件、toast弹出)
因为上班,学习时间有限,昨晚才根据教程写了一个小程序,今天忙里偷闲写一下如何实现的,来加深一下印象. 首先创建一个Android项目, 通过activity_xxx.xml布局文件来添加组件来达到自己 ...
- 手工启动oracle EM
在WINDOWS上安完ORACLE发现没有EM没有启动,在网上找了一个手工启动的方法,试了,在WIN下同样可用. 人家的原文如下: oracle@linux:~> sqlplus/ as sys ...