Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能.docx
- 文档编号:6187427
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:181.73KB
Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能.docx
《Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能.docx》由会员分享,可在线阅读,更多相关《Android高级控件一ListView绑定CheckBox实现全选增加和删除等功能.docx(12页珍藏版)》请在冰豆网上搜索。
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"> 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{ //数据集 privateList //上下文 privateContextmContext; //存储勾选框状态的map集合 privateMap //构造方法 publicListAdapter(ContextmContext){ super(); this.mContext=mContext; //默认为不选中 initCheck(false); } //初始化map集合 publicvoidinitCheck(booleanflag){ //map集合的数量和list的数量是一致的 for(inti=0;i //设置默认的显示 isCheck.put(i,flag); } } //设置数据 publicvoidsetData(List 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; } //全选按钮获取状态 publicMap //返回状态 returnisCheck; } //删除一个数据 publicvoidremoveData(intposition){ list.remove(position); } } 当然,有些方法是后面写的,我们提前写好,比如删除和增加什么的 初始化数据 我们默认总是需要点数据的 privatevoidinitData(){ //默认显示的数据 List 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: //全选——全不选 Map 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: //拿到所有数据 Map //获取到条目数量,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(); } } 好的,这样的话就可以实现了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 高级 控件 ListView 绑定 CheckBox 实现 全选 增加 删除 功能