在Android中,可以使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作。
在对联系人进行操作时需加入以下两个权限
<!-- 添加操作联系人的权限 --><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" />

引用 <!-- 联系人相关的uri -->
content://com.android.contacts/contacts 操作的数据是联系人信息Uri
content://com.android.contacts/data/phones 联系人电话Uri
content://com.android.contacts/data/emails 联系人Email Uri

main.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/MyListView">      </ListView>  </LinearLayout>  

list_items.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/myListItem"android:paddingBottom="5dip" android:paddingLeft="12dip"android:paddingRight="12dip"><ImageView android:id="@+id/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/itemTitle"android:textSize="20dip" android:paddingTop="15px"android:layout_marginLeft="70px"></TextView><CheckBox android:id="@+id/cb" android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_alignParentRight="true"android:focusable="false"></CheckBox></RelativeLayout>  

MyList.java类:
package iaiai.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.app.AlertDialog;import android.content.ContentResolver;import android.content.DialogInterface;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.MenuItem;import android.view.View;import android.view.View.OnCreateContextMenuListener;import android.widget.AdapterView;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.Toast;public class MyList extends Activity {private ListView list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);list = (ListView) findViewById(R.id.MyListView);// 配置适配器MyCheckBoxAdapter adapter = new MyCheckBoxAdapter(this, getData()); // 布局里的控件id// 添加并且显示list.setAdapter(adapter);// 添加点击list.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {setTitle("点击第" + arg2 + "个项目");Toast.makeText(MyList.this, "点击第" + arg2 + "个项目",Toast.LENGTH_LONG).show();}});// 添加长按点击list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {// menu.setHeaderIcon(R.drawable.icon); //字义图片样式menu.setHeaderTitle("长按菜单选项:");menu.add(1, 0, 0, "编辑");menu.add(0, 1, 0, "删除");}});}@Overridepublic boolean onContextItemSelected(MenuItem item) {int selectedPosition = ((AdapterContextMenuInfo) item.getMenuInfo()).position; // 刚才选择的Map<String, String> map = (HashMap) list.getItemAtPosition(selectedPosition); // ListView中的数据Toast.makeText(MyList.this,"你选择的:" + selectedPosition + ",内容为:" + map.get("itemTitle"),Toast.LENGTH_LONG).show(); // 显示那条数据String temp = "";switch (item.getItemId()) {case 0:temp = "编辑";break;case 1:temp = "删除";break;default:break;}// Toast.makeText(this, temp + "處理", Toast.LENGTH_LONG).show();return super.onContextItemSelected(item);}/** * 获取联系人 *  * @return */private List<Map<String, String>> getData() {// 组织数据源List<Map<String, String>> mylist = new ArrayList<Map<String, String>>();ContentResolver contentResolver = getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/contacts");Cursor cursor = contentResolver.query(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, String> map = new HashMap<String, String>();map.put("id", id);map.put("name", name);mylist.add(map);}cursor.close(); // 关闭return mylist;}/** * listview中点击按键弹出对话框 */public void showInfo() {new AlertDialog.Builder(this).setTitle("我的listview").setMessage("介绍...").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();}}

MyCheckBoxAdapter.java类:
package iaiai.test;import java.util.HashMap;import java.util.List;import java.util.Map;import android.content.Context;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 android.widget.Toast;public class MyCheckBoxAdapter extends BaseAdapter {private LayoutInflater mInflater;private List<Map<String, String>> listData;private Map<Integer, Map<String, String>> selectMap = new HashMap<Integer, Map<String, String>>();private class ViewHolder {public ImageView img;public TextView title;public CheckBox checkBox;}public MyCheckBoxAdapter(Context context, List<Map<String, String>> 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;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = mInflater.inflate(R.layout.list_items, null);final View view = convertView;holder.img = (ImageView) convertView.findViewById(R.id.img);holder.title = (TextView) convertView.findViewById(R.id.itemTitle);holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb);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));}Toast.makeText(view.getContext(),"你选择了:" + selectMap.size() + "个.",Toast.LENGTH_LONG).show();}});convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.img.setBackgroundResource(R.drawable.icon);holder.title.setText(listData.get(position).get("name"));if (selectMap.get(position) != null) {holder.checkBox.setChecked(true);} else {holder.checkBox.setChecked(false);}return convertView;}}

运行结果:

更多相关文章

  1. Android(安卓)之往通讯录中添加数据和查询数据
  2. cocos2d-x学习之旅(四):1.4 使用eclipse编译Android(安卓)C++
  3. android listview的一些设置
  4. Android学习之菜单
  5. Win7上Git安装及简单配置过程
  6. Android(安卓)Studio 小技巧(1):如何导入AAR文件
  7. android 让Launcher Hotseat中的图标显示title
  8. 配置android jni开发环境
  9. android Fragment添加Theme,使背景模糊

随机推荐

  1. Android平台开发-Android(安卓)HAL devel
  2. Android中WebView的使用,加载H5
  3. 分析Android(安卓)根文件系统启动过程(ini
  4. Android(安卓)关机流程分析-----(1)Framewo
  5. Android(安卓)高清加载巨图方案 拒绝压缩
  6. Android(安卓)LayoutInflater inflate方
  7. android recovery模式及ROM制作
  8. Android代码混淆指南
  9. 关于 Android(安卓)进程保活,你所需要知道
  10. Android内存泄漏查找