列表(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; } }
运行效果:
点击中间一列后,标题栏的变化: