编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China 头条阅读 学淘股 China Travel
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> Android开发 -> 安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选) -> 正文阅读

[Android开发]安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)

ListView 自身提供了 CheckBox 只需要添加一行代码
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
但是这种实现想要自己控制操作起来局限很多。所以我选择了自己添加CheckBox的方式。可以支持列表项的全选,删除,并保持数据的对应关系不会乱。
列表中的CheckBox选中状态与一个Map进行绑定,利用 adapter.notifyDataSetChanged();来更新界面。
效果如下:


下面直接看代码把。
main.xml
Java代码  

<?xml version="1.0" encoding="utf-8"?>   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:orientation="vertical"       android:layout_width="fill_parent"       android:layout_height="fill_parent"       android:background="#C9F1FF">           <ListView               android:id="@id/android:list"               android:layout_height="wrap_content"               android:layout_width="fill_parent"               android:fadingEdge="none"               android:cacheColorHint="#00000000"/>           <RelativeLayout                android:layout_width="fill_parent"                android:layout_height="40.0dip"                android:layout_alignParentBottom="true">           <CheckBox android:id="@+id/all_check_btn"                android:layout_width="40.0dip"                android:background="@drawable/bottom_back_bg"               android:layout_height="40.0dip"                 android:layout_alignParentLeft="true"/>       </RelativeLayout>   </RelativeLayout>  
item.xml
Java代码  

<?xml version="1.0" encoding="utf-8"?>       <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"             android:layout_width="fill_parent" android:layout_height="wrap_content"             android:layout_marginRight="3.0dip" android:layout_weight="1.0"           android:orientation="horizontal" android:descendantFocusability="blocksDescendants">            <CheckBox android:id="@+id/isCheakBox" android:layout_width="wrap_content" android:layout_height="wrap_content"                android:layout_alignParentLeft="true" />           <!-- 日报图片 -->             <ImageView android:id="@+id/dailyPic" android:contentDescription="dailyPic"               android:layout_width="wrap_content" android:layout_height="wrap_content"                 android:layout_marginTop="3.0dip" android:src="@drawable/reports"                 android:layout_toRightOf="@id/isCheakBox" android:layout_centerVertical="true"/>            <!--附件名称 -->             <TextView               android:id="@+id/dailyName"               android:layout_width="wrap_content"               android:layout_height="wrap_content"               android:layout_toRightOf="@id/dailyPic"               android:text="日报名称" android:layout_centerVertical="true"               android:textColor="#000000"               android:textSize="12.0sp" />            <ImageButton android:id="@+id/deleteAttachment"                 android:layout_width="wrap_content" android:layout_height="wrap_content"                 android:layout_marginTop="3.0dip" android:background="@drawable/delete"                 android:layout_centerVertical="true" android:focusable="false"                android:layout_alignParentRight="true" android:layout_marginRight="20dp"/>            <!--附件名称 -->         </RelativeLayout>    
  Activity代码
Java代码  

public class ListViewCheckBoxActivity extends ListActivity {       private static final String TAG = "ListViewCheckBoxActivity";              private List<Item> itemList;       private DraftDailyAdapter adapter;       private Map<Integer, Boolean> isCheckedMap;       private CheckBox allCheckBox;       @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.main);           allCheckBox = (CheckBox)findViewById(R.id.all_check_btn);           itemList = new ArrayList<Item>();           isCheckedMap = new HashMap<Integer, Boolean>();           //初始化数据           for(int i=0;i<8;i++){               Item item = new Item();               item.id=i;               item.name = "第"+i+"篇日报";               itemList.add(item);               isCheckedMap.put(i,false);           }                      adapter = new DraftDailyAdapter(this,itemList);           setListAdapter(adapter);           allCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){                @Override                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                    Set<Integer> set = isCheckedMap.keySet();                   Iterator<Integer> iterator = set.iterator();                     if(isChecked){                        while(iterator.hasNext()){                              Integer keyId = iterator.next();                              isCheckedMap.put(keyId,true);                       }                      }else{                        while(iterator.hasNext()){                              Integer keyId = iterator.next();                             isCheckedMap.put(keyId,false);                       }                     }                   adapter.notifyDataSetChanged();               }            });        }                  class DraftDailyAdapter extends BaseAdapter {              public List<Item> list;           private Context context;           LayoutInflater inflater;              public DraftDailyAdapter(Context context, List<Item> list) {               super();               this.list = list;               this.context = context;               inflater = LayoutInflater.from(this.context);           }           @Override           public int getCount() {               return list == null ? 0 : list.size();           }           @Override           public Object getItem(int location) {               return list.get(location);           }           @Override           public long getItemId(int position) {               return position;           }           @Override             public View getView(int position, View convertView, ViewGroup parent) {                 ViewHolder holder = null;                   Item item = list.get(position);               //Item的位置               final int listPosition = position;               //这个记录item的id用于操作isCheckedMap来更新CheckBox的状态               final int id = item.id;               if(convertView == null){                   holder = new ViewHolder();                   convertView = inflater.inflate(R.layout.item, null);                     holder.tvName = (TextView)convertView.findViewById(R.id.dailyName);                     holder.deleteButton = (ImageButton)convertView.findViewById(R.id.deleteAttachment);                   holder.cBox = (CheckBox)convertView.findViewById(R.id.isCheakBox);                   convertView.setTag(holder);               }else{                   holder = (ViewHolder) convertView.getTag();               }               Log.d(TAG, "id="+id);               holder.cBox.setChecked(isCheckedMap.get(id));               holder.tvName.setText(item.name);                holder.deleteButton.setOnClickListener(new OnClickListener() {                   @Override                   public void onClick(View paramView) {                       //Log.d(TAG, "deletePosition="+listPosition+"");                       //删除list中的数据                       list.remove(listPosition);                       //删除Map中对应选中状态数据                       isCheckedMap.remove(id);                       //通知列表数据修改                       adapter.notifyDataSetChanged();                   }               });               holder.cBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){                    @Override                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                        if(isChecked){                            isCheckedMap.put(id,true);                       }else{                            isCheckedMap.put(id,false);                       }                   }                });                return convertView;             }           public final class ViewHolder {                   public TextView tvName;                   public ImageButton deleteButton;                   public CheckBox cBox;               }           }          class Item {           private Integer id;           private String name;       }          }  
资源文件见附件源代码。
ListViewCheckBox.rar (
  Android开发 最新文章
Android动态权限申请
使用Kotlin,抛弃findViewById
.net程序员做的第一个安卓APP
Android学习笔记
计算机毕业设计源码分享
计算机毕业设计源码分享
ELF Format 笔记(一)—— 概述
Fragment学习笔记
Android复制Assets目录下的文件到指定目录
Android网络请求框架AsyncHttpClient实例详
上一篇文章      下一篇文章      查看所有文章
加:2015-03-30 07:50:33  更:2017-05-16 20:14:01 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 头条阅读 学淘股 China Travel 日历 万年历 2020年7日历
2020-7-6 17:04:44
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识