列表(List)视图可以将某种控件按照列表的形式组织起来。
ListActivity 扩展了Activity可以方便 ListView的使用。
ListActivity 类实际上集成了Activity和ListView 的功能,其内部包含了一个ListView ,使用这个类可以直接构造界面中的列表视图。
ListView的数据源可以是ArrayAdapter、SimpleAdapter、SimpleCursorAdapter
我们直接看使用SimpleAdapter的例子:
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"
android:orientation="vertical" >"
<ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<TextView
android:id="@id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sorry, no display"
/>
</LinearLayout>
一个LinearLayout布局中含有一个ListView,默认ID为android:list;
ID为android:empty的TextView的意思为若ListView中无数据的话,则显示该TextView(sorry, no display);
simplelayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_profession"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/tv_name"
android:paddingLeft="20dp"
/>
</RelativeLayout>
MainActivity.java
package com.example.listview;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends ListActivity { //继承ListActivity类
ArrayList<Map<String, Object>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PrepareData();
//R.layout.simplelayout 为ListView一列的布局,在这里为RelativeLayout相对布局
//R.id.tv_name 第一个TextView的ID
//R.id.tv_profession 第二个TextView的ID
//data为ArrayList结构,其中的成员为Map数据类型
//String[]为Map中索引值的key
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.simplelayout,
new String[]{"姓名","职业"}, new int[]{R.id.tv_name, R.id.tv_profession});
setListAdapter(adapter);
setContentView(R.layout.activity_main);
}
//重写onListItemClick方法,实现列表按键事件响应
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
//显示到面板的标题栏中
setTitle(l.getItemAtPosition(position).toString());
}
private void PrepareData()
{
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item ;
item = new HashMap<String, Object>();
item.put("姓名", "张三");
item.put("职业","码农");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "李四");
item.put("职业","产品经理");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "王五");
item.put("职业","销售");
data.add(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
运行效果:
点击中间一列后,标题栏的变化: