在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.