设置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" ...
随机推荐
- Course Schedule 解答
Question There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may ...
- UVA 10047-The Monocycle(队列bfs+保存4种状态)
题意:给你一张地图,S代表起点,T代表终点,有一个轮盘,轮盘平均分成5份,每往前走一格恰好转1/5,轮盘只能往前进,但可以向左右转90°,每走一步或是向左向右转90° 要花费1单位的时间,问最少的时间 ...
- HBase 6、用Phoenix Java api操作HBase
开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hb ...
- iOS 10 (X8)上CoreData的使用(包含创建工程时未添加CoreData)
1.在创建工程时未添加CoreData,后期想要使用CoreData则要在工程Appdelegate.h文件中添加CoreData库和CoreData中的通道类(用来管理类实例和CoreData之间的 ...
- 使用 apache ant 轻松实现文件压缩/解压缩(转)
原文地址:http://blog.csdn.net/irvine007/article/details/6779492 maven配置ant包: <dependency> <grou ...
- java中a++与++a区别
java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...
- java排列
排列:它可以被看作是多个相同类型的数据的组合,这些数据的统一管理. 1.声明. 创建 一维:type[] var 比如:int[] a或 int a[]: 数组名= new 数组元素的类型[数组 ...
- java学习笔记day03
1.二维数组,即一维护 int[][] arr1 = new int[3][2]; int[][] arr2 ={{2,4,3,6,22,7},{3,6,8,9},{10,13,24,5}}; pub ...
- Android开发_关于点击事件
为了防止用户或者测试MM疯狂的点击某个button: 创建一个工具类 public class Tools { private static long lastClickTime; public st ...
- win7系统64位plsql的设置
1. Instant Client Downloads for Microsoft Windows (32-bit) 我下载的是: instantclient-basic-win32-11.2.0.1 ...