Android ListView详解

朴灿烈づ我的快乐病毒、 2022-08-07 10:50 285阅读 0赞

在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三者之间的关系:

Center

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

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

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

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

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

编写String.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="app_name">ListViewDemo_1</string>
  4. <string name="hello_world">Hello world!</string>
  5. <string name="action_settings">Settings</string>
  6. <string name="name">name</string>
  7. </resources>

编写main.xml:

为ListView组件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="@string/name"/>
  10. <ListView
  11. android:id="@+id/listview"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. ></ListView>
  15. </LinearLayout>

编写MainActivity.java:

  1. package com.example.listviewdemo_1;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.MenuItem;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.AdapterView.OnItemClickListener;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.ListView;
  11. import android.widget.Toast;
  12. public class MainActivity extends Activity {
  13. private ListView listview;
  14. private String[] name={"张三","李四","王五","刘六"};
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. listview=(ListView)findViewById(R.id.listview);
  20. ArrayAdapter arrayapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, name);
  21. listview.setAdapter(arrayapter);
  22. listview.setOnItemClickListener(new OnItemClickListener() {
  23. @Override
  24. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  25. long arg3) {
  26. // TODO Auto-generated method stub
  27. Toast.makeText(MainActivity.this, name[arg2],Toast.LENGTH_LONG).show();
  28. }
  29. });
  30. }
  31. }

代码解析:

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

效果图如下:

Center 1

为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即可,效果图如下:

Center 2

(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即可,效果图如下:

Center 3

(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即可,效果图如下:

Center 4

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

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

下一篇再介绍

点击下载如上介绍的源代码

发表评论

表情:
评论列表 (有 0 条评论,285人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Android ListView

    ListView作为android的经常使用的控件,在使用时,经常会忘记一些使用要点,这里记录一下一些使用过程中的需求,以便后面使用查询: 设置 监听 使用