首页 > 代码库 > ListView和SimpleAdapter

ListView和SimpleAdapter

  在Android中当我们需要在界面上显示列表内容,则要使用ListView控件。 本文主要介绍如何使用ListView控件来显示自己想要的内容。

本文的最终成果如下图所示,当用户点击ListView中的内容时,控制台将会输出相应的Item名字。



 在layout当中,我们有两个xml文件,分别为 activity_main 和 simple_item 其中在 前者中创建了一个ListView 控件,在后者中则定义了ListView 中所要显示的列表项,在本项目中为两个TextView. 

activity_main.xml代码如下

<LinearLayout 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"
    tools:context="${packageName}.${activityClass}" >

    
    <!-- 定义一个List -->
    <ListView
        android:id="@+id/mylist"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        />

</LinearLayout>

simple_item.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="wrap_content"
    android:orientation="vertical" >
    <LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
        <TextView 
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            />
        <TextView 
            android:id="@+id/desc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            />
    </LinearLayout>
    


</LinearLayout>


可以这么认为,simple_item 布局是在activity_main里面进行的布局。

  

MainActivity.java 代码如下

package com.example.listactivitytest;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	private String[] names = new String[]{
			"孙悟空","猪八戒","沙僧","唐僧"
	};
	private String[] descs = new String[]{
			"牛逼","逗比","苦逼","装逼"
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//创建一个list集合,List集合的元素是Map
		List<Map<String,Object>> listItems = new ArrayList<Map<String,Object>>();
		//为Map赋值
		for(int i = 0; i <names.length;i++){
			Map<String,Object> listItem = new HashMap<String,Object>();
			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","desc"},
				new int[] {R.id.name,R.id.desc});
		ListView list = (ListView)findViewById(R.id.mylist);
		//为ListView 设置Adapter 
		list.setAdapter(simpleAdapter);
		list.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				System.out.println("用户点击了 "+ names[position]);
				
			}
		});
		
		
	}
	
}

  在Java代码当中,首先创建了两个String数组,然后利用Map集合把他们封装起来。最后把它们绑在SimpleAdapter中。

   重点看SimpleAdapter构造函数。 

一共有五个参数。

第一个参数context,设置要绑定的View所在的Context. 这里使用了this表示就绑定在这个Activity上。

第二个参数list,设置一个List集合与之绑定。该List集合中存放着要在列表中显示的内容。

第三个参数resource,指定一个界面布局的ID,这里使用了simple_item文件作为列表项组件。

第四个参数from,指定提取Map集合中哪些key所对应的value来生成列表项。

第五个参数to,该参数决定填充哪些组件。这里用来填充ListView的是simple_item中的两个TextView.