使用ListView,SimpleAdapter及CheckBox的心得_liuwei0604的博客-程序员宅基地_simpleadapter checkbox view view = super.getview(p

技术标签: ListView  checbox  listView  android  listview  getView  Listview  

这两天无聊的时候突然想到过年短信群发的问题,直接群发短信别人收到了肯定不会有什么感觉,但是如果在短信的前面加上每个的名字,那么收短信的人肯定不会是觉得你在群发短信,因此我就想到了做这样一简单的应用,在短信的前面加上每个收信人的姓名,这里的收信人全部从联系人中选取。在联系人的选取界面是一个简单的listview,其中每个条目有三个组件,第一个是checkbox用来选取其所在的联系人,后面两个是textview分别用来显示联系人的姓名和号码。下面是实现的代码

package com.example.myownmessage;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.example.service.ContactsInfo;
import com.example.valuebean.People;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.view.ViewGroup;

public class ListContacts extends Activity {
	private CheckBox checkbox = null;
	private Button done = null;
	
	private ArrayList<People> groups = null; //将联系人对象也组成了一个数组
	private ArrayList<String> names = new ArrayList<String>();
	private ArrayList<String> numbers = new ArrayList<String>(); 
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listcontacts);
	
		checkbox = (CheckBox)this.findViewById(R.id.check);
		done = (Button)this.findViewById(R.id.done);
		
		ListView list = (ListView) this.findViewById(R.id.list);
		ArrayList<Map<String,Object>> items = new ArrayList<Map<String,Object>>();
		
		ContactsInfo info = new ContactsInfo(this);
		info.getAllContacts();
		groups = info.getContactsGroup();
		
		for(int i = 0 ; i < groups.size();i++){
			Map<String,Object> listitem = new HashMap<String,Object>();
			listitem.put("name",groups.get(i).getName());
			listitem.put("number",groups.get(i).getNumber());
			listitem.put("isSelected", groups.get(i).isSelected());
			items.add(listitem);
		}
		
		SimpleAdapter adapter = new SimpleAdapter(this,items,R.layout.item,new String []{"isSelected","name","number"},new int[]

{R.id.check,R.id.name,R.id.number}){
			
			@Override  
			public View getView(final int position, View convertView, ViewGroup parent) {
				View view = super.getView(position, convertView, parent);
				@SuppressWarnings("unchecked")
				final HashMap<String,Object> map = (HashMap<String, Object>) this.getItem(position);
				//获取相应View中的Checkbox对象
				CheckBox checkBox = (CheckBox)view.findViewById(R.id.check);
				checkBox.setChecked((Boolean) map.get("isSelected"));
				//添加单击事件,在map中记录状态
				//通过判断checkbox是否被选中来确定联系人是否被放在names和numbers两个数组中。
					
				checkBox.setOnClickListener(new View.OnClickListener() {
					@Override
					public void onClick(View view) {
						map.put("isSelected", ((CheckBox)view).isChecked());
						if(((CheckBox)view).isChecked()){
							Toast.makeText(ListContacts.this,"选中了"+ map.get("name"), 0).show();
							names.add((String) map.get("name"));
							numbers.add((String) map.get("number"));
						}else{
							names.remove(map.get("name"));
							numbers.remove(map.get("number"));
							}
						
					}
				});
				return view;
			}
			
			
			
			
			
		};
		list.setAdapter(adapter);
		
		
		
		
		done.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				
				Bundle  bundle = new Bundle();
				bundle.putStringArrayList("names", names);
				bundle.putStringArrayList("numbers", numbers);
				intent.putExtra("data", bundle);
				
				ListContacts.this.setResult(200,intent);//将选择结果返回给上一个activity
				ListContacts.this.finish();
			}});
		
	
		
	}
	
	
	
	
}
上面这段代码最为核心的就是自己构建了simpleadapter,并且重写了它的的getView方法,在这个方法里面为checkbox添加了监听器,当checkbox被选中的时候,将联系人的信息放进姓名和电话号码的list里面。

在完成这段代码之前,我也查看了很多其他人的博客,现在也慢慢的理解了一部分。被重写的getView方法它在什么时候调用的呢?就是在每一次item从屏幕外滑进屏幕内的时候,或者程序刚开始的时候创建第一屏item的时候。因此为每一个checkbox都注册了监听器,其中的参数ViewGroup parent 就是你设置adapter的那个组件里面封装一个viewGroup用来盛放item,position就是你选择的 item的第几条从0开始,convertView就是item上的布局layout或者组件。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuwei0604/article/details/8577158

智能推荐

qemu模拟arm64系统平台_早起的虫儿有鹰吃的博客-程序员宅基地_qemu模拟64位

qemu可以通过apt安装,也可以通过源码手动的configure然后make进行安装。前者方便,后者配置灵活度更高,推荐使用源码安装法

CSS:文字渐变色/文字任意方向渐变色/图片纹理文字等效果_帅比九日的博客-程序员宅基地

直接上代码:纵向渐变文字: &lt;p class="tt"&gt;嗷嗷嗷嗷嗷&lt;/p&gt; /******************************************/ &lt;style&gt; .tt{ background-image: linear-gradient(red,green);//背景色渐变,默认从上到下 ...

【COCOS2DX-游戏开发之三八】ClippingNode 制作标题闪亮特效_Teng的世界的博客-程序员宅基地_cocos2dx 闪光 特效

1.用ClippingNode可以实现上面的效果2.以标题作为模板,光效经过ClippingNode(裁剪节点),裁剪掉多余的部分3.附带上lua代码-- 1.创建模板、ClippingNode(裁剪节点) local stencil = display.newSprite("game_title.png") local clipper

充分利用Office:Office 2007 EnterPrise 企业版各软件介绍_zttcc的博客-程序员宅基地

下载链接已经失效,不过鄙人倒是有office2007大企业版,有兄弟需要告一声 2007 Microsoft Office System基础组件:Microsoft Office Access 2007 数据库管理程序Microsoft Office Excel 2007 信息分析程序Microsoft Office InfoPath 2007 信息收集程序Microsoft Office...

ubuntu下安装elasticsearch_lazycece的博客-程序员宅基地

安装前需先确认系统安装java环境,若未安装,可点击查看文章:ubantu下安装java环境下载在elasticsearch官网选择需要的版本下载:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz解压在想要安装的路径下进行解压,命令如下:tar zxvf elast...

图片滚动..............._wtcsy的博客-程序员宅基地

模仿的google的一个效果   http://www.google.cn/help/ig/art/ 基本完成 ................Imgmovea{ background-color:#EFEBEF;width:100px; height:135px; display:inline-table; zoom:1; text-align:center;te

随便推点

Android自定义View--自己撸一个柱状图也没那么难_Hankkin_Coding的博客-程序员宅基地

绪论 转眼间,2016伴随着互联网寒冬和帝都的雾霾马上就过去了,不知道大家今年一整年过得怎么样?最近票圈被各个城市的雾霾刷屏,也被各个公司裁员、移动开发人员失业,互联网行业不景气等等刷爆了。作为一名Android开发的小白来说,内心难免会动荡,庆幸自己早出来一年,也担忧着自己的未来的职业规划。无所谓了,既然选择了这个行业,我觉得大家就应该坚持下去,路是自己走的,及时再寒冬,只要你足够优秀,足够努

pom中的标签option scope,tomcat项目缺少包_爱写bug的小鸟的博客-程序员宅基地_option pom

truetrue表示不传递依赖,false或者没有表示传递依赖。可能会导致打jar包或者war包时,该依赖缺失。compilecompile:默认值,表示当前依赖包,要参与当前项目的编译,后续测试,运行时,打包provided:代表在编译和测试的时候用,运行,打包的时候不会打包进去test:表示当前依赖包只参与测试时的工作:比如Junitruntime:表示当前依赖包只参与运行周期,其他跳过了system:从参与度和provided一致,不过被依赖项不会从maven远程仓库下载,而是从本地的

oracle字符集乱码及返回 REF CURSOR 的存储过程执行问题_shenxiaoguai的博客-程序员宅基地

关于oracle字符集乱码问题:1.OracleClient方式 存在乱码问题。(比如:当Oracle数据库服务器端采用英文字符集比如 US7ASCII 时,客户端不管字符集如何设置,读出的中文都是乱码;若服务器端用中文字符集比如 ZHS16GBK ,则无乱码问题。)2. OleDb方式 微软 为“provider=MSDAORA.1;” 存在乱码问题。 (比如:服务器oracle

SQL_STATE查询附录(MYSQL异常编码查询) 2007-12-05 17:41:31_小码农的故事的博客-程序员宅基地

分类: OracleB.1. 服务器错误代码和消息服务器错误信息来自下述源文件:错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld_ername.h MySQL源文件中的定义

Python简直是万能的,这5大主要用途你一定要知道!_xuexijiaqq3533076323的博客-程序员宅基地

从2015开始国内就开始慢慢接触Python了,从16年开始Python就已经在国内的热度更高了,目前也可以算的上"全民Python"了。众所周知小学生的教材里面已经有Python了,国家二级计算机证也需要学习Python了!因为Python简单、入门快,是不少程序员入门的首选语言。如果你想学Python,或者你刚开始学习Python,那么你可能会问:“我能用Python做什么?...

推荐文章

热门文章

相关标签