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

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

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

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

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

Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能

Android高级控件

(一)——ListView绑定CheckBox实现全选,增加和删除等功能

这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等….我们先来看看实现的效果吧!

好的,我们新建一个项目LvCheckBox

我们事先先把这两个布局写好吧,一个是主布局,还有一个listview的item.xml,相信不用多说

activity_main.xml

android="

xmlns:

tools="

android:

layout_width="match_parent"

android:

layout_height="match_parent"

android:

orientation="vertical">

android:

layout_width="match_parent"

android:

layout_height="50dp"

android:

background="#238286">

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

layout_centerInParent="true"

android:

text="ListView绑定CheckBox"

android:

textColor="#fff"/>

android:

id="@+id/tv_add"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

layout_alignParentRight="true"

android:

layout_centerVertical="true"

android:

layout_marginRight="17dp"

android:

text="增加"

android:

textColor="#fff"/>

android:

id="@+id/listview"

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="1">

android:

layout_width="match_parent"

android:

layout_height="50dp"

android:

orientation="horizontal">

android:

id="@+id/btn_detele"

android:

layout_width="match_parent"

android:

layout_height="match_parent"

android:

layout_marginRight="1dp"

android:

layout_weight="1"

android:

background="#238286"

android:

text="删除"

android:

textColor="#fff"/>

android:

id="@+id/btn_select_all"

android:

layout_width="match_parent"

android:

layout_height="match_parent"

android:

layout_marginLeft="1dp"

android:

layout_weight="1"

android:

background="#238286"

android:

text="全选"

android:

textColor="#fff"/>

item.xml

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

layout_width="match_parent"

android:

layout_height="50dp"

android:

gravity="center_vertical"

android:

orientation="horizontal">

android:

id="@+id/tvTitle"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

layout_marginLeft="15dp"

android:

layout_weight="7"

android:

text="text"/>

android:

id="@+id/cbCheckBox"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

layout_weight="1"/>

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){

this.title=title;

}

}

ListAdapter

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

packagecom.lgl.lvcheckbox;

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{

//数据集

privateListlist=newArrayList();

//上下文

privateContextmContext;

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

privateMapisCheck=newHashMap();

//构造方法

publicListAdapter(ContextmContext){

super();

this.mContext=mContext;

//默认为不选中

initCheck(false);

}

//初始化map集合

publicvoidinitCheck(booleanflag){

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

for(inti=0;i

//设置默认的显示

isCheck.put(i,flag);

}

}

//设置数据

publicvoidsetData(Listdata){

this.list=data;

}

//添加数据

publicvoidaddData(Beanbean){

//下标数据

list.add(0,bean);

}

@Override

publicintgetCount(){

//TODOAuto-generatedmethodstub

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

returnlist!

=null?

list.size():

0;

}

@Override

publicObjectgetItem(intposition){

//TODOAuto-generatedmethodstub

returnlist.get(position);

}

@Override

publiclonggetItemId(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}

@Override

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(){

@Override

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;

}

//全选按钮获取状态

publicMapgetMap(){

//返回状态

returnisCheck;

}

//删除一个数据

publicvoidremoveData(intposition){

list.remove(position);

}

}

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

初始化数据

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

privatevoidinitData(){

//默认显示的数据

Listlist=newArrayList();

list.add(newBean("张三"));

list.add(newBean("李四"));

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:

//全选——全不选

MapisCheck=adapter.getMap();

if(btn_select_all.getText().equals("全选")){

adapter.initCheck(true);

//通知刷新适配器

adapter.notifyDataSetChanged();

btn_select_all.setText("全不选");

btn_select_all.setTextColor(Color.YELLOW);

}elseif(btn_select_all.getText().equals("全不选")){

adapter.initCheck(false);

//通知刷新适配器

adapter.notifyDataSetChanged();

btn_select_all.setText("全选");

btn_select_all.setTextColor(Color.YELLOW);

}

break;

删除数据

删除也是要考虑很多因素

//删除数据

caseR.id.btn_detele:

//拿到所有数据

MapisCheck_delete=adapter.getMap();

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

intcount=adapter.getCount();

//遍历

for(inti=0;i

//删除有两个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.setText("全选");

btn_select_all.setTextColor(Color.WHITE);

adapter.notifyDataSetChanged();

break;

这里的

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

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

listview的点击

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

//listview的点击事件

@Override

publicvoidonItemClick(AdapterView

>parent,Viewview,intposition,

longid){

//判断view是否相同

if(view.getTag()instanceofViewHolder){

//如果是的话,重用

ViewHolderholder=(ViewHolder)view.getTag();

//自动触发

holder.cbCheckBox.toggle();

}

}

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

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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