`
uule
  • 浏览: 6359200 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

ListView学习2 - SimpleAdapter

 
阅读更多

3. 使用SimpleAdapter

使用SimpleAdapter 来实现ListView 是比较灵活和多变的方法,它所显示的ListView 不在仅仅是一行字了,可以是图片、文字、按钮等等。

可以自定义样式,这就意味着需要我们自己来设置布局文件,需要两个布局文件,一个是整个Activity 的布局文件,另一个是ListView 中每个条目的布局文件 ,代码片段如下:

Activity 布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试SimpleAdapter"/>
	 <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

ListView中每个条目即每行的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">  <!-- 注意每行布局是横向布局 -->

    <ImageView android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
    <TextView android:id="@+id/name"
        android:layout_width="180dp"
        android:layout_height="30dp"
        android:layout_marginLeft="20dp"
        android:textColor="#F65327"
        android:singleLine="true" />
    
    
    <TextView android:id="@+id/age"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:gravity="right"
        android:textColor="#F65327"/>
	<!-- 最后一个TextView的布局layout_width不用fill_parent的话,就无法右对齐 -->
</LinearLayout>

JAVA代码:

package com.example.firstandroid;

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

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class SimpleAdapterDemoActivity extends ListActivity {

	private ArrayList<Map<String, Object>> list = null;

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

		// 创建一个ArrayList,里面的每一项都是一个条目的内容,而每一个条目都是放在HashMap中的键值对
		list = getData();

		// SimpleAdapter有若干参数
		// 1. Context,当前的Activity
		// 2. 传入的List,List内存放的是Map
		// 3. 每一个条目的布局文件,即user.xml
		// 4. 一个String数组,是代表ListView显示的时候,每一列所代表的含义,这个String数组的内容,要与之前Map中放置的键值对的Key相对应
		// 5. 一个int数组,代表布局文件user.xml中,上面String数组中的Key所对应那个布局
		
		SimpleAdapter adapter = new SimpleAdapter(this,
				list, 
				R.layout.user, 
				new String[] { "image",	"name", "age" },
				new int[] { R.id.image, R.id.name, R.id.age });
		setListAdapter(adapter);

	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// super.onListItemClick(l, v, position, id);
		Toast.makeText(
				SimpleAdapterDemoActivity.this,
				String.valueOf(list.get(position).get("name")) + " is " + String.valueOf(list.get(position).get("age"))
						+ " years old.", Toast.LENGTH_SHORT).show();
	}

	public ArrayList<Map<String, Object>> getData() {
		list = new ArrayList<Map<String, Object>>();
		HashMap<String, Object> m1 = new HashMap<String, Object>();
		HashMap<String, Object> m2 = new HashMap<String, Object>();
		HashMap<String, Object> m3 = new HashMap<String, Object>();
		m1.put("image", R.drawable.dota1);
		m1.put("name", "Jack");
		m1.put("age", "63");
		m2.put("image", R.drawable.dota1);
		m2.put("name", "Bob");
		m2.put("age", "15");
		m3.put("image", R.drawable.dota2);
		m3.put("name", "Theron");
		m3.put("age", "25");
		list.add(m1);
		list.add(m2);
		list.add(m3);
		return list;
	}

}
 

对上述代码进行分析,首先,它不再继承Activity 类,而是继承了ListActivity ,需要使用SimpleAdapter 来建立ListView 的话,需要若干参数。第一个是Activity 的上下文对象;第二个是一个List 的对象,用来存放数据,List 中每一个数据,都是一个Map 对象,在Map 对象中存放着名称与数据的实际的键值对,上面代码建立了3HashMap ,也就是listView 中的3 个条目,每个条目是一个HashMap, 我们的ListView 有三列 ,分别是布局文件中的一个ImageView 和两个TextView ,因此,每个HashMap 中需要设置一个ImageView 和两个TextView 的数据,设置完成之后,将3HashMap 加入List 中;第三个参数是每个条目的布局文件,也就是上面的第二个布局文件;第四个参数是一个String 数组,表示着我们建立的ListView 中每列分别代表什么;第五个参数是一个int 数组,代表布局文件user.xml 中,上面String 数组中的Key 所对应那个布局。

接着将SimpleAdapter 对象设置给Activity ,就可以实现ListView 的显示了。

同样,可以onListItemClick 方法来对点击事件进行响应。如下为运行效果,可以看出它比上述两种方式更加灵活,可以自由扩展。


 

 

参考:http://theron.blog.51cto.com/2383825/649771

 

 

 

 

  • 大小: 91 KB
分享到:
评论

相关推荐

    android-listView-SimpleAdapter-进阶1.rar

    SimpleAdapter是Android提供的一种简单易用的适配器,它可以帮助开发者将数据集(如数组或列表)绑定到ListView上,使得数据能够以列表的形式展示给用户。本教程将深入探讨如何使用SimpleAdapter来实现ListView的...

    5-ListView-SimpleAdapter及自定义Adapter-进阶2.rar

    2. **Adapter**: 适配器是连接数据源和ListView的关键组件。它的主要职责是将数据转化为ListView能够理解的视图格式。Android提供了多种预定义的Adapter,如ArrayAdapter、CursorAdapter和SimpleAdapter等。 3. **...

    List控件使用---SimpleAdapter使用详解(一)

    《List控件使用---SimpleAdapter使用详解(一)》博文对应源码,该博文讲解了怎样使用simpleAdapter及派生自BaseAdater的ListView的使用方法,博客地址:...

    List控件使用---SimpleAdapter使用详解(二)

    《 List控件使用---SimpleAdapter使用详解(二)》:实现从本地JSON文件生成listView界面;对应博文地址:http://blog.csdn.net/harvic880925/article/details/17288687

    List控件使用---SimpleAdapter使用详解(一)对应源码

    《List控件使用---SimpleAdapter使用详解(一)》对应源码,讲解了listView的使用,博文对应地址:http://blog.csdn.net/harvic880925/article/details/17258789

    实现ListView的A-Z字母排序

    在Android中,常见的Adapter有ArrayAdapter、SimpleAdapter等,我们可以根据实际需求选择合适的Adapter实现。 实现A-Z字母排序的关键步骤如下: 1. 数据准备:确保你的数据源(如ArrayList)中的对象包含一个可以...

    Android listView学习源码-IT计算机-毕业设计.zip

    这份"Android listView学习源码"是针对初学者和毕业生设计的一个教学示例,旨在帮助他们深入理解ListView的工作原理和实际应用。 1. **ListView基本使用**: - `Adapter`:ListView的核心在于Adapter,它负责将...

    ListView和SimpleAdapter的简单应用

    SimpleAdapter则是ListView常用的适配器,它简化了数据绑定和UI展示的过程。本篇文章将深入探讨ListView和SimpleAdapter的基本使用以及它们在实际应用中的结合。 ### 1. ListView简介 ListView是Android SDK提供的...

    ListView【通用】SimpleAdapter适配器

    通过查看这个项目,你可以更直观地学习ListView和SimpleAdapter的使用方法,包括布局文件的编写、数据源的构造以及适配器的实例化等。 总的来说,ListView结合SimpleAdapter提供了一种便捷的方式来展示结构化的列表...

    Android基础编程-SimpleAdapter创建列表.pptx

    `SimpleAdapter`是Android SDK提供的一种适配器,它继承自`BaseAdapter`,并简化了数据绑定到列表视图(ListView)的过程。本篇内容将详细解释`SimpleAdapter`的工作原理以及如何使用它来创建列表。 `SimpleAdapter...

    Android ListView实现A-Z字母排序

    2. 实现排序逻辑: 在Java中,我们可以使用Collections.sort()方法对List进行排序。这个方法接受一个Comparator对象,用于定义比较规则。对于字符串,我们可以直接使用默认的比较器,它会按照字典顺序(即A-Z)进行...

    listview适配器SimpleAdapter

    2. **SimpleAdapter的构造方法** SimpleAdapter有多个构造方法,但最常用的是以下两个: - `SimpleAdapter(Context context, List, ?&gt;&gt; data, int resource, String[] from, int[] to)` - `context`:当前...

    Android UI:ListView - SimpleAdapter实例详解

    SimpleAdapter是ListView的适配器之一,它的特点是简单易用且具有高度的可扩展性,允许开发者自定义列表项的布局。本篇文章将深入讲解如何使用SimpleAdapter创建ListView实例。 首先,我们来看一下ListView的基本...

    安卓listview相关相关-自定义listview继承最新控件.zip

    2. **自定义Adapter**:Adapter是连接ListView和数据源的桥梁,需要重写`getView()`方法以定义每个条目的显示样式。常见的Adapter有ArrayAdapter、SimpleAdapter等,但自定义Adapter可以提供更大的灵活性。 3. **...

    安卓listview相关相关-Listview分页加载数据.rar

    2. Adapter:是ListView的灵魂,负责将数据源转化为ListView可以显示的视图。常见的Adapter有ArrayAdapter、SimpleAdapter等,开发者也可以自定义Adapter。 3. ViewHolder模式:为了提高ListView的滚动性能,通常...

    安卓listview相关相关-自定义控件实现listView中的图片轮换.rar

    总结来说,这个资源包提供了一个关于在ListView中自定义图片轮换的示例,对于想要学习Android自定义Adapter和图片动画的开发者来说,这是一个很好的学习材料。开发者可以通过理解并实践这份代码,掌握在ListView中...

    Xamarin.Android 使用 SimpleAdapter 打造 ListView 万能适配器-附件资源

    Xamarin.Android 使用 SimpleAdapter 打造 ListView 万能适配器-附件资源

    安卓listview相关相关-一个简单的实现双listview共存demo.rar

    2. **双ListView实现** - **并排布局**: 双ListView共存通常需要在同一个布局文件中使用两个ListView,通过LinearLayout或RelativeLayout进行横向排列。 - **独立的Adapter**: 每个ListView需要自己的Adapter来...

    安卓listview相关相关-CalendarListview.zip

    综上所述,这个资源包提供了一个基于ListView的日历视图实现,对于理解ListView的使用和自定义,以及日历视图的开发具有很高的学习价值。开发者需要对Android基础和ListView原理有深入理解,才能充分利用这个资源...

    Android应用源码之34.ListView控件学习-IT计算机-毕业设计.zip

    本项目是一个关于ListView的源码学习示例,旨在帮助开发者深入理解ListView的工作原理和使用技巧,对于进行Android毕业设计和论文撰写具有很高的参考价值。 首先,ListView的核心功能是显示一个可滚动的列表项,每...

Global site tag (gtag.js) - Google Analytics