Android中ListView + CheckBox实现单选、多选效果
程序员文章站
2023-12-21 10:45:22
还是先来看看是不是你想要的效果:
不废话,直接上代码,很简单,代码里都有注释
1 单选
public class singleactivity exten...
还是先来看看是不是你想要的效果:
不废话,直接上代码,很简单,代码里都有注释
1 单选
public class singleactivity extends appcompatactivity { private listview listview; private arraylist<string> groups; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_single); listview = (listview) this.findviewbyid(r.id.lvgroup); groups = new arraylist<string>(); groups.add("11"); groups.add("22"); groups.add("33"); groups.add("44"); groups.add("55"); groups.add("66"); groups.add("77"); adapterview.onitemclicklistener listitemclicklistener = new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // 取得viewholder对象,这样就省去了通过层层的findviewbyid去实例化我们需要的cb实例的步骤 singleadapter.viewholder viewholder = (singleadapter.viewholder) view.gettag(); viewholder.cb.toggle();// 把checkbox的选中状态改为当前状态的反,gridview确保是单一选中 } }; singleadapter adapter = new singleadapter(this, groups); listview.setadapter(adapter); listview.setonitemclicklistener(listitemclicklistener); } }
adapter:
public class singleadapter extends baseadapter { private activity activity;//上下文 private arraylist<string> list; private layoutinflater inflater = null;//导入布局 private int temp = -1; public singleadapter(activity context, arraylist<string> list) { this.activity = context; this.list = list; inflater = layoutinflater.from(context); } @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; } //listview每显示一行数据,该函数就执行一次 @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder = null; if (convertview == null) {//当第一次加载listview控件时 convertview为空 convertview = inflater.inflate(r.layout.group_item_view, null);//所以当listview控件没有滑动时都会执行这条语句 holder = new viewholder(); holder.tv = (textview) convertview.findviewbyid(r.id.item_tv); holder.cb = (checkbox) convertview.findviewbyid(r.id.item_cb); convertview.settag(holder);//为view设置标签 } else {//取出holder holder = (viewholder) convertview.gettag(); } //设置list的textview显示 holder.tv.settextcolor(color.white); holder.tv.settext(list.get(position)); // 根据isselected来设置checkbox的选中状况 holder.cb.setid(position);//对checkbox的id进行重新设置为当前的position holder.cb.setoncheckedchangelistener(new compoundbutton.oncheckedchangelistener() { @override public void oncheckedchanged(compoundbutton compoundbutton, boolean ischecked) { if (ischecked) {//实现checkbox的单选功能,同样适用于radiobutton if (temp != -1) { //找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉 checkbox tempcheckbox = (checkbox) activity.findviewbyid(temp); if (tempcheckbox != null) tempcheckbox.setchecked(false); } temp = compoundbutton.getid();//保存当前选中的checkbox的id值 } } }); if (position == temp)//比对position和当前的temp是否一致 holder.cb.setchecked(true); else holder.cb.setchecked(false); return convertview; } public static class viewholder { textview tv; checkbox cb; } }
多选:
public class mulactivity extends appcompatactivity { private listview listview; private arraylist<string> groups; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_mul); listview = (listview) this.findviewbyid(r.id.list); groups = new arraylist<>(); groups.add("11"); groups.add("22"); groups.add("33"); groups.add("44"); groups.add("55"); groups.add("66"); groups.add("77"); adapterview.onitemclicklistener listitemclicklistener = new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // 取得viewholder对象,这样就省去了通过层层的findviewbyid去实例化我们需要的cb实例的步骤 muladapter.viewholder viewholder = (muladapter.viewholder) view.gettag(); viewholder.cb.toggle();// 把checkbox的选中状态改为当前状态的反,gridview确保是单一选中 muladapter.getisselected().put(position, viewholder.cb.ischecked());//将checkbox的选中状况记录下来 } }; muladapter adapter = new muladapter(this, groups); listview.setadapter(adapter); listview.setonitemclicklistener(listitemclicklistener); } }
adapter:
public class muladapter extends baseadapter { private context context;//上下文 private arraylist<string> list; //控制checkbox选中情况 private static hashmap<integer, boolean> isselected; private layoutinflater inflater = null;//导入布局 public muladapter(context context, arraylist<string> list) { this.context = context; this.list = list; inflater = layoutinflater.from(context); isselected = new hashmap<integer, boolean>(); initdata(); } private void initdata() {//初始化isselected的数据 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; } //listview每显示一行数据,该函数就执行一次 @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder = null; if (convertview == null) {//当第一次加载listview控件时 convertview为空 convertview = inflater.inflate(r.layout.group_item_view, null);//所以当listview控件没有滑动时都会执行这条语句 holder = new viewholder(); holder.tv = (textview) convertview.findviewbyid(r.id.item_tv); holder.cb = (checkbox) convertview.findviewbyid(r.id.item_cb); convertview.settag(holder);//为view设置标签 } else {//取出holder holder = (viewholder) convertview.gettag();//the object stored in this view as a tag } //设置list的textview显示 holder.tv.settextcolor(color.white); holder.tv.settext(list.get(position)); // 根据isselected来设置checkbox的选中状况 holder.cb.setchecked(getisselected().get(position)); return convertview; } public static class viewholder { textview tv; checkbox cb; } public static hashmap<integer, boolean> getisselected() { return isselected; } public static void setisselected(hashmap<integer, boolean> isselected) { muladapter.isselected = isselected; } }
以上所述是小编给大家介绍的android中listview + checkbox实现单选、多选效果,希望对大家有所帮助
推荐阅读
-
Android中ListView + CheckBox实现单选、多选效果
-
Android中listview和imageview实现条目单选效果
-
Android中ListView + CheckBox实现单选、多选效果
-
Android ListView实现单选及多选等功能示例
-
Android ListView实现单选及多选等功能示例
-
Android checkbox的listView(多选,全选,反选)具体实现方法
-
Android 中通过ViewDragHelper实现ListView的Item的侧拉划出效果
-
input:checkbox多选框实现单选效果跟radio一样
-
Android checkbox的listView(多选,全选,反选)具体实现方法
-
Android 中通过ViewDragHelper实现ListView的Item的侧拉划出效果