列表视图(ListView)在Android中非常常用,创建一个ListView分为两步:
一:创建ListView;
二:用setAdapter给ListView添加内容。
列表的每一项(item)中既可以包含简单的文字内容,也可以包含复杂的图片、文字、图形等的复杂布局。复杂的混合布局需要使用Map进行封装成一个整体作为一项。下面分别介绍。
一、简单文字布局的ListView
1.效果:
2.代码:
(1)MainActivity.java
package org.wp.adapter01;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView mlistview = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取ListView组件
mlistview = (ListView) super.findViewById(R.id.listview);
// 给LIstView设定适配器(给ListView填充数据)
/* ArrayAdapter的三个参数 :
1.上下文,即此Activity类
2.布局,使用的是系统自带的simple_list_item布局的一种,包括五种
3.ArrayList数据
*/
mlistview.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, getListData()));
}
private ArrayList<String> getListData() {
// 定义数据组mList
ArrayList<String> mList = new ArrayList<String>();
// 向mList中添加3条数据
mList.add("项目1");
mList.add("项目2");
mList.add("项目3");
return mList;
}
}
(2)activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="org.wp.adapter01.MainActivity" >
<!-- 在布局中加入ListView -->
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3.知识
simple_list_item_1 | 每个列表项都是一个普通的TextView |
simple_list_item_2 | 每个列表项都是一个普通的TextView(字体稍大) |
simple_list_item_checked | 每个列表项都是一个已勾选的列表项 |
simple_list_item_multiple_choice | 每个列表项都是一个带多选框的文本 |
simple_list_item_single_choice | 每个列表项都是一个带单选按钮的文本 |
二、文字图片混合布局的ListView
1.效果:
2.代码:
(1)MainActivity.java
package org.wp.adapter02_simp;
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.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
private ListView mlistview = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mlistview = (ListView) super.findViewById(R.id.listview);
// 定义SimpleAdapter(传入5个参数)
SimpleAdapter madapter = new SimpleAdapter(this // 父容器
, getListData() // 列表项
, R.layout.itemlayout // 第五个参数组件来自于该布局界面
, new String[] { "province", "city" ,"image"} // 列表项数据的key
, new int[] { R.id.text1, R.id.text2, R.id.image}); // 列表项key对应的数据
// 设置ListView的适配器
mlistview.setAdapter(madapter);
}
private ArrayList<Map<String, Object>> getListData(){
// 定义数据组
ArrayList<Map<String, Object>> mlist = new ArrayList<Map<String, Object>>();
String[] province = new String[] { "湖北", "江西", "广东" ,"广东"};
String[] city = new String[] { "武汉", "南昌", "广州" ,"深圳"};
int[] imageId = new int[] { R.drawable.wuhan,
R.drawable.nanchang, R.drawable.guangzhou ,R.drawable.shenzhen};
// 每循环一次就想列表中添加一条数据
for (int i = 0; i < 4; i++) {
// 定义HashMap封装数据
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("province", province[i]);
item.put("city", city[i]);
item.put("image", imageId[i]);
// 将一条封装好的item加入到列表中
mlist.add(item);
}
return mlist;
}
}
(2)activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#97D800"
android:orientation="vertical"
tools:context="org.wp.adapter02_simp.MainActivity" >
<!-- 布局中定义一个ListView -->
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
(3)itemlayout.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="match_parent"
android:orientation="horizontal" >
<!-- 左边的垂直布局,放两个TextView -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp"
android:textColor="#FFFFFF"
android:textSize="25sp" />
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp"
android:textColor="#FFFFFF"
android:textSize="25sp" />
</LinearLayout>
<!-- 右边放一张图片 -->
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp" />
</LinearLayout>
小建议:每一项的item布局(即itemlayout.xml的内容)也可以直接写在activity_main.xml中,因为在java文件中使用时是通过id来查找的,但是个人建议新建一个xml布局文件,这样一个item作为一个整体,修改时思路也比较清晰,同时不会影响到activity_main.xml主布局的直观,就这样了。。