Android 适配器教程(二)

       上次我写了一个类似前言的东西,向大家粗略介绍了一下什么是适配器,并且举了一个最简单的例子帮助大家理解,使用了安卓原生的ArrayAdapter现在我们继续向下学习,同时也继续在我们上次的Demo项目中继续添加例子,一步步的向下深入学习。


这次要讲解的是另外一个常用的安卓原生适配器—SimpleCursorAdapter:


关于SimpleCursorAdapter,sdk的解释是这样的:

      An easyadapter to map columns from a cursor to TextViews or ImageViews defined in anXML file. You can specify which columns you want, which views you want todisplay the columns, and the XML file that defines the appearance of theseviews。


简单的说就是方便把从游标得到的数据进行列表显示,并可以把指定的列映射到对应的TextView中。

 

下面要写的程序是从电话簿中把联系人显示到类表中获得一个指向数据库的Cursor并且定义一个布局文件(当然也可以使用系统自带的)将数据展示出来!

 

项目开始!


(1)还是先在activity_main.xml里添加一个button,一会跳转的时候使用。

(2)然后新建一个类SimpleCursorAdapterDemo继承自Activity作为我们第二个例子的Activity,并且

@Override 我们的onCreate方法。

(3)新建一个xml文件simplecursoradapterdemo.xml作为我们的布局文件,其中也是包含一个文本域和一个ListView:

代码如下

simplecursoradapterdemo.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是simplecursoradapter的一个例子" >
    </TextView>

    <ListView
        android:id="@+id/simplecursoradapterlistview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

(4)回到SimpleCursorAdapterDemo,定义一个Listview暂且叫做lv,并使用刚才的ID,setContentView()为刚才的xml布局,然后为lv设置一个适配器:

SimpleCursorAdapter(Context context,int layout,Cursor c, String[] from, int[] to)

先解释一下参数:

第一个参数this,第二个layout的参数是ListView中单行的布局, c是你数据的游标。刚开始其实from和to比较让人不熟悉,From是你查询出的数据,to是单行布局中的单独控件,一对一的关系,用起来非常方便。


再说一下需要用到的Cursor


我们用:

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-permissionandroid:name="android.permission.READ_CONTACTS"></uses-permission>


具体代码如下:

package com.example.adapterdemo;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class SimpleCursorAdapterDemo extends Activity{
	
	private ListView lv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simplecursoradapterdemo);
        lv = (ListView)findViewById(R.id.simplecursoradapterlistview);
        Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
        startManagingCursor(cursor);
         
        ListAdapter listAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1, 
                cursor,
                new String[]{People.NAME}, 
                new int[]{android.R.id.text1});
         
        lv.setAdapter(listAdapter);
	}
}


最终的效果图:


Android 适配器教程(二)



这样第二种常用的安卓原生适配器也就告一段落了,还是本着分成多篇以防止篇幅过长的原则,这一篇就到这里了,下一讲我们继续学习SimpleAdapter,一种可扩展性很强的适配器,大家不要错过哦!


源码会在最后一篇写完的时候传上来,我也是边写博客,边写代码,我觉得这样思路比较清晰。


我也是学生,水平有限,还望大家多多指教~

上一篇:Android Manifest.xml文件解析


下一篇:Android 适配器教程(一)