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条目
下一篇再介绍
点击下载如上介绍的源代码
还没有评论,来说两句吧...