android listview 自定义checkbox,android--实现ListView上的CheckBox全选、取消选择、反选功能...

效果图如下:

a4c26d1e5885305701be709a3d33442f.png

1、main.xml

encoding="utf-8"?> 

>

/>

>

/>

2、listviewitem.xml

encoding="utf-8"?>

>

/>

3、MyAdapter.java

package com.example.checkboxactivity;

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

Boolean>(); // 初始化数据 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

Boolean> isSelected) { MyAdapter.isSelected = isSelected; }

public

static class ViewHolder { TextView tv; CheckBox cb; } }

4、Ex_checkboxActivity.java

package com.example.checkboxactivity;

import java.util.ArrayList;

import com.example.checkboxactivity.MyAdapter.ViewHolder;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.Button;

import android.widget.ListView;

import android.widget.TextView;

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;// 用于显示选中的条目数量

@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_cancleselectall); 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++; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值