先看一下目录结构:


AndroidManifest.xml配置文件:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.iaiai.activity" android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="8" /><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name="ContactSelectorWidget"android:label="@string/contact_title"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><!-- 读取联系人 --><uses-permission android:name="android.permission.READ_CONTACTS" /><!-- 写入联系人 --><uses-permission android:name="android.permission.WRITE_CONTACTS" /><!-- 在SD卡中创建文件与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 往SD卡中写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 电话拨号 --><uses-permission android:name="android.permission.CALL_PHONE" /><!-- 访问网络 --><uses-permission android:name="android.permission.INTERNET" /><!-- 访问Wi-Fi网络 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /></manifest>

values/strings.xml:
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">iaiai - Contact</string>    <string name="contact_title">iaiai - Contact</string></resources>

values-zh-rCN/strings.xml:
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">丸子联系人</string>    <string name="contact_title">丸子联系人</string></resources>

contact.xml布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="fill_parent"android:layout_height="fill_parent"><ListView android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/contactListView"></ListView></LinearLayout>

contact_list.xml布局文件:
<?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="wrap_content" android:id="@+id/contactItems"android:paddingBottom="5dip" android:paddingLeft="12dip"android:paddingTop="5dip" android:paddingRight="12dip"><ImageView android:id="@+id/contact_img"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_alignParentLeft="true"></ImageView><TextView android:layout_height="wrap_content"android:layout_width="wrap_content" android:id="@+id/contact_name"android:textSize="20dip" android:paddingTop="12px"android:layout_marginLeft="70px"></TextView><CheckBox android:id="@+id/contact_checkbox"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_alignParentRight="true" android:focusable="false"></CheckBox></RelativeLayout>

ContactSelectorWidget.java类:
package com.iaiai.activity;import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentUris;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;import android.widget.Toast;import com.iaiai.activity.adapter.ContactCheckBoxAdapter;public class ContactSelectorWidget extends Activity {public static final String CONTACT_NAME = "NAME"; // 保存的名字public static final String CONTACT_ID = "ID"; // IDpublic static final String CONTACT_FACE = "FACE"; // 头像private ContactCheckBoxAdapter contactCheckBoxAdapter; // 配置适配器private ListView list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.contact);list = (ListView) findViewById(R.id.contactListView);// 配置适配器contactCheckBoxAdapter = new ContactCheckBoxAdapter(this, getData()); // 布局里的控件id// 添加并且显示list.setAdapter(contactCheckBoxAdapter);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(Menu.NONE, 1, 0, android.R.string.ok);menu.add(Menu.NONE, 2, 0, android.R.string.cancel);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case 1:Toast.makeText(this,"selector:"+ contactCheckBoxAdapter.onSelectorData().size(),Toast.LENGTH_LONG).show();break;case 2:Toast.makeText(this, android.R.string.cancel, Toast.LENGTH_LONG).show();break;default:break;}return super.onOptionsItemSelected(item);}/** * 获取联系人 *  * @return */private List<Map<String, Object>> getData() {// 组织数据源List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()) {String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); // idString name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 姓名Map<String, Object> map = new HashMap<String, Object>();map.put(CONTACT_ID, id);map.put(CONTACT_NAME, name);map.put(CONTACT_FACE, getContactBitmap(id));list.add(map);}cursor.close(); // 关闭return list;}/** * 获得联系人头像 *  * @param id *            联系人id * @return */private Bitmap getContactBitmap(String id) {ContentResolver cr = getContentResolver();Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id));InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);if (input == null) {// Log.e("star","input is null");InputStream is = getResources().openRawResource(R.drawable.icon);BitmapDrawable bmpDraw = null;bmpDraw = new BitmapDrawable(is);Bitmap aa = null;aa = bmpDraw.getBitmap();Bitmap newb = Bitmap.createScaledBitmap(aa, 50, 50, false);return newb;} else {Bitmap contactPhoto = BitmapFactory.decodeStream(input);Bitmap newb = Bitmap.createScaledBitmap(contactPhoto, 50, 50, false);return newb;}}}

ContactCheckBoxAdapter.java类:
package com.iaiai.activity.adapter;import java.util.HashMap;import java.util.List;import java.util.Map;import android.content.Context;import android.graphics.Bitmap;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.iaiai.activity.ContactSelectorWidget;import com.iaiai.activity.R;public class ContactCheckBoxAdapter extends BaseAdapter {private LayoutInflater mInflater;private List<Map<String, Object>> listData; // 数据private Map<Integer, Map<String, Object>> selectMap = new HashMap<Integer, Map<String, Object>>(); // 选择的数据private class ViewHolder {public ImageView img;public TextView title;public CheckBox checkBox;}public ContactCheckBoxAdapter(Context context,List<Map<String, Object>> listData) {this.mInflater = LayoutInflater.from(context);this.listData = listData;}@Overridepublic int getCount() {return listData.size();}@Overridepublic Object getItem(int position) {return listData.get(position);}@Overridepublic long getItemId(int position) {return position;}/** * 返回选择的数据,Integer为选择的第几个 *  * @return */public Map<Integer, Map<String, Object>> onSelectorData() {return selectMap;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = mInflater.inflate(R.layout.contact_list, null);holder.img = (ImageView) convertView.findViewById(R.id.contact_img);holder.title = (TextView) convertView.findViewById(R.id.contact_name);holder.checkBox = (CheckBox) convertView.findViewById(R.id.contact_checkbox);holder.checkBox.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (selectMap.get(position) != null) {selectMap.remove(position);} else {selectMap.put(position, listData.get(position));}}});convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.img.setImageBitmap((Bitmap) listData.get(position).get(ContactSelectorWidget.CONTACT_FACE));holder.title.setText(listData.get(position).get(ContactSelectorWidget.CONTACT_NAME).toString());if (selectMap.get(position) != null) {holder.checkBox.setChecked(true);} else {holder.checkBox.setChecked(false);}return convertView;}}


运行结果:

更多相关文章

  1. Android(安卓)Studio开发过程中各种问题
  2. 修改 android 手机 hosts 文件的方法
  3. Android方法过多MutiDex使用说明
  4. Android(安卓)java List 转Json格式
  5. ANDROID与.Net之间JSON实践
  6. 【移动安全】Android(安卓)App Smail代码动态跟踪调试方法
  7. mybatisplus的坑 insert标签insert into select无参数问题的解决
  8. python起点网月票榜字体反爬案例
  9. NPM 和webpack 的基础使用

随机推荐

  1. android 对话框总结
  2. Android(安卓)中三种使用线程的方法
  3. Android(安卓)监听网络变化
  4. android收藏
  5. Android闹钟服务AlarmManager
  6. android传送照片到FTP服务器
  7. Android之使用Activity与Fragment通信
  8. android 抽奖盘动画 自定义View
  9. android dpi换算以及常用分辨率列表
  10. Android邮件地址正则表达式