从一个菜BBBBB到一个菜鸡JJJJJJJ 也已经做安卓算是大半年了,虽然都是后期更新的一系列东西,但自己还是没有放弃停滞不前!最近开始有时间就上一些东西,大多数都是改写别人的东西,反正对于多数Coder来说解决需求才是第一位的,哈哈。。。也为自己的成长值做一些记录啦。!
亟亟–走向大牛之路开始!!

今天上的是一个ListView和CheckBox相结合的一个界面,资源来源于EOE一个小伙伴的素材。


废话不多,开始上代码!

public class MainActivity extends Activity implements OnClickListener,OnItemClickListener {/*** 返回按钮*/private ViewGroup btnCancle = null;/*** 确定按钮*/private ViewGroup btnAdd = null;/*** 选择所有*/private Button btnSelectAll = null;/*** 清除所有*/private Button btnDelete = null;/*** ListView列表*/private ListView lvListView = null;/*** 适配对象*/private DemoAdapter adpAdapter = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化视图initView();// 初始化控件initData();}/*** 初始化控件*/private void initView() {btnCancle = (ViewGroup) findViewById(R.id.btnCancle);btnCancle.setOnClickListener(this);btnAdd = (ViewGroup) findViewById(R.id.btnAdd);btnAdd.setOnClickListener(this);btnDelete = (Button) findViewById(R.id.btnDelete);btnDelete.setOnClickListener(this);btnSelectAll = (Button) findViewById(R.id.btnSelectAll);btnSelectAll.setOnClickListener(this);lvListView = (ListView) findViewById(R.id.lvListView);lvListView.setOnItemClickListener(this);}/*** 初始化视图*/private void initData() {// 模拟假数据List<DemoBean> demoDatas = new ArrayList<DemoBean>();demoDatas.add(new DemoBean("张三", true));demoDatas.add(new DemoBean("李四", true));demoDatas.add(new DemoBean("王五", false));demoDatas.add(new DemoBean("赵六", true));adpAdapter = new DemoAdapter(this, demoDatas);lvListView.setAdapter(adpAdapter);}/*** 按钮点击事件*/@Overridepublic void onClick(View v) {/** 当点击返回的时候*/if (v == btnCancle) {finish();}/** 当点击增加的时候*/if (v == btnAdd) {adpAdapter.add(new DemoBean("赵六", true));adpAdapter.notifyDataSetChanged();}/** 当点击删除的时候*/if (v == btnDelete) {/** 删除算法最复杂,拿到checkBox选择寄存map*/Map<Integer, Boolean> map = adpAdapter.getCheckMap();// 获取当前的数据数量int count = adpAdapter.getCount();// 进行遍历for (int i = 0; i < count; i++) {// 因为List的特性,删除了2个item,则3变成2,所以这里要进行这样的换算,才能拿到删除后真正的positionint position = i - (count - adpAdapter.getCount());if (map.get(i) != null && map.get(i)) {DemoBean bean = (DemoBean) adpAdapter.getItem(position);if (bean.isCanRemove()) {adpAdapter.getCheckMap().remove(i);adpAdapter.remove(position);} else {map.put(position, false);}}}adpAdapter.notifyDataSetChanged();}/** 当点击全选的时候*/if (v == btnSelectAll) {if (btnSelectAll.getText().toString().trim().equals("全选")) {// 所有项目全部选中adpAdapter.configCheckMap(true);adpAdapter.notifyDataSetChanged();btnSelectAll.setText("全不选");} else {// 所有项目全部不选中adpAdapter.configCheckMap(false);adpAdapter.notifyDataSetChanged();btnSelectAll.setText("全选");}}}/*** 当ListView 子项点击的时候*/@Overridepublic void onItemClick(AdapterView<?> listView, View itemLayout,int position, long id) {if (itemLayout.getTag() instanceof ViewHolder) {ViewHolder holder = (ViewHolder) itemLayout.getTag();// 会自动出发CheckBox的checked事件holder.cbCheck.toggle();}}
}

界面简单4个按钮+1个ListView自己使用时,可以只使用ListView即可。
再附上Bean对象代码

public class DemoBean {private String title;/*** 标识是否可以删除*/private boolean canRemove = true;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public boolean isCanRemove() {return canRemove;}public void setCanRemove(boolean canRemove) {this.canRemove = canRemove;}public DemoBean(String title, boolean canRemove) {this.title = title;this.canRemove = canRemove;}public DemoBean() {}}

再是填充数据的Adapter部分的代码

public class DemoAdapter extends BaseAdapter {/*** 上下文对象*/private Context context = null;/*** 数据集合*/private List<DemoBean> datas = null;/*** CheckBox 是否选择的存储集合,key 是 position , value 是该position是否选中*/private Map<Integer, Boolean> isCheckMap = new HashMap<Integer, Boolean>();public DemoAdapter(Context context, List<DemoBean> datas) {this.datas = datas;this.context = context;// 初始化,默认都没有选中configCheckMap(false);}/*** 首先,默认情况下,所有项目都是没有选中的.这里进行初始化*/public void configCheckMap(boolean bool) {for (int i = 0; i < datas.size(); i++) {isCheckMap.put(i, bool);}}@Overridepublic int getCount() {return datas == null ? 0 : datas.size();}@Overridepublic Object getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewGroup layout = null;/*** 进行ListView 的优化*/if (convertView == null) {layout = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.listview_item_layout, parent, false);} else {layout = (ViewGroup) convertView;}DemoBean bean = datas.get(position);/** 获得该item 是否允许删除*/boolean canRemove = bean.isCanRemove();/** 设置每一个item的文本*/TextView tvTitle = (TextView) layout.findViewById(R.id.tvTitle);tvTitle.setText(bean.getTitle());/** 获得单选按钮*/CheckBox cbCheck = (CheckBox) layout.findViewById(R.id.cbCheckBox);/** 设置单选按钮的选中*/cbCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {/** 将选择项加载到map里面寄存*/isCheckMap.put(position, isChecked);}});if (!canRemove) {// 隐藏单选按钮,因为是不可删除的cbCheck.setVisibility(View.GONE);cbCheck.setChecked(false);} else {cbCheck.setVisibility(View.VISIBLE);if (isCheckMap.get(position) == null) {isCheckMap.put(position, false);}cbCheck.setChecked(isCheckMap.get(position));ViewHolder holder = new ViewHolder();holder.cbCheck = cbCheck;holder.tvTitle = tvTitle;/*** 将数据保存到tag*/layout.setTag(holder);}return layout;}/*** 增加一项的时候*/public void add(DemoBean bean) {this.datas.add(0, bean);// 让所有项目都为不选择configCheckMap(false);}// 移除一个项目的时候public void remove(int position) {this.datas.remove(position);}public Map<Integer, Boolean> getCheckMap() {return this.isCheckMap;}public static class ViewHolder {public TextView tvTitle = null;public CheckBox cbCheck = null;public Object data = null;}public List<DemoBean> getDatas() {return datas;}}

再是布局XML的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayout
        android:layout_width="match_parent"android:layout_height="60dip"android:background="#FF42426F"android:orientation="horizontal" ><RelativeLayout
            android:id="@+id/btnCancle"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/btn_pressed_style"android:clickable="true" ><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:clickable="false"android:text="返回"android:textColor="@android:color/white"android:textSize="16sp" /></RelativeLayout><RelativeLayout
            android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="3" ><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:clickable="false"android:text="ListView+CheckBox"android:textColor="@android:color/white"android:textSize="16sp" /></RelativeLayout><RelativeLayout
            android:id="@+id/btnAdd"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/btn_pressed_style"android:clickable="true" ><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:clickable="false"android:text="增加"android:textColor="@android:color/white"android:textSize="16sp" /></RelativeLayout></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="0px"android:layout_weight="1"android:background="#ECEFF0" ><ListView
            android:id="@+id/lvListView"android:layout_width="match_parent"android:layout_height="match_parent"android:divider="#DADBDA"android:dividerHeight="1px"android:fadingEdge="none" ></ListView></LinearLayout><View
        android:layout_width="match_parent"android:layout_height="1px"android:background="#FF42426F" /><LinearLayout
        android:layout_width="match_parent"android:layout_height="45dp"android:layout_alignParentBottom="true"android:background="#0BA683"android:gravity="center_vertical"android:orientation="horizontal" ><Button
            android:id="@+id/btnDelete"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"android:background="#FF42426F"android:text="删除"android:textColor="#FDFEFE"android:textSize="16sp" /><View
            android:layout_width="1dp"android:layout_height="match_parent"android:background="#FF42426F" /><Button
            android:id="@+id/btnSelectAll"android:layout_width="0px"android:layout_height="match_parent"android:layout_weight="1"android:background="#FF42426F"android:text="全选"android:textColor="#FDFEFE"android:textSize="16sp" /></LinearLayout></LinearLayout>

最后附上,颜色引用资源的代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"><color android:color="#FF42426F" /></item></selector>

OK啦!就是这么简单,谢谢支持多点赞哈!
附上源码下载
提取码:9fcf
欢迎各位喜欢一起进步的朋友+QQ:452270579探讨。

CheckBox和ListView的结合使用相关推荐

  1. CheckBox in ListView

    CheckBox in ListView Listview 在android中是经常用的组件,一些特殊情况下,系统提供的list view item 不够用, 不能满足需求,那么就需要自定义listV ...

  2. 带checkbox的ListView实现(一)——数据与渲染完全分离的传统实现方式

    带checkbox的ListView实现(一)--数据与渲染完全分离的传统实现方式

  3. 【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错

    原文网址:http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址(0分资源):http://download.csdn.net ...

  4. Android 带CheckBox的ListView 实现多选,全选,反选,删除

    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=&qu ...

  5. checkbox的listView 实现多选,全选,反选

    主函數<span style="font-family: Arial, Helvetica, sans-serif;">Activity的设置</span> ...

  6. Android 带checkbox的listView 实现多选,全选,反选

    由于listview的一些特性,刚开始写这种需求的功能的时候都会碰到一些问题,重点就是存储每个checkbox的状态值,在这里分享出了完美解决方法: 布局文件: [html] view plainco ...

  7. 带checkbox的listView 实现多选,全选,反选

    转载自csdn作者:mavenly 链接:http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址(0分资源):http://d ...

  8. Android在listview添加checkbox实现单选多选操作问题

    android根据View的不同状态更换不同的背景 http://www.eoeandroid.com/thread-198029-1-1.html android 模仿朋友网推出的菜单效果[改进版] ...

  9. Android listview与adapter用法

    2019独角兽企业重金招聘Python工程师标准>>> 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListVi ...

  10. listview与adapter用法

    Android listview与adapter用法 listview与adapter用法 博客分类: android 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的 ...

最新文章

  1. lisp填写明细表对话框_用AutoLisp定制acad的对话框
  2. 【编译原理】关于解释器和编译器的讨论
  3. Deno 并不是下一代 Node.js
  4. SQL Server开发者Oracle快速入门
  5. Java-- String源码分析
  6. python爬虫---实现项目(二) 分析Ajax请求抓取数据
  7. 数据库工作笔记002---新建mysql数据库的时候_对字符集和排序规则的选择
  8. Leetcode每日一题:15.3sum(三数之和)
  9. 【Eureka】服务发现调用
  10. mysql--sql中双引号 单引号' 反单引号`的作用和区别
  11. python中ttk_ttk/Python中的按钮图像问题
  12. 易语言解决adb端口占用_Android ADB 端口占用问题解决方案
  13. Python中不为人知的四个特性
  14. Win10系统更新后开机密码错误怎么解决?
  15. denoise_timedomain 时域降噪
  16. KO data-bind=“click: func“函数自动执行问题
  17. Cesium中的相机—旋转矩阵
  18. 【YOLO-Pose】在Windows上的部署与测试(调用摄像头)
  19. 云服务器可以用来做什么?
  20. excel有安全密码,怎么打开

热门文章

  1. 电脑重装系统需要多少钱?
  2. 如何实现:每天收集数据到表格,但只看到当天的数据?
  3. ESP8266-Arduino编程实例-MAX44009环境光传感器驱动
  4. 中国大学MOOC动物遗传学试题及答案
  5. 单层石墨烯工业化量产科研成果及工业化量产基地落地
  6. pytorch中tensor转numpy
  7. Java语言基础Day07(API概述、Scanner、匿名对象、Random、对象数组、ArrayList)
  8. Xshell下载安装(解决评估过期问题)
  9. 2020年前端开发工具大全:50款热门的前端工具汇总
  10. excel 删除重复行数据,列数据