1、最简单的ListView main.xml布局文件 <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".ListiView" > <!--这里是一个ListView组建设置了分割线的颜色(android:divider="#f00")分割线亮度(android:dividerHeight)--> <!--在该ListView中引用了一个数组资源name--> <ListView android:layout_width="wrap_content" android:layout_height="fill_parent" android:divider="#f00" android:dividerHeight="2px" android:headerDividersEnabled="false" android:entries="@array/name" /> </RelativeLayout> 数组资源在res目录layout目录下的array.xml中 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="name"> <item>Lucy</item> <item>Lily</item> <item>Hnamei</item> <item>Hanlei</item> </string-array> </resources> 通过下面代码运行 package android.listview.listview_1; import android.os.Bundle; import android.app.Activity; public class ListiView extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 2、使用Adapter类 ArrayAdapter(Context, int, array)第一个参数是上下文,第二个参数是显示的TextView, 第三个参数需要显示的数据。ArrayAdapter的作用就是将相应的数据显示在相应的TextView 中去。 首先布局main.xml在其中需要有两个ListView来显示两个View列表 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 两个ListView的分隔符颜色不同 --> <ListView android:id="@+id/list1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#f00" android:dividerHeight="2px" android:headerDividersEnabled="false" /> <ListView android:id="@+id/list2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#0f0" android:dividerHeight="2px" android:headerDividersEnabled="false" /> </LinearLayout> 分别建立两个布局,都是只有一个TextView组件(布局组件都不包括)。即是两种显示方式 name.xml <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> nation.xml <?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:checkMark="?android:attr/textCheckMark" /> 利用下面程序对布局Adapter进行组装运行 package android.listview.listview_2; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class ListView_Adapter extends Activity { private static String [] names = {"Lucy", "Lily", "HanMei", "LiLei"}; private static String [] nations = {"US", "UK", "CN", "CA"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 得到list1并且给它添加ArrayAdapter ListView v1 = (ListView)findViewById(R.id.list1); /* 第一个参数是当前的上下文(ListView_Adapter对象),第二个是一个仅仅含有TextView组件的布局,第三个是 一个数组(数据)*/ // 将数组数据分别放在了每一个View中并且显示 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.name, names); v1.setAdapter(adapter1); ListView v2 = (ListView)findViewById(R.id.list2); ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, R.layout.nation, nations); v2.setAdapter(adapter2); } } 3、继承ListActivity 不需要setContentView(R.layout.main)来创建视图,而是以setListAdapter(adapter)添加adapter来创建视图。 代码如下 package android.listview.listview_3; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; public class ListView_3 extends ListActivity { private static String [] names = {"Lucy", "Lily", "HanMei", "HanLei"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.main, names); this.setListAdapter(adapter); } } 需要一个用来显示的组建TextView,这个文件在main.xml中 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#0000ff" /> 这样就可以达到列表显示数据的效果了。 4、SimpleAdapter的使用 在总体布局中需要一个ListView组件,用来显示每一个需要显示的条目 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ListView android:id="@+id/mylist" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 需要一个显示每条条目的布局 row.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" > <ImageView android:id="@+id/head" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:textSize="14dp" /> <TextView android:id="@+id/desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:textSize="10dp" /> </LinearLayout> </LinearLayout> 在运行的时候程序会将整个条目放入到ListView中去,达到显示效果 通过以下程序进行组装数据和组件 package android.listview.listview_4; 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 SampleAdapterTs extends Activity { private static String [] names = {"Lucy", "Lily", "HanMei", "HanLei"}; private static String [] descs = {"I'm Lucy", "I'm Lily", "I'm HanMei", "I'm HanLei"}; private static int [] heads = {R.drawable.h1,R.drawable.h2,R.drawable.h3,R.drawable.h4}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView list = (ListView)findViewById(R.id.mylist); List<Map<String, Object>> items = new ArrayList<Map<String, Object>>(); for(int i =0 ;i < names.length; i++){ Map<String, Object> item = new HashMap<String, Object>(); item.put("head", heads[i]); item.put("name", names[i]); item.put("desc", descs[i]); items.add(item); } // 参数说明: SimpleAdapter simpleAdapter = new SimpleAdapter(this, items, R.layout.row, new String[]{"head","name","desc"}, new int[]{R.id.head, R.id.name, R.id.desc}); list.setAdapter(simpleAdapter); // 可以添加上点击事件 list.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 此处的Context应该是自己的Activity Toast.makeText(SampleAdapterTs.this, names[position] + " say hello~", Toast.LENGTH_SHORT).show(); }}); } } } SimpleAdapter 需要5个参数,第一个是上下文,第二个就是我们组建的一个数据结构,第三个是每个条目的布局,第四个是我们设置的键值, 最后一个是显示值的所有组件。 (第四个参数:通过键值可以找到每一个item中的值,第五个参数告诉程序将值放入相应的组件中去) 5、BaseAdapter的使用 可以对BaseAdapter的方法,来完成自己的需求 一个布局main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android: <ListView android:id="@+id/mylist" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 主要程序 package android.listview.listview_5; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class BaseAdapterTest extends Activity { private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView myList = (ListView) findViewById(R.id.mylist); BaseAdapter baseAdapter = new BaseAdapter() { // 创建的记录数 @Override public int getCount() { return 20; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } // 一条项显示的内容,返回一个项 @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout line = new LinearLayout(BaseAdapterTest.this); line.setOrientation(0); ImageView image = new ImageView(BaseAdapterTest.this); image.setImageResource(R.drawable.ic_launcher); text = new TextView(BaseAdapterTest.this); text.setText("第" + (position + 1) + "个元素"); text.setTextSize(20); text.setTextColor(Color.RED); line.addView(image); line.addView(text); return line; } }; myList.setAdapter(baseAdapter); // 添加事件 myList.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(BaseAdapterTest.this, "第" + (position + 1) + "元素", Toast.LENGTH_SHORT).show(); } }); } } 这就是对ListView的学习。