先看一下目录结构:
Android 联系人选择Widget

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;}}


运行结果:
Android 联系人选择Widget
Android 联系人选择Widget

更多相关文章

  1. 修改 android 手机 hosts 文件的方法
  2. android 使用post方式上传文件
  3. Android NDK学习(5)调用.so文件
  4. Android中从服务器端向客户端传数据
  5. android 使用Java自带的HttpURLConnection 连接网络 读取返回数
  6. android通过号码查询联系人姓名
  7. Android使用GET_CONTENT Action获取打开相应文件类型的应用
  8. Android简单文件浏览器源代码

随机推荐

  1. Android内存泄漏检测工具大全
  2. Android(安卓)OCR之tesseract
  3. Android TextView的一些小知识
  4. 消息驱动 Looper类
  5. android的Theme
  6. RadioGroup和RadioButton
  7. 窗体两个按钮各占一半
  8. 设置Android应用程序横竖屏显示
  9. Android(安卓)使用Shape绘制图形
  10. android开机自启广播无效果的曲线解决方