Android中ListView结合CheckBox判断选中项

Android中ListView结合CheckBox获取选中项 今天给大家带来一篇在项目中经常使用到的一种功能。废话不多说,今天愚蠢的博主终于学会了制作gif,就不像原来那样截一大串图片了。(看了这篇文章会让你觉得实现这样的功能变得很简单) 是不是很棒的效果,也能满足大部分实战需求??? 下面看一下项目结构(一个适配器,一个主界面,一个bean类就完美实现了这个功能) 首先我们需要两个布局文件,一个是主文件,一个是item布局文件(其中item我... 阅读详情

Android中ListView结合CheckBox判断选中项

 

本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项。

[1] 程序结构图如下:


其中Person.java是实体类,MainActivity.java是Activity组件类。listitem.xml是自定义的列表每项布局文件。

[2] listitem.xml布局文件源码如下:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:orientation="vertical"  
  5.   android:layout_width="fill_parent"  
  6.   android:layout_height="fill_parent">  
  7.   <LinearLayout  
  8.      android:layout_width="fill_parent"  
  9.      android:layout_height="wrap_content"  
  10.      android:orientation="horizontal"  
  11.      android:descendantFocusability="blocksDescendants">  
  12.       <CheckBox  
  13.          android:id="@+id/list.select"  
  14.          android:layout_width="wrap_content"  
  15.          android:layout_height="wrap_content"/>  
  16.       <TextView  
  17.          android:id="@+id/list.name"  
  18.          android:layout_width="fill_parent"  
  19.          android:layout_height="wrap_content"  
  20.          android:layout_weight="1"  
  21.          android:text="Name"  
  22.          android:layout_gravity="center"  
  23.          android:textSize="20dp"  
  24.          android:layout_marginLeft="10dp"/>  
  25.       <TextView  
  26.          android:id="@+id/list.address"  
  27.          android:layout_width="fill_parent"  
  28.          android:layout_height="wrap_content"  
  29.          android:layout_weight="1"  
  30.          android:text="Address"  
  31.          android:layout_gravity="center"  
  32.          android:textSize="20dp"/>  
  33.   </LinearLayout>  
  34. </LinearLayout>  

[3] main.xml布局文件源码如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     <Button  
  7.        android:id="@+id/show"  
  8.        android:layout_width="fill_parent"  
  9.        android:layout_height="wrap_content"  
  10.        android:text="Show"/>  
  11.     <ListView  
  12.        android:id="@+id/lvperson"  
  13.        android:layout_width="fill_parent"  
  14.        android:layout_height="fill_parent"/>  
  15. </LinearLayout>  

[4] Person.java实体类源码如下:
  1. package com.andyidea.bean;  
  2.   
  3. public class Person {  
  4.   
  5.     private String name;  
  6.     private String address;  
  7.       
  8.     public String getName() {  
  9.         return name;  
  10.     }  
  11.     public void setName(String name) {  
  12.         this.name = name;  
  13.     }  
  14.     public String getAddress() {  
  15.         return address;  
  16.     }  
  17.     public void setAddress(String address) {  
  18.         this.address = address;  
  19.     }  
  20.       
  21. }  

[5] MainActivity.java类源码如下:
  1. package com.andyidea.listview;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6.   
  7. import com.andyidea.bean.Person;  
  8.   
  9. import android.app.Activity;  
  10. import android.app.AlertDialog;  
  11. import android.content.Context;  
  12. import android.os.Bundle;  
  13. import android.util.Log;  
  14. import android.view.LayoutInflater;  
  15. import android.view.View;  
  16. import android.view.ViewGroup;  
  17. import android.widget.BaseAdapter;  
  18. import android.widget.Button;  
  19. import android.widget.CheckBox;  
  20. import android.widget.ListView;  
  21. import android.widget.TextView;  
  22.   
  23. public class MainActivity extends Activity {  
  24.       
  25.     Button show;  
  26.     ListView lv;  
  27.     List<Person> persons = new ArrayList<Person>();  
  28.     Context mContext;  
  29.     MyListAdapter adapter;  
  30.     List<Integer> listItemID = new ArrayList<Integer>();  
  31.       
  32.     /** Called when the activity is first created. */  
  33.     @Override  
  34.     public void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.main);  
  37.         mContext = getApplicationContext();  
  38.         show = (Button)findViewById(R.id.show);  
  39.         lv = (ListView)findViewById(R.id.lvperson);  
  40.           
  41.         initPersonData();  
  42.         adapter = new MyListAdapter(persons);  
  43.         lv.setAdapter(adapter);  
  44.           
  45.         show.setOnClickListener(new View.OnClickListener() {  
  46.   
  47.             @Override  
  48.             public void onClick(View v) {  
  49.                   
  50.                 listItemID.clear();  
  51.                 for(int i=0;i<adapter.mChecked.size();i++){  
  52.                     if(adapter.mChecked.get(i)){  
  53.                         listItemID.add(i);  
  54.                     }  
  55.                 }  
  56.                   
  57.                 if(listItemID.size()==0){  
  58.                     AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);  
  59.                     builder1.setMessage("没有选中任何记录");  
  60.                     builder1.show();  
  61.                 }else{  
  62.                     StringBuilder sb = new StringBuilder();  
  63.                       
  64.                     for(int i=0;i<listItemID.size();i++){  
  65.                         sb.append("ItemID="+listItemID.get(i)+" . ");  
  66.                     }  
  67.                     AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);  
  68.                     builder2.setMessage(sb.toString());  
  69.                     builder2.show();  
  70.                 }  
  71.             }  
  72.         });  
  73.     }  
  74.       
  75.     /**  
  76.      * 模拟数据  
  77.      */  
  78.     private void initPersonData(){  
  79.         Person mPerson;  
  80.         for(int i=1;i<=12;i++){  
  81.             mPerson = new Person();  
  82.             mPerson.setName("Andy"+i);  
  83.             mPerson.setAddress("GuangZhou"+i);  
  84.             persons.add(mPerson);  
  85.         }  
  86.     }  
  87.       
  88.     //自定义ListView适配器  
  89.     class MyListAdapter extends BaseAdapter{  
  90.         List<Boolean> mChecked;  
  91.         List<Person> listPerson;  
  92.         HashMap<Integer,View> map = new HashMap<Integer,View>();   
  93.           
  94.         public MyListAdapter(List<Person> list){  
  95.             listPerson = new ArrayList<Person>();  
  96.             listlistPerson = list;  
  97.               
  98.             mChecked = new ArrayList<Boolean>();  
  99.             for(int i=0;i<list.size();i++){  
  100.                 mChecked.add(false);  
  101.             }  
  102.         }  
  103.   
  104.         @Override  
  105.         public int getCount() {  
  106.             return listPerson.size();  
  107.         }  
  108.   
  109.         @Override  
  110.         public Object getItem(int position) {  
  111.             return listPerson.get(position);  
  112.         }  
  113.   
  114.         @Override  
  115.         public long getItemId(int position) {  
  116.             return position;  
  117.         }  
  118.   
  119.         @Override  
  120.         public View getView(int position, View convertView, ViewGroup parent) {  
  121.             View view;  
  122.             ViewHolder holder = null;  
  123.               
  124.             if (map.get(position) == null) {  
  125.                 Log.e("MainActivity","position1 = "+position);  
  126.                   
  127.                 LayoutInflater mInflater = (LayoutInflater) mContext  
  128.                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  129.                 view = mInflater.inflate(R.layout.listitem, null);  
  130.                 holder = new ViewHolder();  
  131.                 holder.selected = (CheckBox)view.findViewById(R.id.list_select);  
  132.                 holder.name = (TextView)view.findViewById(R.id.list_name);  
  133.                 holder.address = (TextView)view.findViewById(R.id.list_address);  
  134.                 final int p = position;  
  135.                 map.put(position, view);  
  136.                 holder.selected.setOnClickListener(new View.OnClickListener() {  
  137.                       
  138.                     @Override  
  139.                     public void onClick(View v) {  
  140.                         CheckBox cb = (CheckBox)v;  
  141.                         mChecked.set(p, cb.isChecked());  
  142.                     }  
  143.                 });  
  144.                 view.setTag(holder);  
  145.             }else{  
  146.                 Log.e("MainActivity","position2 = "+position);  
  147.                 view = map.get(position);  
  148.                 holder = (ViewHolder)view.getTag();  
  149.             }  
  150.               
  151.             holder.selected.setChecked(mChecked.get(position));  
  152.             holder.name.setText(listPerson.get(position).getName());  
  153.             holder.address.setText(listPerson.get(position).getAddress());  
  154.               
  155.             return view;  
  156.         }  
  157.           
  158.     }  
  159.       
  160.     static class ViewHolder{  
  161.         CheckBox selected;  
  162.         TextView name;  
  163.         TextView address;  
  164.     }  
  165. }  

[6] 程序运行后的结果如下:

文章出处:http://blog.youkuaiyun.com/cjjky/article/details/6967219


手把手教你用THS4551搭建全差分放大器电路(附ADC驱动实战) 本文详细介绍了如何使用TI的THS4551全差分放大器搭建高性能ADC驱动电路,涵盖芯片选型、电路配置、PCB布局及实战调试等关键环节。THS4551凭借其优异的共模抑制比和宽电源电压范围,成为驱动16位及以上精度ADC的理想选择,特别适合工业应用场景。 阅读详情

相关推荐

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

( werks = '1001' lgort = 'A004' lgobe = '组装-成品组装' )( werks = '1002' lgort = 'C006' lgobe = '组装-二车间' )( werks = '1002' lgort = 'C007' lgobe = '组装-二车间' )( werks = '1001' lgort = 'A007' lgobe = '组装-MS' )( werks = '1001' lgort = 'A008' lgobe = '组装-GW' )

dingqing86的专栏 1194

android获取listview点中的控件,关于安卓listview获得item中的控件问题

我的程序里面是用到了安卓的listview来显示数据,主要用SimpleAdapter适配器,然而怎么获取listview的item中的控件呢?就如说我这里做了一个显示地址管理。而让我苦恼的是要怎么获取里面的删除控件呢?一开始我想直接取出来然后给它设置监听器,运行奔溃了,后来想了想,也是,你的listview每个item的布局都是一样的,我怎么知道你是点击哪个的。所这个还是要在listview被点...

weixin_42299873的博客 1445

Oracle迁移至华为GaussDB SQL语法和存储过程转换

在将Oracle数据库迁移至GaussDB时,SQL语法和存储过程的转换是确保应用程序正常运行和数据完整性的关键环节。由于两者在数据类型、函数、过程语言等方面存在差异,必须系统化地进行转换和测试。正则表达式脚本:批量替换常见的语法差异。SQL解析工具:解析SQL脚本,生成GaussDB兼容的语法。代码审查工具:自动检查转换后的代码,确保语法和逻辑正确。将Oracle迁移至GaussDB涉及到SQL语法和存储过程的全面转换。通过系统化的转换步骤、使用合适的工具并结合手动调整,可以确保迁移过程的顺利进行。

weixin_38428874的博客 2399

[Android studio] 第16节 ListView控件

通过使用适配器,您可以自定义更复杂的列表项布局,以及处理 ListView 中的点击事件和其他交互操作。ListView 还支持滚动、分页加载和数据更新等功能,您可以根据需求选择适合的方法和组件来实现所需的列表展示效果。在代码中,您需要通过适配器(Adapter)来提供数据给 ListView,并定义每个列表项的布局。ListView 是 Android 平台上的一个常用控件,用于在屏幕上显示可滚动的列表。作为每个列表项的布局样式。方法将适配器设置给 ListView。适配器于下一章节详解。

AA2534193348的博客 1249

手把手教你用稚晖君Dummy机械臂实现位置控制:代码解析与调试技巧

本文深入解析了稚晖君Dummy机械臂实现高精度位置控制的代码核心与调试技巧。从CAN总线通信协议、三种位置控制模式(基础、带时间约束、带速度限制)的解析入手,详细阐述了命令帧结构、状态同步机制及单位换算。文章还提供了从通信测试、PID参数整定到异常处理、性能优化的完整实战调试流程,并探讨了多轴协调、自适应控制等进阶话题,旨在帮助开发者快速掌握该机械臂的精准运动控制。

weixin_29164091的博客 416

使用单调栈求解最大矩形面积问题的C++实现

通过本文的介绍,我们详细讲解了如何使用单调栈求解砖墙中最大矩形面积的问题,并提供了完整的C++代码实现。希望通过本文的学习,你能掌握单调栈的基本概念及其在实际问题中的应用。如果你有任何疑问或建议,欢迎在评论区留言交流。

m0_57781768的博客 816

Android简单列表控件ListView详细解析

针对性的介绍了listview的使用,但缺少部分的原理解释,大家可以移步参考其他的技术文档来深入了解该组件及其使用

delete_you的博客 3225

逆变器专题(6)-正负序分离(二阶广义积分器DSOGI)

相应仿真原件请移步资源下载DSOGI作为一种常用的正负序分离方法,其可以在电压三相不平衡的状态下实现较为精准的锁相环。

cyc19980105的博客 8808

android已进入就让某个控件选中,获取Android控件Listview中被选中的某一列的值

废话不多说,直接上代码解释。主要解决如何获取ListView中被选中Item中某一列的值。1.public void onItemClick(AdapterView> arg0, View arg1, int arg2,long arg3)//listview的监听函数的实现函数注意上面这句话,其中函数中的第一个参数和第三个参数是解决问题的关键。第一个参数代表listview做数据适配的ad...

weixin_42623010的博客 519

Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建

本文介绍Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建方法。

无线通信实验室 1万+

机器翻译的评价标准:BLEU、ROUGE等指标说明及代码实现

机器翻译领域常用的自动评价指标主要包括BLEU、ROUGE、METEOR和COMET四大类。BLEU基于n-gram精确率和短句惩罚,ROUGE关注召回率,METEOR结合精确率和召回率并考虑同义词,COMET则利用预训练模型计算语义相似度。这些指标各有特点:BLEU适用于机器翻译,ROUGE对长句友好,METEOR更接近人工评分,COMET无需参考译文。代码实现上,sacrebleu、rouge-score等库提供了便捷的计算方式。新兴趋势包括基于BERT等模型的语义评估和大语言模型评估器,但传统指标仍占

数据知道的博客 9421
上一篇: The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder i
下一篇: 使用MyEclipse6.0 工具Create a new connection driver (SQL SERVER 2005)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值