热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义listView多选功能

最近在做一个项目的一个功能就是对售后人员进行增加和删除,今天我先讲删除的功能:1.当你点击删除按钮会出现一个“全选”的checkbox键2.当你点击它listvi

最近在做一个项目的一个功能就是对售后人员进行增加和删除,今天我先讲删除的功能:

1.当你点击删除按钮会出现一个“全选”的checkbox键

2.当你点击它listview里面的item就会全被选中了。

3.如果listview其中一个item取消,checkbox键也会联动取消。


.xml文件


.java文件

public class CustSerActivity extends BaseActivity implements View.OnClickListener {private ListView lv;private TextView sum;private List list;private List listCustser;private CustSerAdapter adapter;public boolean mIsFromItem &#61; false;//监听来源private CustSerCheckAdapter checkAdapter;//带判断的适配器private boolean isDel;private CheckBox mMainCkb;private Button delComplete;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);baseapp.addActivity(this);setContentView(R.layout.activity_cust_ser);initView();}private void initView() {mMainCkb &#61; (CheckBox) findViewById(R.id.ckb_main);mMainCkb.setOnCheckedChangeListener(checkChange);delComplete &#61; (Button) findViewById(R.id.custser_delcomplete);delComplete.setOnClickListener(this);findViewById(R.id.custser).setOnClickListener(this);findViewById(R.id.custser_del).setOnClickListener(this);findViewById(R.id.custser_add).setOnClickListener(this);sum &#61; (TextView) findViewById(R.id.custser_sum);lv &#61; (ListView) findViewById(R.id.custser_lv);}&#64;Overrideprotected void onResume() {super.onResume();initData();}/*** 初始化数据*/private void initData() {/*向数据库读取数据*/String username &#61; spUser.getString(SpKey.UserName);List custser &#61; managerDb.getCustser(username);list &#61; new ArrayList<>();listCustser &#61; new ArrayList<>();for (CustserBean custserBean : custser) {list.add(custserBean.getName());custserBean.setIscheck(false);listCustser.add(custserBean);}sum.setText(list.size() &#43; "");/*初始化两个适配器*/adapter &#61; new CustSerAdapter(this, list);checkAdapter &#61; new CustSerCheckAdapter(listCustser, this, allCheckListener);if (isDel) {lv.setAdapter(checkAdapter);} else {lv.setAdapter(adapter);}}/*初始化listView*/private void initLv(ListView lv, List list) {lv.setAdapter(adapter);adapter.setData(list);adapter.notifyDataSetChanged();}/*初始化带check的listView*/private void initlvCheck(ListView lv, List list) {lv.setAdapter(checkAdapter);checkAdapter.setData(list);checkAdapter.notifyDataSetChanged();}/*全选的回调监听*/AllCheckListener allCheckListener &#61; new AllCheckListener() {&#64;Overridepublic void onCheckedChanged(boolean b) {Logs.v("110 " &#43; b &#43; " " &#43; mMainCkb.isChecked());//根据不同的情况对maincheckbox做处理if (!b && !mMainCkb.isChecked()) {return;} else if (!b && mMainCkb.isChecked()) {mIsFromItem &#61; true;mMainCkb.setChecked(false);} else if (b && !mMainCkb.isChecked()) {//mIsFromItem &#61; true;mMainCkb.setChecked(true);} else {return;}}};/*mMainCkb的选择监听*/CompoundButton.OnCheckedChangeListener checkChange &#61; new CompoundButton.OnCheckedChangeListener() {&#64;Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {//当监听来源为点击item改变maincbk状态时不在监听改变&#xff0c;防止死循环Logs.d("mIsFromItem状态&#xff1a;" &#43; mIsFromItem);if (mIsFromItem) {mIsFromItem &#61; false;return;}//改变数据for (CustserBean model : listCustser) {model.setIscheck(isChecked);}//刷新listviewcheckAdapter.notifyDataSetChanged();}};&#64;Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.custser:baseapp.finishActivity();break;case R.id.custser_del:isDel();break;case R.id.custser_add:SmallUtil.getActivity(CustSerActivity.this, CustSerNewActivity.class);break;case R.id.custser_delcomplete:delComplete();break;}}/*删除后的处理*/private void delComplete() {String username &#61; spUser.getString(SpKey.UserName);for (CustserBean custserBean : listCustser) {Logs.d("164 " &#43; custserBean.ischeck());if (custserBean.ischeck()) {managerDb.custserClean(username, custserBean.getName());}}mMainCkb.setChecked(false);initData();}/*判断是否点击了删除按钮*/private void isDel() {if (isDel) {delComplete.setVisibility(View.GONE);mMainCkb.setVisibility(View.GONE);isDel &#61; false;initLv(lv, list);} else {delComplete.setVisibility(View.VISIBLE);mMainCkb.setVisibility(View.VISIBLE);isDel &#61; true;initlvCheck(lv, listCustser);}}
}


CustSerCheckAdapter

/*** Description: 有复选框售后人员的适配器* AUTHOR: Champion Dragon* created at 2018/3/22**/public class CustSerCheckAdapter extends BaseAdapter {private List list;private Context context;private AllCheckListener allCheckListener;public CustSerCheckAdapter(List list, Context context, AllCheckListener allCheckListener) {this.list &#61; list;this.context &#61; context;this.allCheckListener &#61; allCheckListener;}&#64;Overridepublic int getCount() {return list.size();}&#64;Overridepublic Object getItem(int position) {return list.get(position);}&#64;Overridepublic long getItemId(int position) {return position;}&#64;Overridepublic View getView(final int position, View convertView, ViewGroup parent) {if (convertView &#61;&#61; null) {convertView &#61; LayoutInflater.from(context).inflate(R.layout.item_custsercheck, null);}TextView name &#61; ViewHolderUtil.get(convertView, R.id.custser_name);final CheckBox checkBox &#61; ViewHolderUtil.get(convertView, R.id.custser_check);CustserBean custserBean &#61; list.get(position);checkBox.setChecked(custserBean.ischeck());name.setText(custserBean.getName());View.OnClickListener listener &#61; new View.OnClickListener() {&#64;Overridepublic void onClick(View v) {if (checkBox.isChecked()) {checkBox.setChecked(false);list.get(position).setIscheck(false);Logs.w(list.get(position).ischeck() &#43; " 是否设置勾选68");} else {checkBox.setChecked(true);list.get(position).setIscheck(true);Logs.w(list.get(position).ischeck() &#43; " 是否设置勾选72");}//监听每个item&#xff0c;若所有checkbox都为选中状态则更改main的全选checkbox状态for (CustserBean custserBean1 : list) {if (!custserBean1.ischeck()) {allCheckListener.onCheckedChanged(false);return;}}allCheckListener.onCheckedChanged(true);}};name.setOnClickListener(listener);
// convertView.setOnClickListener(listener);
// checkBox.setOnClickListener(listener);return convertView;}/*** 添加刷新的数据*/public void setData(List scanResults) {list &#61; scanResults;}}


AllCheckListener

/*** Description: 对item导致maincheckbox改变做监听* AUTHOR: Champion Dragon* created at 2018/3/22**/public interface AllCheckListener {void onCheckedChanged(boolean b);
}



效果图&#xff1a;












推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
author-avatar
睡眠女孩在外面的世界_988
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有