在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.
ListView和SimpleAdapter,布布扣,bubuko.com