Android开发系列(十九):为SimpleAdapter设置样式

Adapter的作用:数据在adapter中做了处理之后,显示在视图上

一般的对于ArrayAdapter来说,只需要把一个数组和一个样式传递给ArrayAdapter之后就可以在视图上用一个列表显示出这个字符串数组。

例如下边的代码:

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

但是,比如我们手机的联系人目录所示,不仅仅是有列表,而且有头像,可能还有手机号码。所以,单纯的ArrayAdapter是不能够实现这种复杂的视图的。

我们可以用SimpleAdapter来实现这种复杂的视图,不过需要设计样式。

我们新建一个Android项目,然后,我们在layout目录下定义一个ListView,来存放列表:

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	>
<!-- 定义一个List -->
<ListView android:id="@+id/mylist"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	/>
</LinearLayout>

在定义这个之后,我们就可以写java代码了:

SimpleAdapterTest.java:

package org.crazyit.ui;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class SimpleAdapterTest extends Activity
{
	private String[] names = new String[]
		{ "虎头", "弄玉", "李清照", "李白"};
	private String[] descs = new String[]
		{ "可爱的小孩", "一个擅长音乐的女孩"
			, "一个擅长的文学的女性", "浪漫主义诗人"};
	//这是三张图片的id的集合
	private int[] imageIds = new int[]
		{ R.drawable.tiger , R.drawable.nongyu
		, R.drawable.qingzhao , R.drawable.libai};

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 创建一个List集合,List集合的元素是Map
		List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < names.length; i++)
		{
			Map<String, Object> listItem = new HashMap<String, Object>();
			listItem.put("header", imageIds[i]);
			listItem.put("personName", names[i]);
			listItem.put("desc", descs[i]);
			listItems.add(listItem);
		}
		// 创建一个SimpleAdapter
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
			R.layout.simple_item,
			new String[] { "personName", "header" , "desc"},
			new int[] { R.id.name, R.id.header , R.id.desc });

		ListView list = (ListView) findViewById(R.id.mylist);
		// 为ListView设置Adapter
		list.setAdapter(simpleAdapter);
		// 为ListView的列表项单击事件绑定事件监听器
		list.setOnItemClickListener(new OnItemClickListener()
		{
			// 第position项被单击时激发该方法。
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id)
			{
				Toast.makeText(getApplicationContext(), names[position]+ "被单击了", 1).show();
			}
		});
		list.setOnItemSelectedListener(new OnItemSelectedListener()
		{
			// 第position项被选中时激发该方法。
			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id)
			{
				Toast.makeText(getApplicationContext(), names[position]+ "被选中了", 1).show();
			}
			@Override
			public void onNothingSelected(AdapterView<?> parent)
			{
			}
		});
	}
}

在上边java代码中,创建SimpleAdapter对象的时候,我们用到了一个视图:R.layout.simple_item,这个就是我们自定义的样式,可以通过这个样式来实现复杂的视图。

simple_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="match_parent"
	android:layout_height="wrap_content">
<!-- 定义一个ImageView,用于作为列表项的一部分。 -->
<ImageView android:id="@+id/header"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:paddingLeft="10dp"
	/>
<LinearLayout
	android:orientation="vertical"
	android:layout_width="match_parent"
	android:layout_height="wrap_content">
<!-- 定义一个TextView,用于作为列表项的一部分。 -->
<TextView android:id="@+id/name"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:textSize="20dp"
	android:textColor="#f0f"
	android:paddingLeft="10dp"
	/>
<!-- 定义一个TextView,用于作为列表项的一部分。 -->
<TextView android:id="@+id/desc"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:textSize="14dp"
	android:paddingLeft="10dp"
	/>
</LinearLayout>
</LinearLayout>

把这些组合起来就可以构成下边的效果:

时间: 2024-08-10 02:09:32

Android开发系列(十九):为SimpleAdapter设置样式的相关文章

Android开发(十四)——SimpleAdapter与自定义控件

ListView中可以使用SimpleAdapter进行数据与视图的绑定,但都是对已有的系统控件的绑定,如果自定义空间直接使用SimpleAdapter绑定,则会报错. 如,使用CircleImageView圆形头像,直接不能绑定需要重新SimpleAdapter方法. eg:android ListView 重写 SimpleAdapter 显示图片 异步加载及文字处理 simpleAdapter=new SimpleAdapter(context, mData, R.layout.goods

Android开发系列(九):创建数据库以及完成简单的CRUD操作

本篇博文主要实现简单的创建数据库以及实现CRUD操作. 首先,我们建立一个Android Project,命名为db 一.完成数据库的创建操作: 用SQLiteOpenHelper类中的getWritableDatabase()和getReadableDatabase()都可以获取一个操作数据库的SQLiteDatabase实例,其中getReadableDatabase()方法中会调用getWritableDatabase()方法. 区别:其中,getWritableDatabase() 方法

BizTalk开发系列(十九) BizTalk命名规范

目前BizTalk项目的开发人员比较少,但是在开发过程中还是需要命名规范的约束.根据以往BizTalk项目的经验,整理了BizTalk命 名规范.包括:BizTalk Application, Schema, Map, Pipeline, Orchestration Logic Port, Physical Port等.并提供了相关的示例方便大家参考. <BizTalk命名规范> 通用: 项目中能用英文单词的用单词,否则用拼音. BizTalk项目中的Schema , Map, Orchest

C#程序员学习Android开发系列之ListView

上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如何在ListView中按照我们想要的界面效果进行展示.限于篇幅这篇重点讲ListView,下篇博客重点阐述SQLite. ListView是一个常用的数据显示控件,假设我们要做一个简单的界面,如图所示. 这张图是我直接从Android平板电脑(Android 4.2.2)上面截图下来的,就是一个普通

QT开发(十九)——QT内存泄漏问题

QT开发(十九)--QT内存泄漏问题 一.QT对象间的父子关系 QT最基础和核心的类是:QObject,QObject内部有一个list,会保存children,还有一个指针保存parent,当自己析构时,会自己从parent列表中删除并且析构所有的children. QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针. 当指定QT对象的父对象时,父对象会在子对象链表中加入该对象的指针,该对象会保存指向其父对象的指针. 当QT对象被销毁时,

快速Android开发系列网络篇之Retrofit

Retrofit是一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎么实现的也不太敢用,不然出问题了就不知道怎么办了.这几天比较闲就下下来看了一下,了解一下大概实现方法,细节就不追究了.先来看一个官网的例子,详细说明去网官看 简单示例 首先定义请求接口,即程序中都需要什么请求操作 public interface GitHubService { @GET("/use

C#程序员学习Android开发系列之SQLite

上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app打包到apk文件当中. SQLite的官方网站是http://www.sqlite.org/,可以任意下载,上面也有详尽的文档可以参考,这篇博客重点关注SQLite在Android开发中如何使用. 在Android开发中,推荐建立一个类继承自SQLiteOpenHelper来创建数据库操作类,比如:

快速Android开发系列网络篇之Volley

Volley是Google推出的一个网络请求库,已经被放到了Android源码中,地址在这里,先看使用方法 RequestQueue mRequestQueue = Volley.newRequestQueue(context); JsonObjectRequest req = new JsonObjectRequest(URL, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONO

C#程序员学习Android开发系列之Android项目的目录结构

今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目录:存放java源代码的目录,里面建立一个包,包里面有4个java源文件(分别都继承自Activity).由于java要求比较严格,因此要求类名与文件名一致. gen(Generated Java Files)目录:自动产生Java源文件的目录,是由工具自动生成的,一般不需要自己修改.里面主要有一个

C#程序员学习Android开发系列之搭建开发环境

接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工具.adt以及android sdk,体验了一把android开发,记得当时搭建开发环境相当麻烦.由于android开发是基于Java的,所以除了上述的工具之外,首先需要安装jdk,记得当时流行的是jdk1.5(后来是1.6,现在是1.7,未来是1.8),安装好之后需要设置环境变量. 时隔4年之后,