改变分隔条、基于数组的ListView
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 直接使用数组资源给出列表项 --> <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:entries="@array/books" android:divider="@drawable/red" android:headerDividersEnabled="false" /> <!-- 使用ArrayAdapter提供列表项的ListView --> <ListView android:id="@+id/list2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@drawable/green" /> </LinearLayout>
定义了两个ListView,第一个ListView通过android:entries指定列表项数组
第二个LisView通过ArrayAdapter使用数组来提供列表项。
<?xml version="1.0" encoding="UTF-8"?> <resources> <string-array name="books"> <item>疯狂Java讲义</item> <item>疯狂Ajax讲义</item> <item>疯狂XML讲义</item> <item>疯狂Android讲义</item> </string-array> </resources>
package org.crazyit.listview; import org.crazyit.listview.R; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class ArrayAdapterList extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView list2 = (ListView)findViewById(R.id.list2); //定义一个数组 String[] arr ={"孙悟空" , "猪八戒" , "牛魔王"}; //将数组包装ArrayAdapter ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>( this , android.R.layout.simple_list_item_1 , arr); //为ListView设置Adapter list2.setAdapter(arrayAdapter); } }
simple_list_item_1:每一个列表项都是一个普通的TextView
simple_list_item_2:每一个列表项都是一个普通的TextView(字体略大)
simple_list_item_checked:每一个列表项都是一个已勾选的列表项
simple_list_item_multiple_choice:每个列表项都是带多选框的文本
simple_list_item_single_choice:每个列表项都是带多单选按钮的文本
基于ListActivity实现列表
如果程序的窗口仅仅需要显示一个列表,则可以直接让Activity继承ListActivity来实现,
ListActivity旳子类无需调用setContentView()来显示某个界面,
而是可以传入一个内容Adapter,ListActivity旳子类就呈现出一个列表。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000ff" android:layout_weight="1" android:drawSelectorOnTop="false"/> </LinearLayout>
package org.crazyit.listactivity; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; public class ListActivityTest extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // //设置使用自己的界面布局 // setContentView(R.layout.main); String[] arr = { "孙悟空", "猪八戒", "唐僧" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, arr); // 设置该窗口显示列表 setListAdapter(adapter); } }
使用SimpleAdapter创建ListView
SimpleAdapter自定义ListView的列表项
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 定义一个List --> <ListView android:id="@+id/mylist" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <!-- 定义一个ImageView,用于作为列表项的一部分。 --> <ImageView android:id="@+id/header" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" /> <!-- 定义一个TextView,用于作为列表项的一部分。 --> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16dp" android:gravity="center_vertical" android:paddingLeft="10dp" /> </LinearLayout>
package org.crazyit.simpleadapter; 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 SimpleAdapterTest extends Activity { private String[] names = new String[] { "虎头", "弄玉", "李清照", "李白"}; private int[] imageIds = new int[] { R.drawable.tiger , R.drawable.nongyu , R.drawable.qingzhao , R.drawable.libai}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //创建一个List集合,List集合的元素是Map List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < names.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("header", imageIds[i]); listItem.put("personName", names[i]); listItems.add(listItem); } //创建一个SimpleAdapter SimpleAdapter simpleAdapter = new SimpleAdapter(this , listItems , R.layout.main , new String[]{ "personName", "header" } , new int[]{R.id.name , R.id.header}); ListView list = (ListView)findViewById(R.id.mylist); //为ListView设置Adapter list.setAdapter(simpleAdapter); } }
SimpleAdapter simpleAdapter = new SimpleAdapter(
this
, listItems ——该参数应该是一个List<?extends Map<String, ?>>类型的集合对象,该集合中每个Map<String, ?>对象生成一个列表项;
, R.layout.main ——该参数指定一个界面布局的ID
, new String[]{ "personName", "header" } ——该参数应该是一个String[]类型的参数,该参数决定提取Map<String,?>对象中那些key对应的value来生成列表项
, new int[]{R.id.name , R.id.header}); ——该参数应该是一个int[]类型的参数,该参数决定使用哪些View组件来组合一个列表项