设置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" ...
随机推荐
- Eclipse配置Maven开发环境
前言: 现在Eclipse版本越来越高.高版本的Eclipse甚至已经集成了Maven像是SpringSource的哪个版本.用习惯了Eclipse.在开发中还是不想更换掉自己的IDE.如此一来就又了 ...
- IOS开发之---触摸和手势
Touch:在与设备的多点触摸屏交互时生成. 响应者对象 响应者对象就是可以响应事件并对事件作出处理.在iOS中,存在UIResponder类,它定义了响应者对象的所有方法.UIApplication ...
- hdu 4627 水数学题
最小公倍数最大,也就是尽量让2个数互质,所以把n除以2 从中间向两边找就够了,自己写几组数据就能发现规律. 注意longlong存 #include<cstdio> #include< ...
- 用数据说话,外贸B2C产品选择(上篇)-热门搜索法
当选择了外贸这条路,那就是选择了跟外国人做生意.那面对全球这么大的市场究竟选什么样的产品才干脱颖而出?什么样的产品才是全球卖家喜欢的呢?什么样的产品才干让自己財源滚滚?我想这都是全部刚開始外贸创业的人 ...
- wpf Visibility 动画
XAML实现: [xhtml] view plaincopy <Border Height="100" Width="80" CornerRadius=& ...
- LR实战之Discuz开源论坛——安装及简介
想了很久,也许是因为这段时间特别闲,从毕业到现在,我的测试职业生涯也近两年了,发现自己越来越喜欢测试领域,也越来越偏向测试开发了,作为一名专业的测试人员,不得不要学习性能测试,而使用LoadRunne ...
- C# 数据的序列化存取
1,什么是序列化? 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列 ...
- php.ini中最好禁止的一些函数
phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息. 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec(). 危险等级 ...
- videojs 视频开发API
videojs就提供了这样一套解决方案,他是一个兼容html5的视频播放工具,早期版本兼容所有浏览器,方法是:提供三个后缀名的视频,并在不支持html5的浏览器下生成一个flash的版本. 最新的3. ...
- .NET Framework 4.0-RequestValidationMode
1.WebForm 先看如下 web.config 的代码: <system.web> <compilation debug="true" targetFrame ...