列表的三种适配器

列表的三种适配器

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。

列表的显示需要三个元素:

1 .ListVeiw:用来展示列表的View。

2 .适配器:用来把数据映射到ListView上的中介。

3 .数据:具体的将被映射的字符串、图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。 SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

一、
ArrayAdapter代码详解

首先在布局文件main.xml中定义ListView标签:


<ListView


android:id="@+id/listview"


android:layout_width="fill_parent"


android:layout_height="wrap_content"


/>

代码实现:

publicclass ArrayAdapterList extends Activity {


/** Called whenthe activity is first created. */


@Override


publicvoid onCreate(BundlesavedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.main);


ListView listView = (ListView)findViewById(R.id.listview);


//定义一个数组


String[] arr = {"忘情水","冰雨","一起走过的日子"};


//将数据封装到ArrayAdapter


ArrayAdapter<String> arrayAdapter = newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr);


//为ListView设置Adapter


listView.setAdapter(arrayAdapter);


}

}

上面代码使用了ArrayAdapter(Context context, int textViewResourceId, T[]objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来完成两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布
局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个数组)。同时用setAdapter()完成适配的最后工作。

textViewResourceId该参数决定每个列表项的外观形式,Android为该属性提供了如下属性值:

simple_list_item_1:每个列表项都是一个普通的TextView

simple_list_item_2:每个列表项都是一个普通的TextView(字体略大)

simple_list_item_multiple_choice:每个列表项都是带多选框的文本

simple_list_item_single_choice:每个列表项都是带多单选按钮的文本

simple_list_item_checked:每个列表项都是一个已勾选的列表项


运行结果: QQ截图20110801184631.png

 

二、SimpleAdapter代码详解

simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按 钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,如果程序的窗口仅仅为了显示一个列表,则可以直接让Activity继承ListActivity来实现,ListActivity的子类无需调用setContentView()来显示某个页面,而是可以直接传入一个Adapter,ListActivity的子类就呈现出一个列表。

布局文件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"


>

<ListView


android:id="@+id/android:list"


android:layout_width="fill_parent"


android:layout_height="wrap_content"


/>

<ImageView


android:id="@+id/header"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:paddingLeft="10dp"


/>

<TextView


android:id="@+id/name"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:paddingLeft="10dp"


/>

</LinearLayout>

在此布局文件中,应包含一个id为”@+id/android:list”的ListView,此id为Android系统内置ID

代码实现:

publicclass SimpleAdapterList extends ListActivity {

/** Called whenthe activity is first created. */


//声明姓名和头像的数组变量


private String [] names = new String[]{"刘德华","张学友","黎明","郭富城"};


privateint[] imageIds = new
int
[]{R.drawable.header01,R.drawable.header02,R.drawable.header03,R.drawable.header04};


@Override


publicvoid onCreate(BundlesavedInstanceState) {


super.onCreate(savedInstanceState);


//创建一个List集合


List<Map<String,Object>> listItems = new ArrayList<Map<String,Object>>();


for(int i=0; i<names.length;i++){


Map<String,Object> listItem = new HashMap<String,Object>();



listItem.put("header", imageIds);



listItem.put("name", names);



listItems.add(listItem);


}


//创建一个SimpleAdapter


SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.mainnew String[]{"header","name"}, newint[]{R.id.header,R.id.name});


setListAdapter(simpleAdapter);


}

}

SimpleAdapter参数说明:

SimpleAdapter(Contextcontext, List<? extends Map<String, ?>> data, int resource,String[] from, int[] to)

data:该参数是一个List<? extendsMap<String, ?>>类型的集合对象,该集合中的每个对象生成一个列表项

resource:该参数指定使用的界面布局文件的ID

from:该参数是一个String[]类型的参数,该参数决定提取Map<String,?>对象中那些key对应的value来生成列表项

to:该参数决定使用哪些View组件来组合成一个列表项


运行结果: QQ截图20110801184644.png


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值