<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"> <TextView
android:id="@+id/info"
android:textSize="20px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="联系人列表" /> <ListView
android:id="@+id/linkManLists"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> </LinearLayout> =================contact.xml=================
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
> <TableRow>
<TextView
android:id="@+id/_id"
android:textSize="20px"
android:layout_height="wrap_content"
android:layout_width="60px"
android:text="联系人列表" /> <TextView
android:id="@+id/_name"
android:textSize="20px"
android:layout_height="wrap_content"
android:layout_width="300px"
android:text="联系人列表" />
</TableRow>
</TableLayout> ==================================== package com.example.eightoperlinkmancontentprovider; import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.provider.ContactsContract;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class MainActivity extends Activity {
private ListView contactsList=null;
private Cursor result= null;
private List<Map<String,Object>> allContactMap=null; //option +return
private SimpleAdapter simpleAdapter = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); this.contactsList= (ListView) super.findViewById(R.id.linkManLists); this.result = super.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
this.startManagingCursor(result); this.allContactMap = new ArrayList<Map<String, Object>>(); for (result.moveToFirst();!result.isAfterLast();result.moveToNext()){
Map<String, Object> contactMap = new HashMap<String, Object>(); contactMap.put("_id",result.getColumnIndex(ContactsContract.Contacts._ID));
contactMap.put("_name",result.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); this.allContactMap.add(contactMap); } this.simpleAdapter = new SimpleAdapter(this,allContactMap,R.layout.contacts,new String[]{"_id","_name"},new int[]{R.id._id,R.id._name});
this.contactsList.setAdapter(this.simpleAdapter);
super.registerForContextMenu(this.contactsList);//reigister context menu } // @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// // Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.main, menu);
// return true;
// } @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("联系人操作:");
menu.add(Menu.NONE, Menu.FIRST + , , "Show Detail");
menu.add(Menu.NONE,Menu.FIRST+,,"Delete Info");
} @Override
public boolean onContextItemSelected(MenuItem item) {//选中某个菜单项
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); int idx = info.position;
//取得数据ID
long contactid=Long.parseLong(this.allContactMap.get(idx).get("_id").toString()); switch (item.getItemId()){ case Menu.FIRST+:
String phoneSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?";
//查询参数
String[] phoneSelectionArgs = {String.valueOf(contactid)};
//查询全部手机号码
Cursor c = super.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,phoneSelection,phoneSelectionArgs,null);
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("电话号码是:");
for (result.moveToFirst();!result.isAfterLast();result.moveToNext()){
stringBuffer.append(c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))).append(",");
}
Toast.makeText(this,stringBuffer,Toast.LENGTH_LONG).show();
break;
case Menu.FIRST+:
super.getContentResolver().delete(Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI,String.valueOf(contactid)),null,null);
this.allContactMap.remove(idx);//删除数据项
this.simpleAdapter.notifyDataSetChanged();
Toast.makeText(this,"数据已经删除!",Toast.LENGTH_LONG).show();
break;
} return false; }
}

contentProvider的更多相关文章

  1. Android之ContentProvider数据存储

    一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...

  2. Xamarin.Android之ContentProvider

    一.前言 掌握了如何使用SQLiteOpenHelper之后,我们就可以进行下一步的学习.本章我们将会学习如何使用ContentProvider来将数据库方面的操作封装起来,同时它还可以供其他应用访问 ...

  3. ContentProvider域名替换小工具

    开发项目域名想怎么换就怎么换,就是这么任性! 这是一个很有意思的小工具! 这是一个方便开发人员和测试人员的小工具!! 吐槽: 一直在做Android开发,一直总有一个问题存在:做自己公司的apk开发时 ...

  4. Android开发学习—— ContentProvider内容提供者

    * 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...

  5. 简单的学习心得:网易云课堂Android开发第六章SQLite与ContentProvider

    一.SQLite 1.基本操作: (1)创建数据库:在SQLiteOpenHelper的子类构造器中创建. (2)创建表:在SQLiteOpenHelper的子类onCreate方法中,调用execS ...

  6. ContentProvider中央档案馆,以及获取联系人电话的示例

    Android官方文档介绍的数据存储方式共有五种,sqlite,SharedPreferences,网络存储,外储存储,文件存储,但是这些数据都无法进行共享,那么我们就引入了今天的主角:Content ...

  7. Android基础 : Android ContentProvider

    Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...

  8. 安卓初級教程(3):ContentProvider的運用原理

    package com.example.android.provider; import java.util.ArrayList; import java.util.HashMap; import j ...

  9. Android探索之ContentProvider熟悉而又陌生的组件

    前言: 总结这篇文章之前我们先来回顾一下Android Sqlite数据库,参考文章:http://www.cnblogs.com/whoislcj/p/5506294.html,Android程序内 ...

  10. 四大组件之ContentProvider

    前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...

随机推荐

  1. Redis学习笔记(9)-管道/分布式

    package cn.com; import java.util.Arrays; import java.util.List; import redis.clients.jedis.Jedis; im ...

  2. JS框架比较

    https://www.oschina.net/translate/comparison-of-js-frameworks这几个框架我都用过1. Ember 2.x已经没有script标签在页面里了, ...

  3. CSS弹性盒布局

    <html> <head> <meta charset="utf-8"/> <title></title> <st ...

  4. response.setCharacterEncoding方法未定义

    代码一搬家,就报这错.之前几次稀里糊涂搞好忘记总结. 问题原因: 项目中用到Tomcat和weblogic.jar包,先引入weblogic.jar包时,HttpServletResponse下的se ...

  5. 解决 SqlServer执行脚本,文件过大,内存溢出问题

    原文:解决 SqlServer执行脚本,文件过大,内存溢出问题 执行.sql脚本文件,如果文件较大时,执行会出现内存溢出问题,可用命令替代 cmd 中输入 osql -S 127.0.0.1,8433 ...

  6. [LeetCode]题解(python):112 Path Sum

    题目来源 https://leetcode.com/problems/path-sum/ Given a binary tree and a sum, determine if the tree ha ...

  7. Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树

    A.Beru-taxi 水题:有一个人站在(sx,sy)的位置,有n辆出租车,正向这个人匀速赶来,每个出租车的位置是(xi, yi) 速度是 Vi;求人最少需要等的时间: 单间循环即可: #inclu ...

  8. signed和unsigned

    signed:表示有符号位,最高位包括正数.负数和0: unsigned:表示无符号位,最高位表示 数值,不表示符号: signed int a:a 的取值范围是:-2^..... 这个就想不起来要占 ...

  9. Maven-002-eclipse 插件安装及实例

    因为平常编码的时候,习惯了使用 eclipse 进行编码,因而需要将 eclipse 安装 maven 的插件,安装步骤如下所示: 一.安装 选择菜单: help -> Install New  ...

  10. Sql server与Excel的数据互通导入导出

    现在,我先从Sql server数据表导出到Excel中,再从Excel数据表导出到Sql server中: 一.Sql server数据表导出到Excel中: 1.新建一个Excel,选择“数据”菜 ...