android checkbox方法,Android checkbox的listView(多选,全选,反选)具体实现方法

该博客详细介绍了如何在Android中实现一个具有全选、反选、取消选择功能的ListView,包括布局文件、Activity代码和自定义Adapter的实现。通过使用HashMap记录CheckBox的选择状态,并在按钮点击事件中更新状态,实现了列表项的选择操作,并实时更新已选中的数量显示。
摘要由CSDN通过智能技术生成

布局文件:

[html]

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal" >

android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical" />

android:id="@+id/line"

android:layout_width="fill_parent"

android:layout_height="50dp"

android:layout_below="@+id/tv"

android:orientation="horizontal" >

android:id="@+id/bt_selectall"

android:layout_width="80dp"

android:layout_height="fill_parent"

android:text="全选" />

android:id="@+id/bt_cancleselectall"

android:layout_width="80dp"

android:layout_height="fill_parent"

android:text="反选" />

android:id="@+id/bt_deselectall"

android:layout_width="80dp"

android:layout_height="fill_parent"

android:text="取消选择" />

android:id="@+id/lv"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_below="@+id/line" />

listview 的item布局文件:

[html]

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal" >

android:id="@+id/item_tv"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1" />

android:id="@+id/item_cb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:clickable="false"

android:focusable="false"

android:focusableintouchmode="false"

android:gravity="center_vertical" />

activity:

[java]

public class ex_checkboxactivity extends activity {

private listview lv;

private myadapter madapter;

private arraylist list;

private button bt_selectall;

private button bt_cancel;

private button bt_deselectall;

private int checknum; // 记录选中的条目数量

private textview tv_show;// 用于显示选中的条目数量

/** called when the activity is first created. */

@override

public void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.main);

/* 实例化各个控件 */

lv = (listview) findviewbyid(r.id.lv);

bt_selectall = (button) findviewbyid(r.id.bt_selectall);

bt_cancel = (button) findviewbyid(r.id.bt_cancelselectall);

bt_deselectall = (button) findviewbyid(r.id.bt_deselectall);

tv_show = (textview) findviewbyid(r.id.tv);

list = new arraylist();

// 为adapter准备数据

initdate();

// 实例化自定义的myadapter

madapter = new myadapter(list, this);

// 绑定adapter

lv.setadapter(madapter);

// 全选按钮的回调接口

bt_selectall.setonclicklistener(new onclicklistener() {

@override

public void onclick(view v) {

// 遍历list的长度,将myadapter中的map值全部设为true

for (int i = 0; i < list.size(); i++) {

myadapter.getisselected().put(i, true);

}

// 数量设为list的长度

checknum = list.size();

// 刷新listview和textview的显示

datachanged();

}

});

// 反选按钮的回调接口

bt_cancel.setonclicklistener(new onclicklistener() {

@override

public void onclick(view v) {

// 遍历list的长度,将已选的设为未选,未选的设为已选

for (int i = 0; i < list.size(); i++) {

if (myadapter.getisselected().get(i)) {

myadapter.getisselected().put(i, false);

checknum--;

} else {

myadapter.getisselected().put(i, true);

checknum++;

}

}

// 刷新listview和textview的显示

datachanged();

}

});

// 取消按钮的回调接口

bt_deselectall.setonclicklistener(new onclicklistener() {

@override

public void onclick(view v) {

// 遍历list的长度,将已选的按钮设为未选

for (int i = 0; i < list.size(); i++) {

if (myadapter.getisselected().get(i)) {

myadapter.getisselected().put(i, false);

checknum--;// 数量减1

}

}

// 刷新listview和textview的显示

datachanged();

}

});

// 绑定listview的监听器

lv.setonitemclicklistener(new onitemclicklistener() {

@override

public void onitemclick(adapterview> arg0, view arg1, int arg2,

long arg3) {

// 取得viewholder对象,这样就省去了通过层层的findviewbyid去实例化我们需要的cb实例的步骤

viewholder holder = (viewholder) arg1.gettag();

// 改变checkbox的状态

holder.cb.toggle();

// 将checkbox的选中状况记录下来

myadapter.getisselected().put(arg2, holder.cb.ischecked());

// 调整选定条目

if (holder.cb.ischecked() == true) {

checknum++;

} else {

checknum--;

}

// 用textview显示

tv_show.settext("已选中" + checknum + "项");

}

});

}

// 初始化数据

private void initdate() {

for (int i = 0; i < 15; i++) {

list.add("data" + " " + i);

}

}

// 刷新listview和textview的显示

private void datachanged() {

// 通知listview刷新

madapter.notifydatasetchanged();

// textview显示最新的选中数目

tv_show.settext("已选中" + checknum + "项");

};

}

列表适配器:

[java]

package com.notice.listcheck;

import java.util.arraylist;

import java.util.hashmap;

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;

public class myadapter extends baseadapter {

// 填充数据的list

private arraylist list;

// 用来控制checkbox的选中状况

private static hashmap isselected;

// 上下文

private context context;

// 用来导入布局

private layoutinflater inflater = null;

// 构造器

public myadapter(arraylist list, context context) {

this.context = context;

this.list = list;

inflater = layoutinflater.from(context);

isselected = new hashmap();

// 初始化数据

initdate();

}

// 初始化isselected的数据

private void initdate() {

for (int i = 0; i < list.size(); i++) {

getisselected().put(i, false);

}

}

@override

public int getcount() {

return list.size();

}

@override

public object getitem(int position) {

return list.get(position);

}

@override

public long getitemid(int position) {

return position;

}

@override

public view getview(int position, view convertview, viewgroup parent) {

viewholder holder = null;

if (convertview == null) {

// 获得viewholder对象

holder = new viewholder();

// 导入布局并赋值给convertview

convertview = inflater.inflate(r.layout.listviewitem, null);

holder.tv = (textview) convertview.findviewbyid(r.id.item_tv);

holder.cb = (checkbox) convertview.findviewbyid(r.id.item_cb);

// 为view设置标签

convertview.settag(holder);

} else {

// 取出holder

holder = (viewholder) convertview.gettag();

}

// 设置list中textview的显示

holder.tv.settext(list.get(position));

// 根据isselected来设置checkbox的选中状况

holder.cb.setchecked(getisselected().get(position));

return convertview;

}

public static hashmap getisselected() {

return isselected;

}

public static void setisselected(hashmap isselected) {

myadapter.isselected = isselected;

}

public static class viewholder {

textview tv;

checkbox cb;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值