android 功能模块之通讯模块

2023-10-26


Android通讯录开发之实现全选、反选功能
2014年1月15日 
实现全选、反选不是什么难的事情,就只是用另外一个数据结构来存储被选中的状态,通过刷新列表来更新列表的显示状态。下面是实现效果:
定义一个散列表来存储选中状态
  1. // 用于保存勾选的联系人  
  2.     private HashMap<Contact, Boolean> map_NumberSelected = new HashMap<Contact, Boolean>();  
// 用于保存勾选的联系人
	private HashMap<Contact, Boolean> map_NumberSelected = new HashMap<Contact, Boolean>();

定义标识表示是否已经全选
  1. private boolean isAllChecked = false;  
private boolean isAllChecked = false;

在触发事件的位置根据标识来实现全选或反选
  1. if (isAllChecked) {  
  2.                 selectAllBtn.setBackgroundResource(R.drawable.select_all_not);  
  3.                 invertSelection();  
  4.             } else {  
  5.                 selectAllBtn.setBackgroundResource(R.drawable.select_all);  
  6.                 selectAllContacts();  
  7.             }  
if (isAllChecked) {
				selectAllBtn.setBackgroundResource(R.drawable.select_all_not);
				invertSelection();
			} else {
				selectAllBtn.setBackgroundResource(R.drawable.select_all);
				selectAllContacts();
			}
全选方法
  1. public void selectAllContacts() {  
  2.         for (int i = 0; i < contactList.size(); i++) {  
  3.             Contact contact = contactList.get(i);  
  4.             map_NumberSelected.put(contact, true);  
  5.         }  
  6.         isAllChecked = true;  
  7.         refreshList();  
  8.     }  
public void selectAllContacts() {
		for (int i = 0; i < contactList.size(); i++) {
			Contact contact = contactList.get(i);
			map_NumberSelected.put(contact, true);
		}
		isAllChecked = true;
		refreshList();
	}

反选方法
  1. public void invertSelection() {  
  2.         for (int i = 0; i < contactList.size(); i++) {  
  3.             Contact contact = contactList.get(i);  
  4.             map_NumberSelected.put(contact, false);  
  5.         }  
  6.         isAllChecked = false;  
  7.         refreshList();  
  8.     }  
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方法进行
  1. package com.suntek.mobilemeeting.adapter;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import android.content.Context;  
  7. import android.text.TextUtils;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.CheckBox;  
  13. import android.widget.TextView;  
  14.   
  15. import com.suntek.mobilemeeting.R;  
  16. import com.suntek.mobilemeeting.model.Contact;  
  17.   
  18. /** 
  19.  * 本地联系人适配器 
  20.  *  
  21.  * @author wwj 
  22.  *  
  23.  */  
  24. public class LocalContactAdapter extends BaseAdapter {  
  25.   
  26.     private HashMap<Integer, View> lmap = new HashMap<Integer, View>();  
  27.     private ArrayList<Contact> contactList;  
  28.     private Context context;  
  29.     private HashMap<Contact, Boolean> map_NumberSelected = null;  
  30.     private String kind;  
  31.   
  32.     public class ViewHolder {  
  33.         public TextView contactName;  
  34.         public TextView contactMobile;  
  35.         public TextView contactEmail;  
  36.         public CheckBox checkBox;  
  37.     }  
  38.   
  39.     public LocalContactAdapter(Context context, ArrayList<Contact> contactList,  
  40.             String kind) {  
  41.         this.contactList = contactList;  
  42.         this.context = context;  
  43.         map_NumberSelected = new HashMap<Contact, Boolean>();  
  44.         this.kind = kind;  
  45.     }  
  46.   
  47.     @Override  
  48.     public int getCount() {  
  49.         return contactList.size();  
  50.     }  
  51.   
  52.     @Override  
  53.     public Object getItem(int position) {  
  54.         return contactList.get(position);  
  55.     }  
  56.   
  57.     @Override  
  58.     public long getItemId(int position) {  
  59.         return position;  
  60.     }  
  61.   
  62.     @Override  
  63.     public View getView(int position, View convertView, ViewGroup parent) {  
  64.         ViewHolder holder;  
  65.         if (convertView == null) {  
  66.   
  67.             holder = new ViewHolder();  
  68.             LayoutInflater inflater = (LayoutInflater) context  
  69.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  70.             convertView = inflater.inflate(R.layout.local_contact_list_item,  
  71.                     null);  
  72.             holder.contactName = (TextView) convertView  
  73.                     .findViewById(R.id.name_tv);  
  74.             holder.contactMobile = (TextView) convertView  
  75.                     .findViewById(R.id.number_tv);  
  76.             holder.contactEmail = (TextView) convertView  
  77.                     .findViewById(R.id.email_tv);  
  78.             holder.checkBox = (CheckBox) convertView  
  79.                     .findViewById(R.id.local_contact_checkbox);  
  80.             // lmap.put(position, convertView);  
  81.             convertView.setTag(holder);  
  82.         } else {  
  83.             // convertView = lmap.get(position);  
  84.             holder = (ViewHolder) convertView.getTag();  
  85.         }  
  86.   
  87.         Contact contact = contactList.get(position);  
  88.         if (contact.getName() == "" || contact.getName() == null) {  
  89.             String name = "未知";  
  90.             holder.contactName.setText(name);  
  91.         } else {  
  92.             holder.contactName.setText(contact.getName());  
  93.         }  
  94.   
  95.         if (kind != null && kind.equals("email")) {  
  96.             if (!TextUtils.isEmpty(contact.getEmail())) {  
  97.                 holder.contactEmail.setText(contact.getEmail());  
  98.                 holder.contactMobile.setVisibility(View.GONE);  
  99.             }  
  100.         } else if (!TextUtils.isEmpty(contact.getNumber())) {  
  101.             holder.contactMobile.setText(contact.getNumber());  
  102.             holder.contactEmail.setVisibility(View.GONE);  
  103.         } else {  
  104.             holder.contactMobile.setVisibility(View.GONE);  
  105.             holder.contactEmail.setVisibility(View.GONE);  
  106.         }  
  107.         // 显示是否选中状态  
  108.         holder.checkBox.setChecked(map_NumberSelected.get(contact));  
  109.   
  110.         return convertView;  
  111.     }  
  112.   
  113.     public void setContactList(ArrayList<Contact> contactList) {  
  114.         this.contactList = contactList;  
  115.     }  
  116.   
  117.     public void setMap_NumberSelected(  
  118.             HashMap<Contact, Boolean> map_NumberSelected) {  
  119.         this.map_NumberSelected = map_NumberSelected;  
  120.     }  
  121.   
  122. }  
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;
	}

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 功能模块之通讯模块 的相关文章

  • 对角线遍历

    param number matrix return number var findDiagonalOrder function matrix if matrix null matrix length 0 return let m matr
  • “40道高频区块链面试题”——我的一些看法

    最近看到了一篇文章如下 超强攻略 40道高频区块链面试题大放送 年底跳槽看过来 地址我也贴出来吧 https mp weixin qq com s 3Fa2XG4R11QDfMSAaBCngw 哦 CSDN的地址也出来了 https blo
  • vscode好用的前端插件和快捷键

    用到好用的vscode插件 总结一下 文章目录 一 常用主题 1 Material Theme主题 2 Community Material Theme主题 3 vscode icons 二 基础插件 1 Code Spell checke
  • java生成二维码图片(有logo),并在图片下方附文字

    logo配置类 Created by Amber Wang on 2017 11 27 17 25 import java awt public class LogoConfig logo默认边框颜色 public static final
  • 【数据结构】 实现 堆 结构 ---超细致解析

    目录 二叉树的性质 二叉树的存储结构 顺序存储 链式存储 堆的概念和性质 堆的实现 堆的初始化 堆的插入 向上调整函数 堆的删除 向下调整函数 向上建堆 向下建堆 TopK问题 二叉树的性质 在我们实现堆之前我们要知道堆的实现是依靠的是二叉
  • C# Thread启动线程时传递参数

    目录 1 不带参数 使用ThreadStart 2 带一个参数 使用ParameterizedThreadStart 3 带多个参数 1 不带参数 使用ThreadStart private void funcName public voi
  • Java反射学习记录

    一 反射概述 反射允许程序在运行中获取类的内部信息 例如构造器 成员变量 成员方法等 类加载之后 在堆中生成一个Class类的对象 一个类只有一个Class对象 这个对象包含类的完整结构信息 二 入门案例 通过配置文件中的内容生成指定类的对
  • 创建完整团队的艺术:敏捷如何改变我们与客户的工作方式

    来源 Ackarlix博客 http www ackarlix com 十年前 敏捷宣言 的作者们希望我们重新思考 我们作为程序员与客户协作的方式 我和我的博士学位顾问Robert Biddle以及James Noble都深受启发 充满希望
  • python --- multiprocessing实现多进程

    文章目录 进程理论知识 multiprocessing模块实现多进程 进程池 进程理论知识 进程就是正在运行的程序 是计算机进行资源分配的最小单位 各个进程都有独立的数据 相互隔离 Linux里进程的状态 R 运行状态runable S 中
  • 各种网络协议的类型、优缺点、作用

    一 网络协议的定义 网络协议是一种特殊的软件 是计算机网络实现其功能的基本机制 网络协议的本质是规则 即各种硬件和软件必须遵循的共同规则 网络协议并不是一套单独的软件 他融合于其他所有软件系统中 协议在网络中无所 不在 二 常用的网络协议
  • 24

    以下内容出自 MySQL 实战 45 讲 https time geekbang org column article 76446 24 MySQL是怎么保证主备一致的 MySQL 主备的基本原理 如图所示就是基本的主备切换流程 M S结构
  • socket可读,可写的条件

    socket可读可写条件 经常做为面试题被问 因为它考察被面试者对网络编程的基础了解的是不是够深入 要了解socket可读可写条件 我们先了解几个概念 1 接收缓存区低水位标记 用于读 和发送缓存区低水位标记 用于写 每个套接字有一个接收低
  • Oracle数据库运维、备份常用指令

    Oracle数据库运维 备份常用指令 1 Oracle数据泵备份导出 1 1 准备工作 在linux系统下创建导出结果存放的文件夹 切记要切换到oracle用户创建 否则会出现权限问题 su oracle mkdir home oracle
  • keepalived高可用服务的VIP地址无法访问

    环境 keepalived nginx实现高可用 VIP地址可以正常生成 也可正常漂移 可以实现故障切换 VIP地址只能在本地服务器ping通 其他内网服务器上无法ping通VIP地址 防火墙和selinux都已关闭 原因一 服务器启动了i
  • day37 445 数字反转 (字符串处理、模拟)

    445 数字反转 给定一个整数 请将该数各个位上数字反转得到一个新数 新数也应满足整数的常见形式 即除非给定的原数为零 否则反转后得到的新数的最高位数字不应为零 输入格式 输入共1行 1个整数N 输出格式 输出共1行 1个整数表示反转后的新
  • 集群基础7——keepalived脑裂

    文章目录 一 脑裂概念 二 脑裂产生原因 三 解决方案 四 脑裂监控 一 脑裂概念 在高可用 HA 系统中 当联系2个节点的 心跳线 断开时 本来为一整体 动作协调的HA系统 就分裂成为2个独立的个体 由于相互失去了联系 都以为是对方出了故

随机推荐

  • 常用 Git 命令行操作

    本文记录了一些常用 Git 命令行操作的具体使用方式 git clone git clone REPOSITORY URL 拉取仓库 并使用仓库名作为本地文件名 git clone REPOSITORY URL FOLDER 拉取仓库 并使
  • android new intent(),Android:关于onNewIntent()触发机制及注意事项

    在阅读该篇日志前 先熟悉一下Android的四种启动模式 因为onNewIntent并不是在所有启动模式下都会执行的 一 onNewIntent 在IntentActivity中重写下列方法 onCreate onStart onResta
  • Flink水位线不触发问题

    窗口计算时遇到好几次水位线不触发的情况 简单总结下 首先 介绍下Flink的事件时间 EventTime 和水位线 Watermarks 的概念 一 处理时间 如果要构造一个实时的流式应用 或早或晚都会接触到EventTime这个概念 现实
  • 用vscode写markdown的正确姿势

    写markdown一直没找到特别顺手的工具 这两天试了试vscode 被惊艳到到了 特此记录一下 1 安装vscode 之所以罗嗦一下安装 是因为安装版明显不如解压绿色版好用 特此标记一下 2 安装markdown插件 vscode默认是支
  • 机器学习——模型评估

    在学习得到的模型投放使用之前 通常需要对其进行性能评估 为此 需使用一个 测试集 testing set 来测试模型对新样本的泛化能力 然后以测试集上的 测试误差 tootino error 作为泛化误差的近似 我们假设测试集是从样本真实分
  • Shiro

    文章目录 资料 概念 基本功能 架构原理 登录认证 概念 流程 角色授权 概念 流程 代码 大致流程 shiro配置解读 ShiroConfig 登录 认证 授权 详细代码 pom login html index html UserCon
  • 表面缺陷检测的几种方法

    1 location blob feature 2 location differ feature 3 frequency domain spatial domain 4 photometric stereo 5 calibration f
  • python之迷你版Httpd服务器

    miniHttpd py import os sys platform import posixpath import BaseHTTPServer from SocketServer import ThreadingMixIn impor
  • 软件测试的心理学和经济学、软件测试的原则

    软件测试的艺术 读书笔记 第二章 第二章 软件测试的心理学和经济学 前言 软件测试是一项技术性工作 但同时涉及经济学和人类心理学的一些重要因素 在理想情况下 我们会测试程序的所有可能执行情况 而在大多数情况下 这几乎是不可能的 即使是一个简
  • 荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

    文章目录 前言 一 配置 buildroot 及编译 二 写 QT 代码 三 编译可执行文件 四 拷贝到 SD 卡 五 上板子测试 六 资源自取 前言 有这样一个需求 通过配置 QT 在 linux 下实现显示我所想要显示的图片 实现的方式
  • 首页生成静态的html,关于网站生成静态html文件的两种方案思考

    关于网站生成静态文件有利有弊 通常来讲交互性的站点不太适合静态化 如社交网站 论坛之类的站点等等 如果以资讯内容展示为主 生成静态文件能够很好的提高服务器吞吐量 下面提供两种生成静态文件的方案 分析下其中的利和弊 1 后台增加生成静态页面功
  • hexo博客配置

    title hexo博客配置 cover img 2 jpg categories HEXO博客 1 网站图标更换 themes hexo theme Annie layout partial head ejs 我中间这个hexo them
  • NUC980开源项目8-官方Uboot编译

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • linux XFRM整体框架简单分析

    author jonathan 本文档的CopyRight归jonathan所有 可自由转载 转载时请保持文档的完整性 Linux 的 XFRM框架多简单阿 6年前整理过 到现在还记得基本原理 说明xfrm设计的是多么简单明了 不过网上都是
  • Selenium被禁止的解决方法

    selenium被禁止的解决方法 遇到问题 selenium做爬虫能解决很多反爬问题 但是selenium也有很多特征可以被识别 比如用selenium驱动浏览器后window navigator webdriver值是true 而正常运行
  • python print format_Python format()格式化输出方法详解

    前面章节介绍了如何使用 操作符对各种类型的数据进行格式化输出 这是早期 Python 提供的方法 自 Python 2 6 版本开始 字符串类型 str 提供了 format 方法对字符串进行格式化 本节就来学习此方法 format 方法的
  • canvas详解03-绘制图像和视频

    canvas 更有意思的一项特性就是图像操作能力 可以用于动态的图像合成或者作为图形的背景 以及游戏界面 Sprites 等等 浏览器支持的任意格式的外部图片都可以使用 比如 PNG GIF 或者 JPEG 你甚至可以将同一个页面中其他 c
  • Tensorflow和anaconda的历史版本镜像,清华源镜像下载地址

    清华源镜像下载地址 https pypi tuna tsinghua edu cn simple tensorflow gpu tensorflow和cuda版本对应关系见该博客https blog csdn net qq 27825451
  • HCIA综合实验(以华为eNSP为例)

    如有错误 敬请谅解 此文章仅为本人学习笔记 仅供参考 如有冒犯 请联系作者删除 基础知识简介 网络技能树技能树https edu csdn net skill network utm source AI act network catego
  • android 功能模块之通讯模块

    Android通讯录开发之实现全选 反选功能 2014年1月15日 实现全选 反选不是什么难的事情 就只是用另外一个数据结构来存储被选中的状态 通过刷新列表来更新列表的显示状态 下面是实现效果 定义一个散列表来存储选中状态 java vie