<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. php读取qqwry.dat ip地址定位文件的类

    <?php// +----------------------------------------------------------------------// |// +---------- ...

  2. qmake理解(还可以加入Lex Yacc文件)

    关于qmake,好一段时间令我一头雾水,不知道用来干嘛的,只知道怎么用,而且也只懂那么一两个命令,详细看过资料以后整理如下: 1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件c ...

  3. Asp.net Mvc4默认权限详细(下)

    前言 菜鸟去重复之Sql的问题还没有得到满意的答案.如果哪位大哥有相关的资料解释,能够分享给我,那就太谢谢了. 以后每发表一篇博文我都会将以前遗留的问题在前言里指出,直到解决为止. 本文主要在于探讨一 ...

  4. Java学习-035-JavaWeb_004 -- JSP include 指令

    inclue 指令是将不同的文件插入到 JSP 网页中,这些文件可以是文本文件.HTML文件.JSP 文件,指令语法如下: <%@include file="相对路径"%&g ...

  5. MVC4怎么设置@Html.TextBox这样的输入框的css样式

    在mvc中 @Html.TextBox("txtCode","",new {@class="code",style="width: ...

  6. Aspose.Words 开发时遇到的问题

    问题一 Document doc.Save(Response, "学员报名表.pdf", ContentDisposition.Inline, null); 执行后没有效果,因为异 ...

  7. Upgrade Image&ntext to varbinarymax&nvarchar(max)

    CREATE PROCEDURE SP_EXEC_WITH_LOG(@I_TICKETNO VARCHAR(10),@I_SQLSTR nvarchar(max))ASBEGIN    DECLARE ...

  8. Linux 内核的文件 Cache 管理机制介绍

    Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...

  9. python or not python

    python or not python 我挺喜欢 python 这种编程语言,它本身的丰富的动态特性让这种语言的表达能力很强,基本上 python 上写的一行代码,可实现 java 上 1.5 到 ...

  10. js 如何清除setinterval

    var id=window.setInterval(function(){ },1000);window.clearInterval(id);