ListView在Android开发中是比较常用的组件,它是以列表的形式展示内容,并且还可以处理用户的选择与点击等操作;

  LIstView显示数据一般需要三方面:

  (1)ListView组件:用来展示列表的View;

  (2)数据:填充到View中的文字,图片等;

  (3)适配器:连接ListView与数据的适配器;

  适配器,是连接数据和AdapterView的桥梁(ListView是AdapterView的子类),通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便;

  常用的适配器有以下几种:

  ArrayAdapter<T>   用来绑定一个数组,支持泛型操作; 

  SimpleAdapter     用来绑定在XML中定义的控件对应的数据,有很好的扩充性,可以自定义出各种效果;

  SimpleCursorAdapter  可以理解为与数据库的简单结合,可以方便的把数据库的内容以列表的形式展示出来;

  BaseAdapter  基础数据适配器;

1.使用ArrayAdapter来展示内容

效果如下:

layout有两个,都很简单;

activity_main.xml:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.xiaozhang.listview2.MainActivity" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</RelativeLayout>

listview.xml:

<?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:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="textView"
        android:textSize="20sp"
        />

</LinearLayout>

MainActivity.java

package com.xiaozhang.listview2;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    private String[] str = new String[] { "listView1", "listView2",
            "listView3", "listView4", "listView5" };
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, str));
    }
}

非常简单,下面分析一下使用的步骤:

(1)定义一个数组来存放ListView中item的内容。

(2)通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象。

(3)通过ListView的setAdapter()方法绑定ArrayAdapter。

  其中第二步有必要说一下的是,ArrayAdapter有多个构造函数,例子中实现的是最常用的一种。第一个参数为上下文,第二个参数为一个包含TextView,用来填充ListView的每一行的布局资源ID。第三个参数为ListView的内容。其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。

(1)通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果;

listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_checked, str));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

运行效果如图:

(2)通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。同样的,需要用setChoiceMode()方法来设置单选或者多选;

listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, str));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

运行效果如图:

(3)通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。这里要注意的是,这里并不是指定了单选。是多选还是单选要通过setChoiceMode()方法来指定;

listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_single_choice, str));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

(4)具体R.layout的属性可参考API:

 

  在前面讲到过,ListView的职责除了填充数据外,还要处理用户的操作。通过如下的代码就可以为ListView绑定一个点击监听器,点击后在标题栏显示点击的行数。

listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // 点击后在标题上显示点击了第几行
                setTitle("你点击了第" + arg2 + "行");
            }
        });

 

2.使用SimpleAdapter来展示内容

  很多时候需要在列表中展示一些除了文字以外的东西,比如图片等。这时候可以使用SimpleAdapter。SimpleAdapter的使用也非常简单,同时它的功能也非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。

  看一个例子,实现一个每一行都有一个ImageView和TextView的ListView。先看一下运行效果:

点击其中一行,看标题的变化:

长按其中一行:

点击长按菜单:

实现步骤为:

(1)首先在activity_main.xml中增加一个ListView控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout01"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

(2)再定义一个布局文件,用RelativeLayout来实现一个带两行字和一个图片的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout01"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="4dp"
    android:paddingLeft="12dp"
    android:paddingRight="12dp" >

    <ImageView
        android:id="@+id/ItemImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingTop="12dp" />

    <TextView
        android:id="@+id/ItemTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="TextView01"
        android:textSize="25dp" />

    <TextView
        android:id="@+id/ItemText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ItemTitle"
        android:text="TextView02" />

</RelativeLayout>

(3)添加图片right.png到项目中,为了简单点,直接放在drawable-hdpi中;

(4)在MainActivity中绑定数据,实现点击事件及长按事件;

package com.xiaozhang.listview3;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

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

        // 绑定Layout里面的ListView
        ListView list = (ListView) findViewById(R.id.ListView01);

        // 定义动态数组,加入数据
        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
        for (int i = 0; i < 20; i++) {
            HashMap<String, Object> map = new HashMap<String, Object>();

            // 加入图片,图像为right.png
            map.put("ItemImage", R.drawable.right);
            map.put("ItemTitle", "the line is: " + i);
            map.put("ItemText", "the lien number is: " + i);
            listItem.add(map);
        }

        /*
         * 第二个参数:需要绑定的数据;
         * 第三个参数:将动态数组中的数据的键对应到布局文件listview.xml中;
         * 第四个参数:动态数组与ImageItem对应的子项
         * 第五个参数:listview.xml文件里面的一个ImageView,两个TextView的ID
         */
        SimpleAdapter listItemAdapter = new SimpleAdapter(this, listItem,
                R.layout.listview, new String[] { "ItemImage", "ItemTitle",
                        "ItemText" }, new int[] { R.id.ItemImage,
                        R.id.ItemTitle, R.id.ItemText });

        // 为ListView绑定适配器
        list.setAdapter(listItemAdapter);

        // 添加点击事件
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                //设置标题栏显示
                setTitle("点击第" + arg2 + "个项目");
            }
        });

        // 添加长按点击事件
        list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                menu.setHeaderTitle("长按菜单-ContextMenu");
                menu.add(0, 0, 0, "长按菜单0");
                menu.add(0, 1, 0, "长按菜单1");
                menu.add(0, 2, 0, "长按菜单2");
            }
        });
    }

    // 长按菜单响应函数
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        setTitle("点击了长按菜单里面的第" + item.getItemId() + "个项目");
        return super.onContextItemSelected(item);
    }
}

  使用simpleAdapter的数据一般都是用HashMap构成的列表,列表的每一节对应ListView的每一行。通过SimpleAdapter的构造函数,将HashMap的每个键的数据映射到布局文件中对应控件上。这个布局文件一般根据自己的需要来自己定义。梳理一下使用SimpleAdapter的步骤。

(1)根据需要定义ListView每行所实现的布局文件。

(2)定义一个HashMap构成的列表,将数据以键值对的方式存放在里面。

(3)构造SimpleAdapter对象。

(4)将ListView绑定到SimpleAdapter上。

本文是转自:

http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html

http://www.iteye.com/topic/540423

android ListView用法介绍的更多相关文章

  1. android ListView的介绍和优化

    xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity&qu ...

  2. Android ListView用法

    写了一个简单的示例来说明ListView的用法:给定一个单词,下面有四个含义,找出正确的一个,无论是否成功,则会跳转到下一个单词:主要用到的知识有: findViewById().  ListView ...

  3. Android.mk 用法介绍

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  4. Android GridView用法介绍

    GridView(网格视图)是按照行和列的方式来显示内容的,一般用于显示图片等内容,比如实现九宫格图: 第一个例子: 实现代码为: MainActivity.java package com.xiao ...

  5. xamarin android listview的用法

    listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...

  6. 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)

    即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...

  7. Android listview与adapter用法(BaseAdapter + getView)

    Android listview与adapter用法http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html package ...

  8. Android ListView OnItemLongClick和OnItemClick事件内部细节分享以及几个比较特别的属性

    本文转自 http://blog.sina.com.cn/s/blog_783ede030101bnm4.html 作者kiven 辞职3,4个月在家休息,本以为楼主要程序员逆袭,结果失败告终继续码农 ...

  9. [置顶] android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

随机推荐

  1. JS浏览器对象-History对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. PHP字符串左边补0,字符串右边补0

    概述:项目中经常会使用到在一串编码左边.右边甚至中间自动填充制定字符如"0" 并且制定填充后的字符串长度. 函数str_pad:该函数返回 input 被从左端.右端或者同时两端被 ...

  3. Wamp集成环境安装

    一.Wamp下载 点我下载WampServer2.1a-x32 二.Wamp安装步骤 三.修改语言为汉语 四.查看测试页面

  4. [置顶] Android系统访问控制之Smack安全策略设计与实现

    1. 制定smack规则 “Zygote”进程由init进程创建,它负责创建系统服务进程“systemserver”.“radio”进程和APP进程.其中“radio”进程的uid是1001,它能够实 ...

  5. Android Fragment 详解(一)

    Android从3.0开始引入fragment,主要是为了支持更动态更灵活的界面设计,比如在平板上的应用.平板机上拥有比手机更大的屏幕空间来组合和交互界面组件们.Fragment使你在做那样的设计时, ...

  6. _getch() 和 getch() 及 _T()

    带下划线_的函数一般是函数库内部的函数,而不带下划线的一般是提供给用户使用的函数.带下划线的目的是为了防止用户定义的函数和函数库的函数重名冲突,所以直接使用也是可以的.要用getch()必须引入头文件 ...

  7. 解决svn状态图标不显示的办法

    SVN是一款出色的代码版本控制工具,大部分开发者都在使用.由于前不久刚做了系统,所以要重装一下SVN,结果就出了问题,问题就是,不管是文件处于什么状态他的提示图标都不显示,这就太不给力了吧.通过搜寻, ...

  8. HID Boot device.

    整理这篇文章的目的: 客户会有用到遥控器部分(遥控器操作flow:当按下某个键时,MCU会透过UR送command给TP,TP吃到后再透过微软标准的keyboard上报) 要求:在BIOS设定阶段,遥 ...

  9. css圆角

    在CSS3中圆角属性,有四个.三个.两个和一个值. 四个值: 第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角.

  10. oracle 查询前一小时、一天、一个月、一年的数据

    查询一小时 select concat(to_char(sysdate,'yyyy-mm-dd ')||(to_char(sysdate,'hh24')-1),':00:00') start_time ...