首页 > 代码库 > 第十九讲:ListView与Adapter(一)

第十九讲:ListView与Adapter(一)

天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为。——《孟子·告子下》


本讲内容:ListView列表组件 与 Adapter适配器的用法


一、ListView列表组件:

作用:ListView通常有两个职责。
(1)将数据填充到布局。
(2)处理用户的选择点击等操作(通过绑定监听器)。

创建一个ListView需要3个元素。
(1)ListView展示每一列的View。
(2)填入View的数据或者图片等。
(3)连接数据与ListView的适配器。

ListView的使用步骤:

(1)定义一个data
(2)创建一个Adapter对象

(3)绑定适配器

二、Adapter适配器:

什么是Adapter适配器?适配器就是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,前面我们学过的Spinner也是)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。Android中提供了很多的Adapter,各种Adapter转换的方式和能力不一样,下面介绍常用的几个。

Adapter作用
ArrayAdapter<C>用来绑定一个数组,支持泛型操作
SimpleAdapter用来绑定在xml中定义的控件对应的数据
SimpleCursorAdapter用来绑定游标得到的数据
BaseAdapter通用的基础适配器


我们通过下面例子感受一下,代码的讲解都写在注释里了。

三、 ListView使用ArrayAdapter

ArrayAdapter可以实现简单的ListView的数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。ArrayAdapter的使用非常简单。

下面是res/layout/activity_main.xml 布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.text.MainActivity$PlaceholderFragment" >
   
 <TextView 
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="零基础学Android"
     android:gravity="center"
     android:textSize="30sp"
     android:textColor="#ff00ff"/>
 
 <ListView 
     android:id="@+id/listViewId"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"/>
    
</LinearLayout>

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity {
	private ListView listView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		listView = (ListView) findViewById(R.id.listViewId);
		// 定义数组
		String[] data = http://www.mamicode.com/{ "零基础学Android 第一讲", "零基础学Android 第二讲",>

ArrayAdapter<CharSequence>,具有三个参数: 
第一个是conetxt,也就是application的环境,可以设置为this,也可以通过getContext()获取. 
第二个参数是ListView未展开的UI格式 ,注意是Android系统内自定义的(我们也可以自定义ListView的UI格式)
第三个参数是从data source中的array ID也可以自定义的data


通常我们使用Android提供的资源,除了例子中所用的,常用的还有如下几种,可实现带RadioButton和CheckBox的ListView。
一般  android.R.layout.simple_list_item_1
(1)通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。
需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果 
(2)通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。
同样的,需要用setChoiceMode()方法来设置单选或者多选
(3)通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。这里要注意的是,
这里并不是指定了单选。是多选还是单选要通过setChoiceMode()方法来指定


下面是运行结果:




本讲到这里,谢谢大家!

第十九讲:ListView与Adapter(一)