android 功能模块之通讯模块
来源:互联网 发布:apache 2.2.21 漏洞 编辑:程序博客网 时间:2024/05/16 04:18
Android通讯录开发之实现全选、反选功能
2014年1月15日
实现全选、反选不是什么难的事情,就只是用另外一个数据结构来存储被选中的状态,通过刷新列表来更新列表的显示状态。下面是实现效果:
定义一个散列表来存储选中状态
- // 用于保存勾选的联系人
- private HashMap<Contact, Boolean> map_NumberSelected = new HashMap<Contact, Boolean>();
定义标识表示是否已经全选
- private boolean isAllChecked = false;
在触发事件的位置根据标识来实现全选或反选
- if (isAllChecked) {
- selectAllBtn.setBackgroundResource(R.drawable.select_all_not);
- invertSelection();
- } else {
- selectAllBtn.setBackgroundResource(R.drawable.select_all);
- selectAllContacts();
- }
- public void selectAllContacts() {
- for (int i = 0; i < contactList.size(); i++) {
- Contact contact = contactList.get(i);
- map_NumberSelected.put(contact, true);
- }
- isAllChecked = true;
- refreshList();
- }
反选方法
- public void invertSelection() {
- for (int i = 0; i < contactList.size(); i++) {
- Contact contact = contactList.get(i);
- map_NumberSelected.put(contact, false);
- }
- isAllChecked = false;
- refreshList();
- }
上面用到contactList是你得到的数据源,是一个List<Contact>,它跟map_NumberSelected都通过adapter里面定义的set方法注入到adapter里,所以选中状态发生变化也相当于数据源发生变化,只要调用notifyDataSetChanged()方法就可以更新列表。
下面是自定义adapter的代码,更新选中的状态在getView方法进行
- package com.suntek.mobilemeeting.adapter;
- import java.util.ArrayList;
- import java.util.HashMap;
- import android.content.Context;
- import android.text.TextUtils;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.CheckBox;
- import android.widget.TextView;
- import com.suntek.mobilemeeting.R;
- import com.suntek.mobilemeeting.model.Contact;
- /**
- * 本地联系人适配器
- *
- * @author wwj
- *
- */
- public class LocalContactAdapter extends BaseAdapter {
- private HashMap<Integer, View> lmap = new HashMap<Integer, View>();
- private ArrayList<Contact> contactList;
- private Context context;
- private HashMap<Contact, Boolean> map_NumberSelected = null;
- private String kind;
- public class ViewHolder {
- public TextView contactName;
- public TextView contactMobile;
- public TextView contactEmail;
- public CheckBox checkBox;
- }
- public LocalContactAdapter(Context context, ArrayList<Contact> contactList,
- String kind) {
- this.contactList = contactList;
- this.context = context;
- map_NumberSelected = new HashMap<Contact, Boolean>();
- this.kind = kind;
- }
- @Override
- public int getCount() {
- return contactList.size();
- }
- @Override
- public Object getItem(int position) {
- return contactList.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder;
- if (convertView == null) {
- holder = new ViewHolder();
- LayoutInflater inflater = (LayoutInflater) context
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- convertView = inflater.inflate(R.layout.local_contact_list_item,
- null);
- holder.contactName = (TextView) convertView
- .findViewById(R.id.name_tv);
- holder.contactMobile = (TextView) convertView
- .findViewById(R.id.number_tv);
- holder.contactEmail = (TextView) convertView
- .findViewById(R.id.email_tv);
- holder.checkBox = (CheckBox) convertView
- .findViewById(R.id.local_contact_checkbox);
- // lmap.put(position, convertView);
- convertView.setTag(holder);
- } else {
- // convertView = lmap.get(position);
- holder = (ViewHolder) convertView.getTag();
- }
- Contact contact = contactList.get(position);
- if (contact.getName() == "" || contact.getName() == null) {
- String name = "未知";
- holder.contactName.setText(name);
- } else {
- holder.contactName.setText(contact.getName());
- }
- if (kind != null && kind.equals("email")) {
- if (!TextUtils.isEmpty(contact.getEmail())) {
- holder.contactEmail.setText(contact.getEmail());
- holder.contactMobile.setVisibility(View.GONE);
- }
- } else if (!TextUtils.isEmpty(contact.getNumber())) {
- holder.contactMobile.setText(contact.getNumber());
- holder.contactEmail.setVisibility(View.GONE);
- } else {
- holder.contactMobile.setVisibility(View.GONE);
- holder.contactEmail.setVisibility(View.GONE);
- }
- // 显示是否选中状态
- holder.checkBox.setChecked(map_NumberSelected.get(contact));
- return convertView;
- }
- public void setContactList(ArrayList<Contact> contactList) {
- this.contactList = contactList;
- }
- public void setMap_NumberSelected(
- HashMap<Contact, Boolean> map_NumberSelected) {
- this.map_NumberSelected = map_NumberSelected;
- }
- }
0 0
- android 功能模块之通讯模块
- android 功能模块之通讯模块三
- android 功能模块之通讯模块四
- android 功能模块之通讯模块五
- android功能模块之通讯模块六
- android功能模块之通讯模块七
- android功能模块之通讯功能模块一
- Android蓝牙通讯模块
- sbl1功能模块 -- DAL模块
- android之http通讯,
- Android---功能模块一之颜色选择器自定义Preference 对话框
- Android学习之 换肤功能模块的实现<一>
- Android学习之 换肤功能模块的实现<二>
- Android学习之 换肤功能模块的实现<三>
- 串口通讯控制器实现之----发送模块
- android 获取通讯模块制式类型
- 机房之功能模块
- 通讯模块
- 为什么微软和比尔是值得大家尊敬的
- android功能模块之通讯功能模块一
- adb logcat 重定向到文件
- 教你学用CURL命令 --- 命令行浏览器
- Infragistic 2006 Grid和Toolbar有冲突
- android 功能模块之通讯模块
- android 功能模块之通讯模块三
- LeetCode OJ:Search a 2D Matrix
- Mongodb在Windows下安装及配置
- Boilerplate Detection Using Shallow Text Features论文小笔记
- REST WebService与SOAP WebService的比较
- eclipse debug (调试) 学习心得
- 关于oracle查询视图中的insufficient privileges
- android 功能模块之通讯模块四