在Android中,可以使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作。
在对联系人进行操作时需加入以下两个权限
Java代码
复制代码
引用
<!-- 联系人相关的uri -->
content://com.android.contacts/contacts 操作的数据是联系人信息Uri
content://com.android.contacts/data/phones 联系人电话Uri
content://com.android.contacts/data/emails 联系人Email Uri
main.xml布局文件:
Java代码
复制代码
list_items.xml布局文件:
Java代码
复制代码
MyList.java类:
Java代码
复制代码
MyCheckBoxAdapter.java类:
Java代码
复制代码
运行结果:
在对联系人进行操作时需加入以下两个权限
Java代码
- <!-- 添加操作联系人的权限 -->
- <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布局文件:
Java代码
- <?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布局文件:
Java代码
- <?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类:
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;
- @Override
- protected 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() {
- @Override
- public 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() {
- @Override
- public 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, "删除");
- }
- });
- }
- @Override
- public 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)); // id
- String 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() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- }
- }).show();
- }
- }
MyCheckBoxAdapter.java类:
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;
- }
- @Override
- public int getCount() {
- return listData.size();
- }
- @Override
- public Object getItem(int position) {
- return listData.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public 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() {
- @Override
- public 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;
- }
- }
运行结果: