Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx

上传人:b****5 文档编号:19190945 上传时间:2023-01-04 格式:DOCX 页数:12 大小:181.73KB
下载 相关 举报
Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx_第1页
第1页 / 共12页
Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx_第2页
第2页 / 共12页
Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx_第3页
第3页 / 共12页
Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx_第4页
第4页 / 共12页
Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx

《Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx》由会员分享,可在线阅读,更多相关《Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能Word文档格式.docx

ListView绑定CheckBox"

textColor="

#fff"

/>

id="

@+id/tv_add"

layout_alignParentRight="

layout_centerVertical="

layout_marginRight="

17dp"

增加"

/RelativeLayout>

ListView

@+id/listview"

0dp"

layout_weight="

1"

/ListView>

LinearLayout

horizontal"

Button

@+id/btn_detele"

1dp"

删除"

@+id/btn_select_all"

layout_marginLeft="

全选"

/LinearLayout>

item.xml

?

xmlversion="

1.0"

encoding="

utf-8"

>

gravity="

center_vertical"

@+id/tvTitle"

15dp"

7"

text"

CheckBox

@+id/cbCheckBox"

item.xml只有两个控件,很好理解吧

初始化控件

我们用initView()方法来初始化这些控件

privatevoidinitView(){

tv_add=(TextView)findViewById(R.id.tv_add);

tv_add.setOnClickListener(this);

btn_detele=(Button)findViewById(R.id.btn_detele);

btn_detele.setOnClickListener(this);

btn_select_all=(Button)findViewById(R.id.btn_select_all);

btn_select_all.setOnClickListener(this);

listview=(ListView)findViewById(R.id.listview);

}

然后继承点击事件,button的和listview的

implementsOnClickListener,OnItemClickListener

自定义Adapter

这里最难的就是adapter了

1.Bean

我们为了数据的记录方便,我们提前写一个实体类

packagecom.lgl.lvcheckbox;

publicclassBean{

privateStringtitle;

//构造方法

publicBean(Stringtitle){

super();

this.title=title;

publicStringgetTitle(){

returntitle;

publicvoidsetTitle(Stringtitle){

}

ListAdapter

这里所有的都写了注释,也方便大家看清

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importandroid.content.Context;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.CheckBox;

importandroid.widget.CompoundButton;

importandroid.widget.CompoundButton.OnCheckedChangeListener;

importandroid.widget.TextView;

/**

*自定义适配器

*

*@authorLGL

*

*/

publicclassListAdapterextendsBaseAdapter{

//数据集

privateList<

Bean>

list=newArrayList<

();

//上下文

privateContextmContext;

//存储勾选框状态的map集合

privateMap<

Integer,Boolean>

isCheck=newHashMap<

publicListAdapter(ContextmContext){

this.mContext=mContext;

//默认为不选中

initCheck(false);

//初始化map集合

publicvoidinitCheck(booleanflag){

//map集合的数量和list的数量是一致的

for(inti=0;

i<

list.size();

i++){

//设置默认的显示

isCheck.put(i,flag);

//设置数据

publicvoidsetData(List<

data){

this.list=data;

//添加数据

publicvoidaddData(Beanbean){

//下标数据

list.add(0,bean);

@Override

publicintgetCount(){

//TODOAuto-generatedmethodstub

//如果为null就返回一个0

returnlist!

=null?

list.size():

0;

publicObjectgetItem(intposition){

returnlist.get(position);

publiclonggetItemId(intposition){

returnposition;

publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent){

ViewHolderviewHolder=null;

Viewview=null;

//判断是不是第一次进来

if(convertView==null){

view=LayoutInflater.from(mContext).inflate(R.layout.item,null);

viewHolder=newViewHolder();

viewHolder.title=(TextView)view.findViewById(R.id.tvTitle);

viewHolder.cbCheckBox=(CheckBox)view

.findViewById(R.id.cbCheckBox);

//标记,可以复用

view.setTag(viewHolder);

}else{

view=convertView;

//直接拿过来用

viewHolder=(ViewHolder)view.getTag();

//拿到对象

Beanbean=list.get(position);

//填充数据

viewHolder.title.setText(bean.getTitle().toString());

//勾选框的点击事件

viewHolder.cbCheckBox

.setOnCheckedChangeListener(newOnCheckedChangeListener(){

publicvoidonCheckedChanged(CompoundButtonbuttonView,

booleanisChecked){

//用map集合保存

isCheck.put(position,isChecked);

});

//设置状态

if(isCheck.get(position)==null){

isCheck.put(position,false);

viewHolder.cbCheckBox.setChecked(isCheck.get(position));

returnview;

//优化

publicstaticclassViewHolder{

publicTextViewtitle;

publicCheckBoxcbCheckBox;

//全选按钮获取状态

publicMap<

getMap(){

//返回状态

returnisCheck;

//删除一个数据

publicvoidremoveData(intposition){

list.remove(position);

当然,有些方法是后面写的,我们提前写好,比如删除和增加什么的

初始化数据

我们默认总是需要点数据的

privatevoidinitData(){

//默认显示的数据

List<

list.add(newBean("

张三"

));

李四"

王五"

adapter=newListAdapter(this);

adapter.setData(list);

listview.setAdapter(adapter);

增加数据

caseR.id.tv_add:

adapter.addData(newBean("

刘桂林"

//通知刷新适配器

adapter.notifyDataSetChanged();

break;

全选数据

当我们全选的时候,按钮应该为全不选的,所以这里我们这里有状态的

caseR.id.btn_select_all:

//全选——全不选

Map<

isCheck=adapter.getMap();

if(btn_select_all.getText().equals("

)){

adapter.initCheck(true);

btn_select_all.setText("

全不选"

);

btn_select_all.setTextColor(Color.YELLOW);

}elseif(btn_select_all.getText().equals("

adapter.initCheck(false);

删除数据

删除也是要考虑很多因素

//删除数据

caseR.id.btn_detele:

//拿到所有数据

isCheck_delete=adapter.getMap();

//获取到条目数量,map.size=list.size,所以

intcount=adapter.getCount();

//遍历

count;

//删除有两个map和list都要删除,计算方式

intposition=i-(count-adapter.getCount());

//判断状态true为删除

if(isCheck_delete.get(i)!

=null&

&

isCheck_delete.get(i)){

//listview删除数据

isCheck_delete.remove(i);

adapter.removeData(position);

btn_select_all.setTextColor(Color.WHITE);

这里的

intposition=i-(count-adapter.getCount());

是一个计算方式,当我们删除之后,实际上数组是需要重新排列的,同时按钮也要变回全选状态的

listview的点击

我们直接点击也是可以勾选cheakbox选中的

//listview的点击事件

publicvoidonItemClick(AdapterView<

parent,Viewview,intposition,

longid){

//判断view是否相同

if(view.getTag()instanceofViewHolder){

//如果是的话,重用

ViewHolderholder=(ViewHolder)view.getTag();

//自动触发

holder.cbCheckBox.toggle();

好的,这样的话就可以实现了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1