contentProvider
<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的更多相关文章
- Android之ContentProvider数据存储
一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...
- Xamarin.Android之ContentProvider
一.前言 掌握了如何使用SQLiteOpenHelper之后,我们就可以进行下一步的学习.本章我们将会学习如何使用ContentProvider来将数据库方面的操作封装起来,同时它还可以供其他应用访问 ...
- ContentProvider域名替换小工具
开发项目域名想怎么换就怎么换,就是这么任性! 这是一个很有意思的小工具! 这是一个方便开发人员和测试人员的小工具!! 吐槽: 一直在做Android开发,一直总有一个问题存在:做自己公司的apk开发时 ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...
- 简单的学习心得:网易云课堂Android开发第六章SQLite与ContentProvider
一.SQLite 1.基本操作: (1)创建数据库:在SQLiteOpenHelper的子类构造器中创建. (2)创建表:在SQLiteOpenHelper的子类onCreate方法中,调用execS ...
- ContentProvider中央档案馆,以及获取联系人电话的示例
Android官方文档介绍的数据存储方式共有五种,sqlite,SharedPreferences,网络存储,外储存储,文件存储,但是这些数据都无法进行共享,那么我们就引入了今天的主角:Content ...
- Android基础 : Android ContentProvider
Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...
- 安卓初級教程(3):ContentProvider的運用原理
package com.example.android.provider; import java.util.ArrayList; import java.util.HashMap; import j ...
- Android探索之ContentProvider熟悉而又陌生的组件
前言: 总结这篇文章之前我们先来回顾一下Android Sqlite数据库,参考文章:http://www.cnblogs.com/whoislcj/p/5506294.html,Android程序内 ...
- 四大组件之ContentProvider
前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...
随机推荐
- android source compiler
- SQL Server存储机制
1.区段 区段(extent)是用来为表和索引分配空间的基本存储单元.它由8个连续的64KB数据页组成. 基于区段(而不是实际使用空间)分配空间的概念的要点: 一旦区段已满,那么下一记录将要占据的空间 ...
- 让UITableView 的 headerView跟随 cell一起滚动,tableHeaderView
在进行UITableView开发的时候,我们有时希望在cell的上面放置一些按钮之类的空间,又想让这些空间跟着cell一起滚动,刚开始想着hederView,注意,这是tableView的sectio ...
- [LeetCode]题解(python):063-Unique path II
题目来源 https://leetcode.com/problems/unique-paths-ii/ Follow up for "Unique Paths": Now cons ...
- 简单计算器--hdu1237(栈的运用)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 这是单纯的本题答案: #include<stdio.h> #define N 11 ...
- CodeTimer
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- WPF 本周、本月、本季、本年的第一天与最后一天取法
lblWeekStart.Content = DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOf ...
- php object转数组示例
原本是这样格式的数据: object(Thrift\Server\PageCards)#32 (3) { ["cards"]=> array(10) { [0]=> o ...
- 读写ZIP&JAR文件
1. ZipEntry 是包括目录的,也就是目录也被当做是一个单独的Entry,在列出它下面的文件之前先列出这个directory entry. 这个在解压ZIP文件的的时候特别有用,我们要先创建这个 ...
- Ball Tracking with OpenCV
http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/