您的位置:首页 > 其它

ListView和SimpleAdapter

2014-05-15 13:58 141 查看
在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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: