代码请见SimpleAdapterDemo.zip。

步骤如下:

1、创建主布局文件

<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=".MainActivity" > <ListView
android:id="@+id/listview"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:divider="#00ff00"
android:dividerHeight="2dp"
android:headerDividersEnabled="false"
/> </RelativeLayout>

2、创建每个列表选项的视图

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_header"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:contentDescription="@string/header"/> <LinearLayout
android:id="@+id/ll_title_content"
android:layout_width="0dp"
android:layout_height="40dp"
android:orientation="vertical"
android:layout_weight="4"> <TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="#000000" /> <TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="#00ff00" />
</LinearLayout> </LinearLayout>

3、创建主类

package com.ljh.listviewdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.app.Activity; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // (1)创建要显示的文本内容
String[] arr = { "header", "title", "content" };
// (2)与使用ListActivity的最大区别:使用findViewById得到一个ListView
ListView lv = (ListView) findViewById(R.id.listview); // (3)创建ArrayAdapter,其中第二个参数resource:The resource ID for a layout file
// containing a TextView to use when instantiating views.是要以一个layout作为
// 参数,且此layout需要包含textview。
/*
* ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
* R.layout.list, arr);
*/ String[] titles = { "title1", "title2", "title3", "title4" };
String[] contents = { "content1", "content2", "content3", "content4" };
int[] headers = { R.drawable.p1, R.drawable.p2, R.drawable.p3,
R.drawable.p4 };
List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>(); /*
* Parameters:
* context The context where the View associated with this
* SimpleAdapter is running data A List of Maps. Each entry in the List
* corresponds to one row in the list. The Maps contain the data for
* each row, and should include all the entries specified in "from"
* resource Resource identifier of a view layout that defines the views
* for this list item. The layout file should include at least those
* named views defined in "to" from A list of column names that will be
* added to the Map associated with each item. to The views that should
* display column in the "from" parameter. These should all be
* TextViews. The first N views in this list are given the values of the
* first N columns in the from parameter.
*/SimpleAdapter adapter = new SimpleAdapter(this, datas,
R.layout.list, arr, new int[] { R.id.iv_header, R.id.title,
R.id.content });
for (int i = 0; i < titles.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", titles[i]);
map.put("content", contents[i]);
map.put("header", headers[i]);
datas.add(map);
}
// (4)为ListActivity设置adapter.
lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { // 定义当某个选项被点击时的操作。
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this,
position + " item is clicked.", Toast.LENGTH_LONG)
.show(); } }); } }

1、使用SimpleAdapter与ArrayAdapter相比,它可以支持复杂的表项结构,而不只是单一的textview。

2、其创建过程的两个主要区别是:

(1)每个列表项的布局文件不一样

(2)创建SimpleAdapter的操作更为复杂,需要构建一个List<Map<String, Object>>。

AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表的更多相关文章

  1. AdapterView及其子类之三:基于ListView及ArrayAdapter实现列表

    见归档项目ListViewDemo.zip. 基本步骤如下: 1.创建主布局文件,里面包含一个ListView元素. <RelativeLayout xmlns:android="ht ...

  2. Android开发自学笔记(Android Studio)—4.4 AdapterView及其子类

    一.引言       AdapterView本身是一个抽象类,而它派生的子类在用法上也基本相似,只是在显示上有一定区别,因此把他们也归为一类.       AdapterView具有如下特征: Ada ...

  3. 第3组UI组件:AdapterView及其子类

    1 AdapterView类简介 1.1 AdapterView组件是一组重要的组件,AdapterView本身是一个抽线类,实际使用更多的都是Adapter相关子类,AdapterView具有如下特 ...

  4. android-UI组件(四):AdapterView及其子类

    http://blog.csdn.net/litianpenghaha/article/details/23270881 AdapterView组件是一组重要的组件,AdapterView本身是一个抽 ...

  5. UI组件之AdapterView及其子类关系,Adapter接口及事实上现类关系

    AdapterView本身是一个抽象基类,它派生的的子类在使用方法上十分类似.AdapterView直接派生的三个子类:AbsListView.AbsSpinner,AdapterViewAnimat ...

  6. Android学习笔记(23):列表项的容器—AdapterView的子类们

    AdapterView的子类的子类ListView.GridView.Spinner.Gallery.AdapterViewFlipper和StackView都是作为容器使用,Adapter负责提供各 ...

  7. 滚动视图、列表视图[ListView、SimpleAdapter类]

    滚动视图 <ScrollView android: layout_width="fill_parent" android: layout_height="fill_ ...

  8. 第四组UI组件:AdapterView及子类

    AdapterView组件是一组重要的组件,AdapterView本省是一个抽象基类,它派生的子类在用法上十分相似,只是显示界面与一定的区别,因此这次针对它们的共性集中讲解,并突出介绍他们的区别. A ...

  9. Android的AdapterView及其子类简介-android学习之旅(二十三)

    AdapterView简介 AdapterView组件是一类非常重要的组件,AdapterView本身是一根抽象基类,继承于ViewGroup,用法十分相似,只是显示形式不一样,因此同意讲解. Ada ...

随机推荐

  1. [ofbiz]解决load-demo花费过长时间的问题

    一直以来使用公司配置的hp-cq45笔记本,在初始化ofbiz的时候load-demo需要花费很长一段时间,比如90分钟,或者129分钟. 解决办法:安装官方驱动--intel快速存储驱动 ok,lo ...

  2. 子元素用margin-top 为什么反而作用在父元素上?对使用margin-top 的元素本身不起作用?

    在这个说明中,“collapsing margins”(折叠margin)的意思是:2个或以上盒模型之间(关系可以是相邻或嵌套)相邻的margin属性(这之间不能有非空内容.padding区域.bor ...

  3. Retrieving the COM class factory for component with CLSID XX failed due to the following error: 80070005 拒绝访问。

    环境及异常信息说明 环境说明: Win2008 R2 企业版 x64 .IIS 7.0 功能说明:服务端操作Excel,(上传Excel到服务器,并在服务器端读取Excel中的数据) 异常信息:Ret ...

  4. C语言数据类型转换

    变量的数据类型是可以转换的.转换的方法有两种,一种是自动转换,一种是强制转换. 自动转换 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成.自动转换遵循以下规则: 若参与运算量的类型不同, ...

  5. information_schema.collations 学习

    information_schema.collations 表中的每一行对应一个排序规则 1.information_schema.collations 表中学用列: 1.id :排序规则的ID 2. ...

  6. Maven的使用--安装

    Maven是一个java工具,所以在安装maven之前,先确保已经安装JDK. 1.下载maven3,最新版本是Maven3.2.1 ,下载地址:http://maven.apache.org/dow ...

  7. MFC与Qt的内存管理

    最近在做MFC向Qt的移植,在内存管理方面遇到了很头疼的问题,虽然不知道问题到底出在哪,先了解下这两个库的内存管理方式.于是转载两篇关于内存管理的文章. 一. Qt内存管理: 在Qt的程序中经常会看到 ...

  8. [PowerShell] Backup Folder and Files Across Network

    ## This Script is used to backup folder/files and delete the old backup files. ## Author: Stefanie # ...

  9. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  10. 【转】android电池(五):电池 充电IC(PM2301)驱动分析篇

    关键词:android 电池  电量计  PL2301任务初始化宏 power_supply 中断线程化 平台信息:内核:linux2.6/linux3.0系统:android/android4.0  ...