SimpleCursorAdapter需要造作数据库,一般通讯录Contacts就是用这种适配器,就是从Cursor游标里取得的数据用ListView显示,并可以把指定的列表映射到TextView中(这里的TextView是android.R.layout.simple_expandable_list_item_1.xml),文件如下(系统自带的)
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" />
Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);先获得一个指向系统通讯录数据库的Cursor对象获得数据来源。
startManagingCursor(cursor);我们将获得的Cursor对象交由Activity管理,这样Cursor的生命周期和Activity便能够自动同步,省去自己手动管理Cursor。
SimpleCursorAdapter 构造函数前面3个参数和ArrayAdapter是一样的,最后两个参数:一个包含数据库的列的String型数组,一个包含布局文件中对应组件id的int型数组。其作用是自动的将String型数组所表示的每一列数据映射到布局文件对应id的组件上。上面的代码,将NAME列的数据一次映射到布局文件的id为text1的组件上。
注意:需要在AndroidManifest.xml中如权限:<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
否则会出错
本来想做一个可以显示联系人姓名和电话号码的例子,但是电话号码总是去不出来,运行就出错,1.5以后联系人的API跟以前的不一样,弄了一天,还是有很多错误,只能暂停了,以后再慢慢的去了解
SimpelCursorAdapterTest.java
/* * @author loulijun */ package org.hualang.SimpleCursorAdapterTest; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.provider.Contacts.People; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class SimpleCursorAdapterTest extends Activity { /** Called when the activity is first created. */ private ListView listview; private Cursor cursor; private SimpleCursorAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listview=(ListView)findViewById(R.id.listview); cursor=getContentResolver().query(People.CONTENT_URI, null, null, null, null); startManagingCursor(cursor); adapter=new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1, cursor, new String[] {People.NAME}, new int[] {android.R.id.text1}); listview.setAdapter(adapter); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
运行结果如下: