Android控件开发之四----ListView(3)

下面介绍下SimpleAdapter的相关知识

以下是官方网上对SimpleAdapter的介绍:

An easy adapter to map static data to views defined in an XML file. You can specify the data backing the list as an ArrayList of Maps. Each entry in the ArrayList corresponds to one row in the list. The Maps contain the data for each row. You also specify an XML file that defines the views used to display the row, and a mapping from keys in the Map to specific views.

Binding data to views occurs in two phases.

First, if a SimpleAdapter.ViewBinder is available, setViewValue(android.view.View, Object, String) is invoked.

If the returned value is true, binding has occurred.

If the returned value is false, the following views are then tried in order: 
 (1)A view that implements Checkable (e.g. CheckBox). The expected bind value is a boolean. 
 (2)TextView. The expected bind value is a string and setViewText(TextView, String) is invoked. 
 (3)ImageView. The expected bind value is a resource id or a string and setViewImage(ImageView, int) or setViewImage(ImageView, String) is invoked. 
  If no appropriate binding can be found, an IllegalStateException is thrown.

(大概中文解释:适配器,将静态数据映射到在xml文件中定义的视图上,指定数据列表。每个ArrayList中得一项对应在ListView中的一行。你能自定一个Layout布局文件通过关键字映射来显示数据。

绑定数据分为两个阶段:

首先,如果一个SimpleAdapter.ViewBinder是有效的,setViewValue(android.view.View, Object, String)将被调用;

否则,如果返回失败,则会尝试以下的几个步骤。。。。。)


上代码

package com.potato;

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

import android.app.ListActivity;
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;

public class ListViewSimpleAdapterDemoActivity extends ListActivity
{
	private String[]				mListTitleStr	= { "姓名", "性别", "年龄", "居住地" };
	private String[]				mListStr		= { "GeXiao", "male","secret", "北京" };

	public ListView						mListView		= null;
	ArrayList<Map<String, Object>>	mDataArrList	= new ArrayList<Map<String, Object>>();	;
	public SimpleAdapter mAdapter;
	/** Called when the activity is first created. */
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		// 获取ListView
		mListView = getListView();// 注1

		// 数据
		int lengh = mListTitleStr.length;
		for (int i = 0; i < lengh; i++)
		{
			Map<String, Object> item = new HashMap<String, Object>();
			item.put("user_state", R.drawable.ic_launcher);
			item.put("title", mListTitleStr[i]);
			item.put("text", mListStr[i]);
			item.put("user", R.drawable.ic_launcher);
			mDataArrList.add(item);
		}
		
		// ListView与数据相连接
		mAdapter = new SimpleAdapter(this, mDataArrList,
						R.layout.list_item, 
						new String[] { "user_state", "title", "text" , "user"}, 
						new int[] { R.id.img_status, R.id.tv_name, R.id.tv_phone_number, R.id.img_user });  // 注2
		setListAdapter(mAdapter);
		
		// listview的item的点击事件响应
		mListView.setOnItemClickListener(new OnItemClickListener()
		{
			@Override
			public void onItemClick(AdapterView<?> adapterView, View view,
					int position, long id)
			{
				// 获取点击的View			// 注3
				View view1 = ListViewSimpleAdapterDemoActivity.this.mAdapter.getDropDownView(position, null, null);
				Toast toast = new Toast(ListViewSimpleAdapterDemoActivity.this);
				toast.setView(view1);
				toast.show();
			}
		});
	}

}

注2:

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

参数

context 关联SimpleAdapter运行着的视图的上下文。
data 一个Map的列表。在列表中的每个条目对应列表中的一行,应该包含所有在from中指定的条目
resource 一个定义列表项目的视图布局的资源唯一标识。布局文件将至少应包含哪些在to中定义了的名称。
from 一个将被添加到Map上关联每一个项目的列名称的列表
to 应该在参数from显示列的视图。这些应该全是TextView。在列表中最初的N视图是从参数from中最初的N列获取的值。

注3:

显示数据,通过getDropDownView获取要显示的数据。。。。

View view1 = ListViewSimpleAdapterDemoActivity.this.mAdapter.getDropDownView(position, null, null);


list_item.xml(ListView每个Item显示布局)

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content"
	android:background="#FFFFFF">
	<ImageView 
	    android:id="@+id/img_status"
		android:layout_width="wrap_content" 
		android:layout_height="fill_parent"
		android:adjustViewBounds="true"
		android:padding="2dip" />
	<TextView 
	    android:id="@+id/tv_name"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:gravity="top"
	    android:textStyle="bold"
	    android:textSize="20px"
	    android:layout_toRightOf="@id/img_status"
	    android:padding="2px"
	    android:singleLine="true"
	/>
	<TextView 
	    android:id="@+id/tv_phone_number"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:gravity="top"
	    android:textStyle="bold"
	    android:textSize="20px"
	    android:textColor="#000000"
	    android:layout_toLeftOf="@+id/img_user"
	    android:layout_alignParentBottom="true"
	    android:padding="2px"
	    android:singleLine="true"
	/>
	<ImageView android:id="@id/img_user"
		android:layout_width="wrap_content" 
		android:layout_height="fill_parent"
		android:layout_alignParentTop="true" 
		android:layout_alignParentBottom="true"
		android:layout_alignParentRight="true"
		android:adjustViewBounds="true"
		android:padding="2dip" />
</RelativeLayout>

有问题请留言。。。谢谢。。。

联系方式:ligexiao@gmail.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值