如果要进行列表显示使用ListView最方便,而如果要将查询的对象Cursor轻松的加入到ListView
中实现的话,则使用SimpleCursorAdapter比较方便。
在main.xml中:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#0066ff">
<ListView
android:id="@+id/callList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
新建布局文件calls.xml:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#0066ff">
<TableRow >
<TextView
android:id="@+id/_id"
android:gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="16dp"
android:textColor="#ffffff"/>
<TextView
android:id="@+id/name"
android:gravity="center_vertical"
android:textColor="#ffffff"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="8dp"/>
<TextView
android:id="@+id/number"
android:gravity="center_vertical"
android:textColor="#ffffff"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="8dp"/>
</TableRow>
</TableLayout>
在主Activity(MyCallContentProviderDmeo.java)中:
package com.li.callcontentprovider;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.provider.CallLog;
import android.app.Activity;
import android.database.Cursor;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.support.v4.app.NavUtils;
public class MyCallContentProviderDmeo extends Activity {
private ListView callList = null;
private Cursor result = null;
private ListAdapter listAdapter = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.callList = (ListView)super.findViewById(R.id.callList);
this.result = super.getContentResolver().query(CallLog.Calls.CONTENT_URI,
null, null, null, null); //查询通话记录
this.startManagingCursor(this.result); //交给程序
String[] columns = new String[]{CallLog.Calls._ID,
CallLog.Calls.CACHED_NAME,CallLog.Calls.NUMBER};
int[] entries = new int[]{R.id._id,R.id.name,R.id.number};
this.listAdapter = new SimpleCursorAdapter(this,R.layout.calls,
this.result,columns,entries); //将Curosr直接变为可以显示的数据
this.callList.setAdapter(this.listAdapter);
}
}
在AndroidManifest.xml中修改权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.li.callcontentprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MyCallContentProviderDmeo"
android:label="@string/title_activity_my_call_content_provider_dmeo" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
</manifest>