Android开发学习笔记:浅谈ListView
LisView列表视图是Android开发中非常常用的一种视图组件,它是以垂直列表的方式列出需要显示的列表项。 创建ListView可以用ListView组件,也可以继承ListActivity。在使用过程中最重要的是如何设置ListView显示的内容,也就是怎样设置Adapter。Adapter类型可以分为三种:ArrayAdapter,SimpleCursorAdapter和SimpleAdapter。下面介绍这三种Adapter是如何添加列表视图内容的: 一.ArrayAdapter ArrayAdapter是这三种Adapter最简单的,只能展示一行文字,使用它来添加ListView显示的内容的步骤如下: 1.创建ArrayAdapter 2.调用ListActivity的setListAdapter( )方法来设置显示的内容 下面是具体的例子: MainActivity.java packagecom.android.listview1.avtivity; importandroid.app.ListActivity; importandroid.os.Bundle; importandroid.widget.ArrayAdapter; publicclassMainActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //列表项的数据 String[]strs={"Android","IOS","Mango","MeeGo","Symbian"}; //this,布局文件 //android.R.layout.simple_list_item_1,系统定义的布局文件 //strs,数据来源 ArrayAdapter<String>adapter=newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strs); //为ListView设置适配器 setListAdapter(adapter); } } 效果图: 二.SimpleCursorAdapter SimpleCursorAdapter从游标得到的数据进行列表显示,并可以把指定的列映射到对应的TextView中。下面是使用它来显示Android中的联系人姓名的步骤: 1.调用getContentResolver( )方法返回ContentResolver( )对象,通过该对象查询得到Cursor对象 2.创建SimpleCursorAdapter对象 3.调用ListActivity的setListAdapter( )方法显示列表项 下面是具体的例子: MainActivity.java packagecom.android.listview2.activity; importandroid.app.ListActivity; importandroid.database.Cursor; importandroid.os.Bundle; importandroid.provider.Contacts.People; importandroid.widget.ListAdapter; importandroid.widget.SimpleCursorAdapter; publicclassMainActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //获得一个指向系统通讯录数据库的Cursor对象获得数据来源 Cursorcur=getContentResolver().query(People.CONTENT_URI,null,null,null,null); startManagingCursor(cur); //实例化列表适配器 ListAdapteradapter=newSimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cur, newString[]{People.NAME},//含数据库的列的String型数组 newint[]{android.R.id.text1});//包含布局文件中对应组件id的int型数组 //为ListView设置适配器 setListAdapter(adapter); } } 在AndroidManifest.xml文件中添加17行的声明 <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.android.listview2.activity" android:versionCode="1" android:versionName="1.0"> <uses-sdkandroid:minSdkVersion="10"/> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-permissionandroid:name="android.permission.READ_CONTACTS"></uses-permission> </manifest> 效果图: 三.SimpleAdapter SimpleAdapter可以定义各种不同的布局,可以添加ImageView(图片),Button(按钮),CheckBox(复选框)等。 下面是添加图片的例子: MainActivity.java packagecom.android.listview3.activity; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importandroid.app.ListActivity; importandroid.os.Bundle; importandroid.widget.SimpleAdapter; publicclassMainActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); SimpleAdapteradapter=newSimpleAdapter(this,getData(), R.layout.main,//设置界面布局 newString[]{"title","img"},//列表上的文字信息,图片信息 newint[]{R.id.title,R.id.img});//引用文字资源,图片资源 //布局文件的各组件分别映射到HashMap的各元素上,完成适配 //为ListView设置适配器 setListAdapter(adapter); } privateList<Map<String,Object>>getData(){ //map.put(参数名字,参数值) List<Map<String,Object>>list=newArrayList<Map<String,Object>>(); Map<String,Object>map=newHashMap<String,Object>(); map.put("title","摩托罗拉"); map.put("img",R.drawable.pic1); list.add(map); map=newHashMap<String,Object>(); map.put("title","诺基亚"); map.put("img",R.drawable.pic2); list.add(map); map=newHashMap<String,Object>(); map.put("title","三星"); map.put("img",R.drawable.pic3); list.add(map); returnlist; } } main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5px" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:textSize="20px" /> </LinearLayout> 效果图: 注:上面的程序很多地方用到泛型编程,有关Java泛型编程的资料请看: http://liangruijun.blog.51cto.com/3061169/636850 http://www.cnblogs.com/panjun-Donet/archive/2008/09/27/1300609.html 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/646049