Android ListView详解

在Android 开发中ListView是比较常用的组件,它以列表的形式展现具体的内容,并且能够根据数据的长度自适应显示,抽空对ListView的使用做了整理,并写了小例子:

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

1.ListView  用来显示列表的View

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

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

一.适配器

适配器可以看做是界面绑定数据的一种理解,它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等,以适当的方式在View上显示,若以“家用电视+DVD机”的放映流程来比喻,则可以把ListView比喻为电视屏幕——提供一个数据显示的场所;而Adapter可以比喻为影碟播放机——对播放进行控制;需要在ListView中显示的数据比喻为碟片——要显示的内容;数据在ListView中现实的格式,可以比喻为播放时指定的屏幕制式,如宽屏,全屏等。播放影片可以使用DVD,也可以使用VCD进行播放,因此,我们可以采用不同的Adapter,即其子类,如ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,Adapter是连接后端数据和前端显示的适配器接口,是数据Data和UI(视图View)之间一个重要的纽带。下面表达了数据data,适配器Adapter,UI视图View三者之间的关系:


根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展现一行字;SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可认为是SimpleAdapter对数据库的简单结合,可以方便的把数据库的内容以列表的形式展现出来。

二.对于前两个适配器,它们的数据来源无非是String[]和List,下面就分情况介绍:

1.使用ArrayList为ListView填充数据,请看小例子:

创建工程名为ListViewDemo_1,布局名称为main。

编写String.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">ListViewDemo_1</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="name">name</string>

</resources>

编写main.xml:

为ListView组件

<?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="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/name"/>
    <ListView 
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        ></ListView>
    

</LinearLayout>
编写MainActivity.java:

package com.example.listviewdemo_1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private ListView listview;
	private String[] name={"张三","李四","王五","刘六"};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		listview=(ListView)findViewById(R.id.listview);
		ArrayAdapter arrayapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, name);
		listview.setAdapter(arrayapter);
		listview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, name[arg2],Toast.LENGTH_LONG).show();
			}
		
		});
	}

	
}
代码解析:

String[] name={"张三","李四","王五","刘六"};是要在列表中显示的数据源

android.R.layout.simple_list_item_1  是Android内置的布局,表示ListView列表中的每个列表项的内容以一个TextView文本格式显示。这里表示name数组中的每一个元素在TextView视图组件中的展示。

ArrayAdapter adapter=new ArrayAdapter(Context context,int textViewResourceId,Object[] objects)

(1)ArrayAdapter:构造方法的参数解释

(2)context:当前的Context对象

(3)textViewResourceId:一个包含了TextView元素的布局文件,用来指定ListView中的每一项的显示格式,如前面介绍过的android.R.layout.simple_list_item_1 是Android平台自带的一个布局文件,里面只包含一个TextView标签。

(4)objects:要显示的数据,为一个数组。

onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)参数介绍如下:

(1)parent:被单击的ListView对象

(2)view:被单击的那一项

(3)position:被单击的那一项在ListView中的位置

(4)id:被选中的那一行的id

效果图如下:



为ListView配置不同的ArrayAdapter适配器样式

前面使用ArrayAdapter arrayapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, name);为ListView创建一个数组类型的ArrayAdapter,其中第二个参数android.R.layout.simple_list_item_1表示适配器为ListView的每个列表项item配置的外观样式是一个普通文本TextView样式,也就是说数组name中的每个元素都是用TextView视图组件进行展示。这个适配器是可以改变的,下面分别介绍Android自身为ArrayAdapter内置的其他三种适配器样式。

(1)全选ListView的item条目

只需要把ArrayAdapter arrayapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, name);第二个参数android.R.layout.simple_list_item_1改为android.R.layout.simple_list_item_checked即可,效果图如下:


(2)单选ListView的item条目

只需要把ArrayAdapter arrayapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, name);第二个参数android.R.layout.simple_list_item_1改为android.R.layout.simple_list_item_single_choice即可,效果图如下:


(3)全选ListView的item条目

只需要把ArrayAdapter arrayapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, name);第二个参数android.R.layout.simple_list_item_1改为android.R.layout.simple_list_item_multiple_choice即可,效果图如下:


以上讲解了ArrayList的其他三种适配器样式,如果需要其他适配器样式,也可以自定义自己喜欢的适配器样式,关于自定义适配器样式可参考下来列表框Spinner(需要说明的是:可以使用Adapter的其他视图组件不仅仅有ListView,还有Spinner和Gallery以及GridView,所有的Adapter及其子类都适用于为这四个视图组件设置适配器)。

2.自定义的ArrayAdapter动态的改变listView的不同item条目

下一篇再介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值